feat: support extra health state mechanics
This commit is contained in:
+25
-14
@@ -431,17 +431,28 @@ configuration state, and one of three simulation-readiness states:
|
||||
- `captured_only`: ISAC preserves the authored mechanic, but the runtime cannot
|
||||
calculate it.
|
||||
|
||||
The code-defined `MECHANIC_EVENT_REGISTRY` is the event authority. Its 19
|
||||
The code-defined `MECHANIC_EVENT_REGISTRY` is the event authority. Its 28
|
||||
normalized events are `shot_fired`, `weapon_hit`, `skill_deployed`,
|
||||
`skill_hit`, `agent_hit`, `health_damage_taken`, `damage_dealt`,
|
||||
`enemy_killed`, `assist`, `healing_applied`, `extra_health_granted`,
|
||||
`movement_snapshot`, `proximity_snapshot`, `firing_started`, `firing_stopped`,
|
||||
`reload_started`, `reload_completed`, `weapon_swapped`, and `tick`. Event
|
||||
details such as target, distance, critical state, source, movement, and nearby
|
||||
counts travel as typed event values. The event registry publishes authoritative
|
||||
field metadata where branches need a bounded contract. For example,
|
||||
`weapon_hit.values.headshot` is a boolean that distinguishes headshots from
|
||||
body shots.
|
||||
`signature_ability_deployed`, `skill_hit`, `skill_multishot_triggered`,
|
||||
`agent_hit`, `health_damage_taken`, `damage_dealt`, `enemy_killed`, `assist`,
|
||||
`ally_downed`, `agent_downed`, `ally_rescued`, `grenade_thrown`,
|
||||
`medical_kit_used`, `healing_applied`, `extra_health_granted`,
|
||||
`extra_health_changed`, `movement_snapshot`, `proximity_snapshot`,
|
||||
`firing_started`, `firing_stopped`, `reload_started`, `reload_completed`,
|
||||
`weapon_swapped`, and `tick`. Event details such as target, distance, critical
|
||||
state, source, movement, and nearby counts travel as typed event values. The
|
||||
event registry publishes authoritative field metadata where branches need a
|
||||
bounded contract. For those events, the mechanic editor derives its event-field
|
||||
controls from that metadata. For example, `weapon_hit.values.headshot` is a
|
||||
boolean that distinguishes headshots from body shots.
|
||||
|
||||
`extra_health_changed` is Agent-scoped. Normalized timeline producers emit it
|
||||
when the Agent receives an Extra Health grant, when the remaining amount
|
||||
changes, and when it is depleted to zero. Every event requires the boolean
|
||||
`values.hasExtraHealth`. An event may include the non-negative
|
||||
`values.currentExtraHealth`; when present, the amount must agree with the
|
||||
boolean status. `extra_health_granted` represents a grant action and remains a
|
||||
separate event from changes to the Agent's current Extra Health state.
|
||||
|
||||
The optional Action Family catalog provides authoring recipes for common
|
||||
mechanics. Applying a recipe copies its typed scenario inputs, state pools, and
|
||||
@@ -462,10 +473,10 @@ The program graph uses three child tables:
|
||||
- `conditional_effect_state_pools` defines agent- or target-scoped flags,
|
||||
counts, stacks, durations, scalar values, marks, and resources. Each pool
|
||||
owns its bounds, expiry policy, refresh policy, and best-case value.
|
||||
- `conditional_effect_clauses` listens for one of the 19 events. A clause owns
|
||||
a typed predicate, reducer, optional cooldown, optional weight expression,
|
||||
state mutations, and optional recipe provenance. Reducers convert event
|
||||
streams into counts, distinct or consecutive matches, sliding windows,
|
||||
- `conditional_effect_clauses` listens for one event from the registry. A
|
||||
clause owns a typed predicate, reducer, optional cooldown, optional weight
|
||||
expression, state mutations, and optional recipe provenance. Reducers convert
|
||||
event streams into counts, distinct or consecutive matches, sliding windows,
|
||||
durations, intervals, or derived values. Mutations can set, add, consume,
|
||||
clear, derive, or transfer state. A mutation may bind a target-scoped pool to
|
||||
the current event target, event actor, or another typed entity selector. Each
|
||||
|
||||
Reference in New Issue
Block a user