From cf31912519c85245d5474972ca71b153e82b58bc Mon Sep 17 00:00:00 2001 From: Luis Gonzalez Date: Tue, 21 Jul 2026 00:28:12 -0700 Subject: [PATCH] Docs: 07-21 hit-react pass log + inventory/guidelines updated (vibrate superseded) Co-Authored-By: Claude Fable 5 --- .../Combat_Attack_Feel_Guidelines.md | 2 +- .../Vault/06_Roadmap/Synty_Asset_Inventory.md | 2 +- .../2026/2026-07-21_Hit_React_Pass_G.md | 39 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 Docs/Vault/07_Sessions/2026/2026-07-21_Hit_React_Pass_G.md diff --git a/Docs/Vault/02_Game_Design/Combat_Attack_Feel_Guidelines.md b/Docs/Vault/02_Game_Design/Combat_Attack_Feel_Guidelines.md index 8ca53a22c..936a7848c 100644 --- a/Docs/Vault/02_Game_Design/Combat_Attack_Feel_Guidelines.md +++ b/Docs/Vault/02_Game_Design/Combat_Attack_Feel_Guidelines.md @@ -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) | | 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) | -| 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 6–10t (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 | | 7 | Hades frame-count follow-up session (fill the research gap) | Optional, low priority | ☐ operator | diff --git a/Docs/Vault/06_Roadmap/Synty_Asset_Inventory.md b/Docs/Vault/06_Roadmap/Synty_Asset_Inventory.md index c3c64a3c8..e3803255f 100644 --- a/Docs/Vault/06_Roadmap/Synty_Asset_Inventory.md +++ b/Docs/Vault/06_Roadmap/Synty_Asset_Inventory.md @@ -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. - **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). ## Roadmap hooks (from this catalog) diff --git a/Docs/Vault/07_Sessions/2026/2026-07-21_Hit_React_Pass_G.md b/Docs/Vault/07_Sessions/2026/2026-07-21_Hit_React_Pass_G.md new file mode 100644 index 000000000..727fdd2ad --- /dev/null +++ b/Docs/Vault/07_Sessions/2026/2026-07-21_Hit_React_Pass_G.md @@ -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.