diff --git a/Docs/Vault/06_Roadmap/Synty_Asset_Inventory.md b/Docs/Vault/06_Roadmap/Synty_Asset_Inventory.md index c42e0a7e3..f7a8f2b4b 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** (NEW, parked for the combat-anim pass): 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). **The melee-verb upgrade path**: Swing1/2/3 → LightCombo01 A/B/C, MeleeSwing tells → Menacing idle, real death/hit-react variety. +- **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. - **Tools/SyntyPropBoneTool** (NEW): Synty's prop-to-bone attachment utility (editor tooling for the idle/combat prop clips). ## Roadmap hooks (from this catalog) @@ -55,5 +55,5 @@ Catalog of the Synty Polygon packs under `Assets/Synty/`, produced by the [[DR-0 2. **Quadruped Swarmer** — PolygonDog as a separate Rukhanka rig + dog controller (its bundled Attack/Death clips enable a real death anim). 3. **Ruined-city / off-world maps** — Kaiju destroyed-city + NatureBiomes Arid_Desert for the base + expedition regions. 4. **Combat/heal/portal VFX** — wire PolygonParticleFX into `VFXConfig`. -5. **Melee combat animation pass (NEXT, operator-flagged 07-16)** — AnimationSwordCombat: LightCombo01 A/B/C onto Swing1/2/3, Menacing01 combat idle, Hit/Death variety; idle-fidget rotation from AnimationIdles (Bored/Look/WeightShift/Stretch). +5. **Melee combat animation pass** — ✅ CORE SHIPPED 07-18 ([[2026-07-18_SwordCombat_Attack_Anims]]): LightCombo01 A/B/C onto Swing1/2/3, HeavyCombo01A slam, Death_B_01, Menacing01 combat idle. Remaining: hit-react variety (needs a damage-edge param) + idle-fidget rotation from AnimationIdles (Bored/Look/WeightShift/Stretch). 5. **HUD polish** — ✅ DONE ([[DR-024_HUD_Synty_Skin_Theme]]): harvested Interface* sprites/fonts (status/map/inventory icons, HUD panels/bars/pips/gradients/glow, 640 input glyphs, Orbitron + Exo 2.0) into the UITK HUD via a build-safe `HudTheme` ScriptableObject. PolygonIcons (3D meshes) still un-baked — a future render-to-sprite option if more icon variety is wanted. diff --git a/Docs/Vault/07_Sessions/2026/2026-07-18_SwordCombat_Attack_Anims.md b/Docs/Vault/07_Sessions/2026/2026-07-18_SwordCombat_Attack_Anims.md new file mode 100644 index 000000000..66bfab316 --- /dev/null +++ b/Docs/Vault/07_Sessions/2026/2026-07-18_SwordCombat_Attack_Anims.md @@ -0,0 +1,40 @@ +# 2026-07-18 — SwordCombat attack animations (melee-anim pass) + +**Goal:** utilize the new `AnimationSwordCombat` pack (imported 07-16) for the player's attacks — the operator-flagged roadmap hook in [[Synty_Asset_Inventory]] ("Melee combat animation pass"). + +## What shipped + +**Controller wiring** (`PlayerRigTools.WireSwordCombatAttackClips`, menu `ProjectM/Animation/Player - Wire Sword Combat Attacks (LANTERN)`, idempotent): + +| State | Clip (was) | Clip (now) | speed | +|---|---|---|---| +| Swing1 | A_Swing_R2L (Blender placeholder) | `A_Attack_LightCombo01A_Sword` (0.80s) | 2.0 | +| Swing2 | A_Swing_L2R | `A_Attack_LightCombo01B_Sword` (0.67s) | 1.2 | +| Swing3 | A_Swing_Finisher | `A_Attack_LightCombo01C_Sword` (0.73s) | 2.2 | +| SpecialSlam | A_Special_Slam | `A_Attack_HeavyCombo01A_Sword` (2.03s, overhead chop) | 5.0 | +| Death | A_Death_FallBack | `A_Death_B_01_Sword` (1.70s backward collapse) | 1.0 | +| CombatIdle (NEW) | — | `A_Idle_Menacing01_Sword` (looped) | 1.0 | + +- **Speed math:** the swing anim window is `k_AttackAnimTicks = CastFacingTicks = 13` ticks (~0.217s @60Hz) + 0.12s exit blend. Each pack FBX ships **WindUp / Hit / FollowThrough sub-takes** alongside the full take — the WindUp take length = the hit-start second, and each state's `speed` places that hit inside the window (e.g. LightCombo01A hit @0.333s → 0.17s at speed 2.0). Re-tune by editing the `swaps` table in the tool. +- **Menacing01 combat idle:** new `InCombat` bool param + `CombatIdle` state. `Idle → CombatIdle [InCombat]` is appended **after** the existing `Idle → Locomotion [Speed>0.1]` so movement keeps transition priority; `CombatIdle → Idle [!InCombat]` (0.4 blend) + `CombatIdle → Locomotion [Speed>0.1]`. The pack take ships `loopTime=false` — the tool flips it on the pack FBX importer once (the only `Assets/Synty/**` change: that `.fbx.meta`). +- **Drive:** `PlayerAnimationDriveSystem` writes `InCombat = TickWindowMath.SwingActive(melee, serverTick, combatIdleTicks)` — the same wrap-safe predicate as the swing pulse with a wider window, on **both** local + remote paths (`MeleeCombo` replicates → teammates menace too). Window = `FeelConfig.CombatIdleHoldSec` (default 4s, live-tunable static) × 60. No new `[GhostField]`s, no netcode surface — client presentation only. + +## Validation + +- L1: console error-free (only known-benign tick-batching/leak-notice warnings during the MCP-driven Play). +- L2: EditMode suite green (411 at the time). Play smoke: both netcode worlds boot; the re-baked Rukhanka rig carries all 12 params incl. `InCombat`. +- L3: forced-pose screenshots (drive system disabled, params written via the parameter buffer, `EditorApplication.update` guardian for the mid-swing frames): Swing1 wind-up + follow-through frames and the crouched Menacing01 stance all read clearly on the Bathynaut. + +## Notes / gotchas (session-scoped) + +- Synty SwordCombat attack FBX = **multi-take** (full + WindUp/Hit/FollowThrough) — load pack clips by **exact clip name**, never "the AnimationClip in the FBX" (the first/last sub-asset is a random section; this bit the first clip-length probe). +- The pack's HeavyFlourish sub-takes drop the "01" (`A_Attack_HeavyFlourish_WindUp_Sword`) — name-match per clip, don't pattern-derive. +- `AnimatorControllerParameterComponent` has no `name` field at runtime — match by `FastAnimatorParameter(name).hash`. + +## Open follow-ups (from the same pack, not in this pass) + +- Hit-react variety (Hit/React/Stagger/KnockDown/Stun sets) — needs a damage-edge window param; presentation-only. +- Idle-fidget rotation from `AnimationIdles` (Bored/Look/WeightShift/Stretch) — the natural next idle pass. +- Dodge/Block/Parry clips — gameplay verbs first (design fork, operator's call). + +**Next-session intent:** operator eyes/ears-on feel pass over the new swings (speeds are the `swaps` table + `FeelConfig.CombatIdleHoldSec`).