Docs: 07-21 hit-react pass log + inventory/guidelines updated (vibrate superseded)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 00:28:12 -07:00
parent 0ff11fe2a9
commit cf31912519
3 changed files with 41 additions and 2 deletions
@@ -0,0 +1,39 @@
# 2026-07-21 (G) — Enemy hit-react pass (the last impact layer)
**The pass** (operator: "proceed with the next pass in its entirety"): enemies FLINCH when hit — the SwordCombat
React/Stagger clips, driven off replicated Health-drop edges, replacing the review-killed positional vibrate
(Rukhanka inverse-folds render-child transforms; animation is the correct channel).
## What shipped
- **Controller** (`EnemyRigTools.WireEnemyHitReacts`, menu `ProjectM/Animation/Enemy - Wire Hit Reacts`, idempotent):
`IsHit` + `IsHitHeavy` params; `HitReact` (`A_Hit_F_React_Sword` @1.4x — the flinch peak inside the 0.3s pulse)
and `HitStagger` (`A_Hit_F_Stagger_Sword` @1.2x, 0.55s pulse) Any-State states on `AC_EnemyTopDown`; exits on
pulse end. **Windup-honesty gate:** the light react requires `IsAttacking == false` — a sub-poise hit never
visually cancels a windup the server is still running (the telegraph must not lie). The HEAVY tier staggers
unconditionally, which is honest because it tracks the server's B2 poise break (finisher knockback ≥ the stagger
threshold zeroes the windup server-side).
- **Drive** (`EnemyAnimationDriveSystem`): the per-Husk cache grew from `float3 prevPos` to `EnemyAnimCache`
{Pos, Hp, ReactUntil, Heavy}. A Health DROP on a living Husk stamps the pulse; drop ≥
`FeelConfig.HitReactStaggerDamage` (50) upgrades to the stagger tier — at the locked heavy tuning that's
exactly finisher (63 seeded) staggers / light (42) flinches, mirroring the server poise math. Corpses never
flinch (dead gate). FeelConfig knobs: `HitReactSeconds` (0.3, 0 = off), `HitStaggerSeconds` (0.55),
`HitReactStaggerDamage` (50) — read main-thread, passed by value into the Bursted job.
- All enemies share `AC_EnemyTopDown` → every kind (and the sandbox target dummy) reacts for free; humanoid
retarget puts the pack clips on every rig zero-work.
## Validation
- L1 console clean · L2 414/414 green (presentation-only; no sim/netcode surface — the damage edge already
replicates via Health).
- Live vs the sandbox dummy: light hit → visible head-dip flinch (captured mid-swing, axe extended);
finisher → dramatic backward stagger lurch (captured with the 42 damage number up). Both tiers distinct.
## Follow-ups
- Player hurt flinch (additive layer so it never fights locomotion/swings) — deliberately out of this pass's scope.
- KnockDown/Stun sets remain unused (map to future hard-CC mechanics, not presentation).
- Per-direction reacts (L/R/B variants ship in the pack) — polish-on-polish; the front react reads fine top-down.
**Next:** finisher-reach eyes-on (×1.39) · G6 socket telegraphs + SpecialSlam damage-at-contact · G4 co-op
saturation budget.