Skip to main content

Character Conditions and Injuries

Context

This page owns the catalog and state-axis ladder for Valenar's named- character condition and injury surface. The taxonomy authority lives in ./gd-characters-and-retinue.md: the three-way split of long-term identity (traits), temporary mutable state (conditions), and mutable medical or physical harm (injuries). The named-character roster (Main Character, retinue, companions, specialists, later named governors and commanders) lives there.

What is committed here is:

  • The catalog of seven named conditions and five named injuries.
  • The state-axis ladder for each named condition.
  • The apply / tend / clear binding rules.
  • The acquired-trait conversion rule for injuries that heal with a permanent mark.
  • The Modifier-template runtime backing and the Condition / Injury tag values used to query the surface.

The binding authority is ../lore/adr/ad-0012-character-conditions-and-injuries-as-modifiers.md; this page is the owner-doc surface that ad-0012 routes the catalog and ladder concerns to.

The cross-cutting canonical-pattern ADR ../lore/adr/ad-0013-scope-state-channel-template-archetype-pattern.md explicitly records that conditions and injuries are not an instantiation of the scope + state-channel + template-archetype pattern (ad-0013 lines 111-124). The persistent identity is the named character (already a scope); the condition or injury is a Modifier attached to that scope. The shape difference is intentional and load-bearing — conditions and injuries are transient effect bundles on an existing identity, not new identities of their own.

Scope

The condition and injury surface applies to named characters only:

  • The Main Character.
  • Retinue characters (companions, escorts, specialists, expedition-facing support).
  • Named governors, commanders, and similar high-responsibility characters once those layers exist.

Pop-level condition modeling (whether ordinary settlement-job pops carry per-pop conditions) is deferred per ad-0012 lines 121-124. The Modifier-template shape is compatible with later pop extension if a future wave commits it, but this page does not authorize pop conditions. A pop extension requires either superseding ad-0012 or a parallel ADR that explicitly authorizes the pop scope.

Condition Catalog

The committed roster is exactly the seven named conditions already named in ./gd-characters-and-retinue.md lines 36-39:

  1. Hungry — hunger / nutritional pressure.
  2. Cold — environmental cold exposure.
  3. Exhausted — fatigue from sustained exertion or sleep deprivation.
  4. Afraid — psychological stress and dread.
  5. Bleeding — active blood loss from a wound.
  6. Tainted — exposure to demonic taint or corruption-field contact.
  7. Poisoned — toxin from a venomous source or contaminated intake.

No additional condition names are introduced here. ad-0012 lines 113-126 commits the seven-condition seed as the closed roster for this authoring pass; future extension is an explicit authorial decision recorded in this page, not in implementation prose.

State-Axis Ladder Per Condition

Each named condition carries a state-axis ladder of progressive rungs. The ladder is authoritative text per ad-0012 lines 102-110: it documents the design intent of how a character's state degrades as the underlying pressure rises, and how it recovers as the pressure falls. The ladder is not a runtime enum (ad-0012 line 106 is explicit: no ConditionState enum is introduced by ad-0012). The Modifier's effect bundle expresses each rung's mechanical consequence; the ladder rung labels are descriptive design vocabulary.

Ladder rungs run better-to-worse. The leftmost rung is the absence of the condition (or the most healthy variant); the rightmost rung is the failure mode the character reaches if the underlying pressure goes unaddressed.

No numeric thresholds appear in this page per ad-0012 line 113. The exact ladder-rung thresholds are a balance pass owned by the Wave 5a runtime-backing wave.

Hungry

Five rungs (the example ladder seeded in ad-0012 line 46-48):

well-fedsatisfiedpeckishhungrystarving

The Hungry Modifier attaches when the character drops below the satisfied rung. Eating returns the character toward well-fed (via decay = linear on the Modifier per the apply rules below). Sustained starving raises medical risk and may convert to a Wounded or Bleeding state if no intervention happens.

Cold

Five rungs:

warmcoolchillycoldfreezing

The Cold Modifier attaches when the character drops below cool. Environmental warming (camp fire, indoor recovery, warm clothing modifier) returns the character toward warm. Sustained freezing raises medical risk (frostbite, hypothermia) and may convert to an injury.

Exhausted

Five rungs:

restedtiredwearyexhaustedspent

The Exhausted Modifier attaches when the character drops below tired. Rest at camp or in the Core returns the character toward rested. Sustained spent raises collapse risk and may convert to forced unconsciousness or to a Concussion injury if combined with a physical incident.

Afraid

Five rungs:

composedwaryafraidterrifiedbroken

