diff --git a/apps/api/src/combat/combat-engine.types.ts b/apps/api/src/combat/combat-engine.types.ts index b108363..31be226 100644 --- a/apps/api/src/combat/combat-engine.types.ts +++ b/apps/api/src/combat/combat-engine.types.ts @@ -3,10 +3,21 @@ import { CombatAction } from './combat-action.enum'; import { CombatEventType } from './combat-event-type.enum'; import { CombatStatus } from './combat-status.enum'; +// Only HEAVY_ATTACK needs telegraphing today; NORMAL_ATTACK resolves +// immediately and is never held as a pending intent (Playable Slice 0.6 +// spec ยง5). Add members here as future slices add more prepared actions. +export type CombatIntent = 'HEAVY_ATTACK'; + export interface CombatEngineCombatantStats { attack: number; weaponDamage?: number; armor: number; + // Player-only: seeded at combat start, decremented by POTION. Optional + // because the monster's stats never carry it. + potionsRemaining?: number; + // Monster-only: set when it telegraphs, cleared when the action resolves + // or is interrupted. Optional because the player's stats never carry it. + pendingAction?: CombatIntent; } export interface CombatEngineCombatant { diff --git a/apps/api/src/combat/entities/combat.entity.ts b/apps/api/src/combat/entities/combat.entity.ts index c767d18..5b2091f 100644 --- a/apps/api/src/combat/entities/combat.entity.ts +++ b/apps/api/src/combat/entities/combat.entity.ts @@ -11,15 +11,18 @@ import { import { Character } from '../../characters/entities/character.entity'; import { HuntEncounter } from '../../hunting/entities/hunt-encounter.entity'; import { MonsterDefinition } from '../../monsters/entities/monster-definition.entity'; +import { CombatIntent } from '../combat-engine.types'; import { CombatStatus } from '../combat-status.enum'; export interface CombatCombatantState { attack: number; armor: number; + pendingAction?: CombatIntent; } export interface CombatPlayerState extends CombatCombatantState { weaponDamage: number; + potionsRemaining: number; } @Entity({ name: 'combats' })