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/Injurytag 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:
- Hungry — hunger / nutritional pressure.
- Cold — environmental cold exposure.
- Exhausted — fatigue from sustained exertion or sleep deprivation.
- Afraid — psychological stress and dread.
- Bleeding — active blood loss from a wound.
- Tainted — exposure to demonic taint or corruption-field contact.
- 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-fed → satisfied → peckish → hungry → starving
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:
warm → cool → chilly → cold → freezing
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:
rested → tired → weary → exhausted → spent
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:
composed → wary → afraid → terrified → broken
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:
clean → grazed → bleeding → hemorrhaging → exsanguinating
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:
pure → exposed → tainted → corrupted → consumed
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:
unaffected → afflicted → poisoned → toxic → dying
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:
- Wounded — generic wound from melee or environmental harm.
- Sprained Ankle — limb-mobility impairment from a fall or twist.
- Burned Hands — burn injury to hands from fire, scalding, or hot material.
- Broken Rib — torso injury from crushing or impact harm.
- 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 = linearby 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 Handsinjury that heals with permanent damage may convert to aScarred Handsacquired trait. - A
Broken Ribinjury that heals with mobility loss may convert to aLimpacquired trait. - A sustained terminal-rung
Taintedcondition that resolves with surviving exposure may convert to aTaint-Touchedacquired 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 asConditionbut 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
ModifierBindingStoreand decay machinery inlegacy/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.secsdeclares the seven condition Modifier templates;legacy/v1/examples/valenar/Content/characters/injuries/modifiers.secsdeclares the five injury Modifier templates;legacy/v1/examples/valenar/Content/common/tags.secsadds theConditionandInjurytag values. Matched by the parallellegacy/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 theCondition<Name><Operation>TestandInjury<Name><Operation>Testconventions (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 Hungerfield 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 explicitInvalidStateExceptionrather 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.mdlines 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.mdlines 38-39; same cross-reference rule.
Cross-References
../lore/adr/ad-0012-character-conditions-and-injuries-as-modifiers.md— binding authority.../lore/adr/ad-0013-scope-state-channel-template-archetype-pattern.md— canonical pattern; this page is the explicit non-instantiation.../lore/adr/ad-0003-story-content-layer-and-agent-audit.md— story-prose non-canon-by-default rule../gd-characters-and-retinue.md— named-character taxonomy authority; the seven condition names and five injury names live there../gd-state-axes-and-thresholds.md— ladder-precedent for the state-axis form../gd-character-skills.md— acquired-trait taxonomy cross-reference../gd-dynamic-quest-pressure-model.md— downstream consumer of the typed condition-presence query../gd-tags-and-classification.md— tag-system pattern;ConditionandInjuryare tag values../gd-queue-and-activity-execution.md— apply / tend / clear Activities run through the queue executor.../ux/gd-character-screen.md— character info panel reads attached Modifiers.../../../../../.claude/rules/secs-concepts.md— the Modifier primitive.../../../../../.claude/rules/behavior-vocabulary.md—activityandpolicyallowlist for apply / tend / clear bodies.../../../../../.claude/rules/valenar-contract-backing.md— backing/propagation gate.