The Afraid Modifier attaches when the character drops below composed. Resolution of the underlying threat, reassurance via retinue presence, and successful encounter outcomes return the character toward composed. Sustained broken may surface narrative consequences and acquired-trait conversion (e.g. a Trauma-related acquired trait if the rung holds long enough).

Bleeding

Five rungs:

cleangrazedbleedinghemorrhagingexsanguinating

The Bleeding Modifier attaches when the character is wounded badly enough to draw active blood loss (above grazed). Field treatment (bandage, tend activity) and rest return the character toward clean. Sustained exsanguinating is the terminal rung; if unaddressed it converts to incapacitation and elevates injury severity.

Tainted

Five rungs:

pureexposedtaintedcorruptedconsumed

The Tainted Modifier attaches when the character takes corruption-field contact past the exposed rung. Cleansing via ward-stone or ritual activity (authored in Wave 5a) returns the character toward pure. Sustained consumed is the terminal rung; ad-0012 lines 95-104 commit that lasting Tainted exposure may convert to an acquired trait (e.g. Taint-Touched, already named in ./gd-characters-and-retinue.md line 42 as an example acquired-trait label) when the heal mechanic leaves a permanent mark.

Poisoned

Five rungs:

unaffectedafflictedpoisonedtoxicdying

The Poisoned Modifier attaches when the character ingests or is otherwise exposed to a venomous source past the afflicted rung. Antitoxin, ward-stone work, or healer intervention returns the character toward unaffected. Sustained dying is the terminal rung; if unaddressed it converts to incapacitation.

Injury Catalog

The committed roster is exactly the five named injuries already named in ./gd-characters-and-retinue.md lines 38-39:

  1. Wounded — generic wound from melee or environmental harm.
  2. Sprained Ankle — limb-mobility impairment from a fall or twist.
  3. Burned Hands — burn injury to hands from fire, scalding, or hot material.
  4. Broken Rib — torso injury from crushing or impact harm.
  5. Concussion — head injury from impact or fall.

Injuries are discrete rather than continuous. They do not carry a state-axis ladder of progressive rungs. Each injury is a single-rung Modifier that is either applied (the injury is present) or cleared (the injury is resolved). Severity nuance, if any, is expressed by the Modifier's effect bundle, not by ladder rungs.

No additional injury names are introduced here. The five-injury seed is the closed roster per ad-0012 lines 113-126.

Apply / Tend / Clear Binding Rules

Runtime backing for each condition and injury is a Modifier template per the existing SECS Modifier primitive (per ../../../../../.claude/rules/secs-concepts.md). ad-0012 lines 73-104 commits the apply rules:

  • stacking = unique. A character has one Hungry Modifier at a time, not seven stacked Hungry Modifiers. Same for each named condition and each named injury.
  • reapply = refresh. Re-applying a Hungry Modifier refreshes its duration rather than stacking a second one.
  • decay = linear (conditions only, optional). Conditions decay toward the absence rung over time as the underlying pressure falls (the character eats, warms up, rests, calms, is bandaged, is cleansed, is detoxified). Decay rate is <deferred-to-Wave-5a-runtime-backing> per ad-0012 lines 207-211 (balance pass).
  • Injuries do NOT carry decay = linear by default. Injuries persist until cleared by explicit heal / tend / cure activity. ad-0012 lines 96-104 commits this difference.

Apply, tend, and clear are runtime activities authored in Wave 5a. This page commits the binding-rule design intent; the activity bodies are owned by the Wave 5a runtime-backing wave.

Acquired-Trait Conversion

When an injury heals with a permanent mark, the acquired-trait conversion target is an acquired trait row per the trait taxonomy in ./gd-characters-and-retinue.md lines 40-46. The acquired-trait conversion is authored in Wave 5a as the binding rule between the injury Modifier template and the acquired-trait template; this page commits the conversion intent (per ad-0012 lines 95-104) without authoring specific conversion mappings.

Example conversion intent (illustrative only, drawn from the example acquired-trait labels in ./gd-characters-and-retinue.md line 42):

  • A Burned Hands injury that heals with permanent damage may convert to a Scarred Hands acquired trait.
  • A Broken Rib injury that heals with mobility loss may convert to a Limp acquired trait.
  • A sustained terminal-rung Tainted condition that resolves with surviving exposure may convert to a Taint-Touched acquired trait.

The exact conversion table is a Wave 5a authoring concern; this page does not commit specific mappings beyond the design intent above.

Tag Values

Two new tag values are added to legacy/v1/examples/valenar/Content/common/tags.secs by the Wave 5a runtime-backing wave per ad-0012 lines 87-94:

  • Condition — marks Modifier templates that participate in the condition catalog. Lets policies, systems, and the dynamic quest pressure generator query all conditions currently attached to this character without enumerating condition names.
  • Injury — marks Modifier templates that participate in the injury catalog. Same role as Condition but for the injury subset.

