docs: align art cues with battle outcomes

This commit is contained in:
2026-08-11 08:48:19 +08:00
parent 404e996e85
commit f8d5bfe681
@@ -787,10 +787,43 @@ silhouette.
| Damage | Toothed inward contour | Directional ink break and actor response | Jagged edge and hit direction |
| Healing | Open leaf contour | Upward fill and stable recovery pose | Split leaf endpoint |
| Protection | Closed double bracket | Intercept line, absorb plane, or break seam | Closed contour and relation line |
| Miss or evade | Forecast separates from actor | Broken endpoint and preserved pose | Dashed gap, no impact contact |
| Deterministic terminal outcome | No terminal cue before resolution; retain the action forecast | Per-recipient shape from the outcome map below | Outcome-specific contour and causal label, never a generic gap |
| Forced movement | Origin ghost plus destination bracket | Actor lands on destination marker | Arrow body with blocked variant |
| Permanent loss | Segmented condition frame | Still final contour, lowered tool, history seal | Broken lower edge, never a reward burst |
Terminal cues bind one-to-one to `SYSTEM.COMBAT.EVENT_SCHEMA` records. They do
not add an undeclared resolution check and do not reinterpret forecast
divergence as an action result.
| Outcome ID | Resolution shape | Required causal read |
|---|---|---|
| `AO_APPLIED` | Behavior-specific contact closes at the actual recipient with a filled endpoint. | Applied component and actual recipient; a moved-but-legal target keeps the same endpoint. |
| `AO_NO_CHANGE` | The contact reaches an intact contour and ends in a flat cap/current-state bar. | Legal recipient plus the cap or current-state reason for zero primary change. |
| `AO_INVALID_REACH` | A measured reach line breaks between origin and intended target. | Old/current depth and required reach remain inspectable. |
| `AO_INVALID_UNTARGETABLE` | An outward-facing exclusion notch opens in the intended target contour. | Declared exclusion rule and remaining duration, not actor motion alone. |
| `AO_INVALID_FALLEN` | The intended marker is left empty and linked to the earlier casualty seal. | Earlier death event caused invalidation; no substitute target is implied. |
| `AO_INVALID_FILTER` | A candidate-filter frame closes outside the intended target. | Exact side, state, or tag filter that no longer permits the target. |
| `AO_INTERCEPTED` | The intended path branches to the interceptor; the intended endpoint stays hollow. | Interceptor and routing/protection rule; the actual recipient receives its own component cue. |
| `AO_BLOCKED` | A square stop plane meets the component and loses one charge notch when applicable. | Named blocker actor/rule and committed charge or delta. |
| `AO_IMMUNE` | A closed seal forms around the rejected component glyph at the actual recipient. | Immunity tag and source; no resistance roll is implied. |
| `AO_RESISTED` | The status glyph reaches the target boundary and stops against a crosshatched threshold line. | Stored status roll, threshold, Potency, and Tenacity. |
| `AO_FIZZLED` | Source geometry folds inward before any recipient endpoint forms. | Invalid cause, failed retarget or empty ground result, and declared refund. |
| `AO_INTERRUPTED` | A crossbar cuts the source wind-up/channel and holds the interrupted actor pose. | Interrupter/rule and declared refund; no target defense is implied. |
Area and multi-component actions draw the terminal shape at each actual
recipient. `APPLIED_ALL`, `APPLIED_PARTIAL`, and `APPLIED_NONE` may appear only
after the per-recipient cues and never replace them or act as trigger IDs. For a
mixed area result, applied, immune, and no-change recipients therefore retain
three distinct endpoint shapes in the same resolved frame. When more than two
results resolve together, secondary endpoints become compact ground-contact
badges rather than disappearing; inspection preserves every causal label.
At 130 percent text, causal labels occupy the UX-defined text-safe band and do
not cover faces, order markers, or endpoint shapes. Reduced-motion mode uses
the resolved shape and final actor pose without path travel. Low-power mode
keeps every endpoint badge and derived summary while removing only secondary
particles and trails.
Floating values are engine-rendered and secondary. They occupy a dedicated
vertical band above the target, merge repeated low-value ticks, and never cover
faces, order markers, or forecast endpoints.
@@ -815,7 +848,7 @@ motion settles to its final state.
| `DAMAGE` | light, heavy, critical, repeated | 4 | Directional ink fracture, never a radial reward burst. |
| `HEAL` | acquire, pulse, excess, blocked | 4 | Open leaf and upward fill. |
| `PROTECT` | gain, intercept, absorb, break | 4 | Closed double bracket and seam. |
| `AVOID` | miss, dodge, immune, resist | 4 | Broken endpoint with a preserved body contour. |
| `DEFENSE_OUTCOME` | `AO_INTERCEPTED`, `AO_BLOCKED`, `AO_IMMUNE`, `AO_RESISTED` | 4 | Branched route, square stop, closed seal, or crosshatched status threshold. |
| `INTERRUPT` | windup, interrupt, stagger, recover | 4 | Crossing bars and halted motion line. |
| `MOVE` | step, forced, pull, blocked | 4 | Origin ghost, destination, and direction body. |
| `STATUS` | apply, stack, tick, expire, cleanse, resist | 6 | Container shape plus content-bound glyph. |