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
@@ -216,7 +216,7 @@ anticipation floors per G1; one **signature silhouette pose** per kind's windup
| 1 | **Damage at contact tick** (G2.1) — light melee gains ~0.2 s real windup | DO — it's the honest heavy-weapon model; feel-test behind a knob | ✅ SHIPPED 07-20 (`MeleeCleavePending` schedule-and-consume; knob `MeleeContactTicks`, 0 = legacy) | | 1 | **Damage at contact tick** (G2.1) — light melee gains ~0.2 s real windup | DO — it's the honest heavy-weapon model; feel-test behind a knob | ✅ SHIPPED 07-20 (`MeleeCleavePending` schedule-and-consume; knob `MeleeContactTicks`, 0 = legacy) |
| 2 | **Reach retune** (G2.2) — `MeleeRange` 2.6→2.2, finisher reach ×1.5→×1.25 | DO with #1 as one package | ✅ SHIPPED 07-20 (`MeleeFinisherRangeMult` knob 30) | | 2 | **Reach retune** (G2.2) — `MeleeRange` 2.6→2.2, finisher reach ×1.5→×1.25 | DO with #1 as one package | ✅ SHIPPED 07-20 (`MeleeFinisherRangeMult` knob 30) |
| 3 | **Weapon scale ×1.25 + tip trail** (G2.3) | DO — cheapest honesty win | ✅ SHIPPED 07-20 (axe ×1.25; blade-smear ribbon; arc reveal ends AT contact) | | 3 | **Weapon scale ×1.25 + tip trail** (G2.3) | DO — cheapest honesty win | ✅ SHIPPED 07-20 (axe ×1.25; blade-smear ribbon; arc reveal ends AT contact) |
| 4 | Victim-vibrate + finisher hold ladder (G5) | DO — pure presentation | ✅ hold ladder SHIPPED (`FinisherHoldFrames`); **vibrate CUT** Rukhanka folds the render child's inverse transform into skinning, an offset is a no-op (review C8); follow-up = additive anim layer | | 4 | Victim-vibrate + finisher hold ladder (G5) | DO — pure presentation | ✅ hold ladder SHIPPED (`FinisherHoldFrames`); vibrate CUT (Rukhanka inverse-fold no-op, review C8) → **superseded 07-21 by the enemy HIT-REACT pass**: React/Stagger anim tiers off Health-drop edges, windup-honesty gated ([[2026-07-21_Hit_React_Pass_G]]) |
| 5 | Input buffer 610t (G7) — a small predicted-sim change | DO after #1 lands (same system) | ✅ SHIPPED 07-20 (`BufferedAttackTick` GhostField; unlock-edge validity, batch-slack 4) | | 5 | Input buffer 610t (G7) — a small predicted-sim change | DO after #1 lands (same system) | ✅ SHIPPED 07-20 (`BufferedAttackTick` GhostField; unlock-edge validity, batch-slack 4) |
| 6 | Class cancel policies (G7) — Bathynaut commit / Harpooner crisp | Ratify as design law | ✅ LAW + Bathynaut side SHIPPED (dash refused pre-contact); Harpooner side lands with the Harpooner | | 6 | Class cancel policies (G7) — Bathynaut commit / Harpooner crisp | Ratify as design law | ✅ LAW + Bathynaut side SHIPPED (dash refused pre-contact); Harpooner side lands with the Harpooner |
| 7 | Hades frame-count follow-up session (fill the research gap) | Optional, low priority | ☐ operator | | 7 | Hades frame-count follow-up session (fill the research gap) | Optional, low priority | ☐ operator |
@@ -46,7 +46,7 @@ Catalog of the Synty Polygon packs under `Assets/Synty/`, produced by the [[DR-0
- **AnimationBaseLocomotion** (original): the 8-direction Run + **Walk** strafe sets (+RootMotion variants), idles, in-air, transitions — **IN USE**: the player's Locomotion tree runs the WALK strafe set (07-16c, `PlayerRigTools.WireUnderwaterFeelClips`); `A_Walk_FwdStrafeF_RootMotion` averageSpeed 1.46 u/s = the `FeelConfig.TrudgeNaturalSpeed` StrideScale reference. - **AnimationBaseLocomotion** (original): the 8-direction Run + **Walk** strafe sets (+RootMotion variants), idles, in-air, transitions — **IN USE**: the player's Locomotion tree runs the WALK strafe set (07-16c, `PlayerRigTools.WireUnderwaterFeelClips`); `A_Walk_FwdStrafeF_RootMotion` averageSpeed 1.46 u/s = the `FeelConfig.TrudgeNaturalSpeed` StrideScale reference.
- **AnimationIdles** (NEW): ~330 masc + feminine idle clips, Polygon + Sidekick rigs. Masculine/Polygon categories (clips): ArmsFolded 6 · **Base 1 (IN USE — the player Idle + Locomotion center since 07-16d)** · Bored 4 · CheckWatch 1 · Drink 6 · Eat 6 · HandsOnHips 6 · HeadNod 4 · HeadShake 3 · Inspect 5 · Lean 27 · Look 8 · PickNose 4 · PlayWithHair 3 · Plead 2 · PointHand 6 · Posture 12 (Aggressive/Dramatic/Shy/Slumped Enter/Loop/Exit) · Pray 7 · Stretch 6 · Sway 3 (Drunk — too wobbly for the diver) · Thoughtful 8 · UsePhone 25 · Wave 9 · WeightShift 2 · Yawn 1. Most stances ship Enter/Loop/Exit triplets → ready-made **idle-fidget rotation** (Bored/Look/WeightShift/Stretch fit the Bathynaut; a random-fidget sub-state machine is the natural follow-up). Props included (phone/cup/donut/comb — needs `Tools/SyntyPropBoneTool`). - **AnimationIdles** (NEW): ~330 masc + feminine idle clips, Polygon + Sidekick rigs. Masculine/Polygon categories (clips): ArmsFolded 6 · **Base 1 (IN USE — the player Idle + Locomotion center since 07-16d)** · Bored 4 · CheckWatch 1 · Drink 6 · Eat 6 · HandsOnHips 6 · HeadNod 4 · HeadShake 3 · Inspect 5 · Lean 27 · Look 8 · PickNose 4 · PlayWithHair 3 · Plead 2 · PointHand 6 · Posture 12 (Aggressive/Dramatic/Shy/Slumped Enter/Loop/Exit) · Pray 7 · Stretch 6 · Sway 3 (Drunk — too wobbly for the diver) · Thoughtful 8 · UsePhone 25 · Wave 9 · WeightShift 2 · Yawn 1. Most stances ship Enter/Loop/Exit triplets → ready-made **idle-fidget rotation** (Bored/Look/WeightShift/Stretch fit the Bathynaut; a random-fidget sub-state machine is the natural follow-up). Props included (phone/cup/donut/comb — needs `Tools/SyntyPropBoneTool`).
- **AnimationSwordCombat** (**IN USE since 07-18** — [[2026-07-18_SwordCombat_Attack_Anims]]): Polygon-rig clips — Attack 42 (Light/Heavy Combo01 chains A/B/C + ReturnToIdle, HeavyStab, HeavyFlourish, LightFencing, LightLeaping; each with RootMotion variants, `*_Sword` suffix, no Masc/Femn split) · Block 13 · Death 8 · Dodge 16 · Hit 19 (React/Stagger/KnockDown/Stun) · Idle 20 (Base/Fidgets/Menacing01/Sheathed). **Wired via `PlayerRigTools.WireSwordCombatAttackClips`:** Swing1/2/3 = LightCombo01 A/B/C, SpecialSlam = HeavyCombo01A, Death = Death_B_01, CombatIdle = looped Menacing01 (InCombat param). NOTE: attack FBX are **multi-take** (full + WindUp/Hit/FollowThrough) — load by exact clip name. Still unused: Hit-react/Block/Dodge sets. - **AnimationSwordCombat** (**IN USE since 07-18** — [[2026-07-18_SwordCombat_Attack_Anims]]): Polygon-rig clips — Attack 42 (Light/Heavy Combo01 chains A/B/C + ReturnToIdle, HeavyStab, HeavyFlourish, LightFencing, LightLeaping; each with RootMotion variants, `*_Sword` suffix, no Masc/Femn split) · Block 13 · Death 8 · Dodge 16 · Hit 19 (React/Stagger/KnockDown/Stun) · Idle 20 (Base/Fidgets/Menacing01/Sheathed). **Wired via `PlayerRigTools.WireSwordCombatAttackClips`:** Swing1/2/3 = LightCombo01 A/B/C, SpecialSlam = HeavyCombo01A, Death = Death_B_01, CombatIdle = looped Menacing01 (InCombat param). NOTE: attack FBX are **multi-take** (full + WindUp/Hit/FollowThrough) — load by exact clip name. 07-21: Hit-react IN USE (React + Stagger onto AC_EnemyTopDown via `EnemyRigTools.WireEnemyHitReacts`). Still unused: Block/Dodge sets, KnockDown/Stun.
- **Tools/SyntyPropBoneTool** (NEW): Synty's prop-to-bone attachment utility (editor tooling for the idle/combat prop clips). - **Tools/SyntyPropBoneTool** (NEW): Synty's prop-to-bone attachment utility (editor tooling for the idle/combat prop clips).
## Roadmap hooks (from this catalog) ## Roadmap hooks (from this catalog)
@@ -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.