Tag values follow the existing tag-system pattern per ./gd-tags-and-classification.md and are not a new SECS keyword.

Story-Prose Non-Canon Rule

Story-prose condition diaries already authored under ../story/accepted/README.md (specifically the act0-day1 condition-pre-blackout and condition-post-blackout entries on the Main Character's first-day physical state) are symptom records of the MC's first-day state. They are narrative artifacts, not catalog rows.

Per ../lore/adr/ad-0003-story-content-layer-and-agent-audit.md and ad-0012 lines 49-58, story-prose condition diaries are non-canon by default and do not gain runtime backing rows. The canon catalog is owned by this page; the runtime backing is the Modifier templates committed in Wave 5a. No story-prose condition diary may be treated as a runtime backing row.

Future story prose may continue to reference the seven named conditions and five named injuries from this page by name; the reference is documentary, not promotional.

Runtime Backing Status

Status: contract-only.

  • Host/runtime owner: the existing Modifier infrastructure carries condition and injury Modifiers with no new host primitives. Per ad-0012 lines 186-194, the existing ModifierBindingStore and decay machinery in legacy/v1/src/SECS.Engine/ are sufficient. Apply, tend, and clear are authored as Activities in Wave 5a (no proposed new host system class for the catalog itself; the runtime surface is the existing Modifier mechanism plus the Wave 5a apply / tend / clear activities).
  • Generated/.secs owner: legacy/v1/examples/valenar/Content/characters/conditions/modifiers.secs declares the seven condition Modifier templates; legacy/v1/examples/valenar/Content/characters/injuries/modifiers.secs declares the five injury Modifier templates; legacy/v1/examples/valenar/Content/common/tags.secs adds the Condition and Injury tag values. Matched by the parallel legacy/v1/examples/valenar/Generated/Characters/ stand-in tree. None of these files exist today.
  • Read-model/UI owner: the character info panel in the Valenar React client surfaces the character's currently attached condition Modifiers and injury Modifiers, with the state-axis ladder rung read from the Modifier's effect bundle. UI consumer is ../ux/gd-character-screen.md. No new read-model class is proposed; the existing character read-model surface is extended to include attached Modifiers per Wave 5a.
  • Tests: <deferred-to-wave-7> — Wave 7 test-authoring wave authors unit tests against each apply / tend / clear binding rule and each acquired-trait conversion mapping. Test names use the Condition<Name><Operation>Test and Injury<Name><Operation>Test conventions (e.g. ConditionHungryApplyTest, InjuryBrokenRibClearTest, InjuryBurnedHandsScarredHandsConversionTest).
  • Known gaps: the exact ladder-rung thresholds for each condition (balance pass); the exact decay rates for the conditions that carry decay = linear; the apply / tend / clear Activity bodies; the acquired-trait conversion mapping table (which injury heals to which acquired trait, under which heal-quality predicate); the cleansing-mechanic body for Tainted.
  • Illegal fallback behavior: no per-character int Hunger field outside the Modifier mechanism may stand in for the Hungry Modifier. No tag-only "is hungry" predicate may stand in for the Modifier-presence query. No story-prose condition diary may be treated as a runtime backing row. An attempt to set a condition rung directly on a character scope row outside the Modifier mechanism raises an explicit InvalidStateException rather than silently bypassing the apply rules.
  • Next closure wave: Wave 5a runtime-backing wave authors the Modifier templates, the tag values, the apply / tend / clear Activities, the acquired-trait conversion mapping, and the matching Generated stand-ins.

Glossary Propagation

The following terms must land in the canonical glossary surfaces (../gd-glossary.md, ../gd-canon.md, ../README.md) per ../../../../../.claude/rules/valenar-contract-backing.md § Canonical Glossary Targets. Glossary propagation itself is the next docs wave (Wave 3c); this section records the obligation:

  • MCCondition (umbrella term for the condition + injury surface on named characters).
  • Condition (tag value marking condition Modifier templates).
  • Injury (tag value marking injury Modifier templates).
  • "Condition state-axis ladder" (concept term referencing the per- condition ladder authored above).
  • The seven named conditions (Hungry, Cold, Exhausted, Afraid, Bleeding, Tainted, Poisoned) — already named in ./gd-characters-and-retinue.md lines 36-37; the glossary entry cross-references this page as the catalog and ladder authority rather than duplicating the ladder definitions.
  • The five named injuries (Wounded, Sprained Ankle, Burned Hands, Broken Rib, Concussion) — already named in ./gd-characters-and-retinue.md lines 38-39; same cross-reference rule.

Cross-References