diff --git a/apps/web/src/components/condition-styles.ts b/apps/web/src/components/condition-styles.ts index e197dad..ba02530 100644 --- a/apps/web/src/components/condition-styles.ts +++ b/apps/web/src/components/condition-styles.ts @@ -11,6 +11,7 @@ import { Droplet, Droplets, EarOff, + Eclipse, Eye, EyeOff, Flame, @@ -24,6 +25,7 @@ import { HeartPulse, Link, Moon, + Orbit, PersonStanding, ShieldMinus, ShieldOff, @@ -31,9 +33,12 @@ import { Skull, Snail, Snowflake, + Sparkle, Sparkles, Sun, + Sword, TrendingDown, + Wind, Zap, ZapOff, } from "lucide-react"; @@ -50,6 +55,7 @@ export const CONDITION_ICON_MAP: Record = { Droplet, Droplets, EarOff, + Eclipse, Eye, EyeOff, Flame, @@ -63,6 +69,7 @@ export const CONDITION_ICON_MAP: Record = { HeartPulse, Link, Moon, + Orbit, PersonStanding, ShieldMinus, ShieldOff, @@ -70,9 +77,12 @@ export const CONDITION_ICON_MAP: Record = { Skull, Snail, Snowflake, + Sparkle, Sparkles, Sun, + Sword, TrendingDown, + Wind, Zap, ZapOff, }; diff --git a/packages/domain/src/persistent-damage.ts b/packages/domain/src/persistent-damage.ts index 22b66a1..4c045a4 100644 --- a/packages/domain/src/persistent-damage.ts +++ b/packages/domain/src/persistent-damage.ts @@ -15,6 +15,11 @@ export const PERSISTENT_DAMAGE_TYPES = [ "electricity", "poison", "mental", + "force", + "void", + "spirit", + "vitality", + "piercing", ] as const; export type PersistentDamageType = (typeof PERSISTENT_DAMAGE_TYPES)[number]; @@ -64,6 +69,21 @@ export const PERSISTENT_DAMAGE_DEFINITIONS: readonly PersistentDamageDefinition[ iconName: "BrainCog", color: "pink", }, + { type: "force", label: "Force", iconName: "Orbit", color: "indigo" }, + { type: "void", label: "Void", iconName: "Eclipse", color: "slate" }, + { type: "spirit", label: "Spirit", iconName: "Wind", color: "neutral" }, + { + type: "vitality", + label: "Vitality", + iconName: "Sparkle", + color: "amber", + }, + { + type: "piercing", + label: "Piercing", + iconName: "Sword", + color: "neutral", + }, ]; export interface PersistentDamageSuccess { diff --git a/specs/003-combatant-state/spec.md b/specs/003-combatant-state/spec.md index cb23039..f567add 100644 --- a/specs/003-combatant-state/spec.md +++ b/specs/003-combatant-state/spec.md @@ -356,7 +356,7 @@ Acceptance scenarios: As a DM running a PF2e encounter, I want to apply persistent damage to a combatant as a compact tag showing a damage type icon and formula so I can track ongoing damage effects without manual bookkeeping. Acceptance scenarios: -1. **Given** the game system is Pathfinder 2e and the condition picker is open, **When** the user clicks "Persistent Damage", **Then** a sub-picker opens with a damage type dropdown (fire, bleed, acid, cold, electricity, poison, mental) and a formula text input. +1. **Given** the game system is Pathfinder 2e and the condition picker is open, **When** the user clicks "Persistent Damage", **Then** a sub-picker opens with a damage type dropdown (fire, bleed, acid, cold, electricity, poison, mental, force, void, spirit, vitality, piercing) and a formula text input. 2. **Given** the sub-picker is open, **When** the user selects "fire" and types "2d6" and confirms, **Then** a compact tag appears on the combatant row showing a fire icon and "2d6". 3. **Given** a combatant has persistent fire 2d6, **When** the user adds persistent bleed 1d4, **Then** both tags appear on the row simultaneously. 4. **Given** a combatant has persistent fire 2d6, **When** the user adds persistent fire 3d6, **Then** the existing fire entry is replaced with 3d6 (one instance per type). @@ -421,7 +421,7 @@ Acceptance scenarios: - **FR-111**: When Pathfinder 2e is the active game system, the concentration UI (Brain icon toggle, purple left border accent, damage pulse animation) MUST be hidden entirely. The Brain icon MUST NOT be shown on hover or at rest, and the concentration toggle MUST NOT be interactive. - **FR-112**: Switching the game system MUST NOT clear or modify `isConcentrating` state on any combatant. The state MUST be preserved in storage and restored to the UI when switching back to a D&D game system. - **FR-117**: When Pathfinder 2e is active, the condition picker MUST include a "Persistent Damage" entry that opens a sub-picker instead of toggling directly. -- **FR-118**: The persistent damage sub-picker MUST contain a dropdown of common PF2e damage types (fire, bleed, acid, cold, electricity, poison, mental) and a text input for the damage formula (e.g., "2d6"). +- **FR-118**: The persistent damage sub-picker MUST contain a dropdown of PF2e damage types (fire, bleed, acid, cold, electricity, poison, mental, force, void, spirit, vitality, piercing) and a text input for the damage formula (e.g., "2d6"). - **FR-119**: Each persistent damage entry MUST be displayed as a compact tag on the combatant row showing a damage type icon and the formula text (e.g., fire icon + "2d6"). - **FR-120**: Only one persistent damage entry per damage type is allowed per combatant. Adding the same damage type MUST replace the existing formula. - **FR-121**: Clicking a persistent damage tag on the combatant row MUST remove that entry.