From 19fe1e5fa22223877952da0a8486dada4d53dc49 Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Thu, 30 Jul 2026 15:41:56 -0500 Subject: [PATCH] KB: the wall-grind knockdown storm IS the surviving #82 skating -- A/B-isolated Four-config matrix (mp_gimpAB.sh, [animind] replicant-state verdict): grass straight/circle = clean replicant limp (198 gimp entries; 17 car crunches during it -- crushable path broadcasts nothing, cars exonerated); arena1 straight = one wall strike, replicant recovers into the limp; arena1 circle = wall GRIND -- the bmp stagger clip's ~6.5 u/s root motion re-strikes the wall (6.5^2 > iv2 threshold 40), each rebind re-broadcasts the type-5 knockdown (26x in the user's run), and every peer's replicant lives in knockdown/recovery churn: gliding + trn leg-lifts = "skating". Turning while gimped is innocent; single strikes are benign. Authentic fix filed in open-questions: reconstruct the consumer of the stagger's action-request flags (FUN_004a4c54 bits 1/0x20 -- the drive suppressor while the bmp clip plays); the rebind guard at mech4.cpp:6861 is already marked bring-up-pending exactly that. Co-Authored-By: Claude Fable 5 --- context/locomotion.md | 17 +++++++++++++++++ context/open-questions.md | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/context/locomotion.md b/context/locomotion.md index 0440994..02006bc 100644 --- a/context/locomotion.md +++ b/context/locomotion.md @@ -212,6 +212,23 @@ knockdown must stagger BOTH channels (`SetBodyAnimation(0x20)` + `SetLegAnimatio stops the knockdown re-firing on sustained/glancing contact. `localVelocity` is zeroed while crashed (spec-faithful) so a knocked mech can't keep advancing. [T2] +**⚠ The WALL-GRIND KNOCKDOWN STORM = the surviving "#82 peers see skating" (2026-07-30) [T2].** +Each stagger bind also broadcasts `ForceUpdate(0x20)` — the **type-5 KNOCKDOWN record** — and the +replicant handler (`mech.cpp` case 5) plays the bmp clip AND zeroes `projectedVelocity`. The bmp +clip carries ~6.5 u/s of root motion pressing back into the wall (6.5² ≈ 42 > the iv²>40 threshold), +so **against a wall the stagger self-retriggers**: a gimped mech grinding a wall re-broadcast 26 +knockdowns in one bench run, and every peer's replicant lived in knockdown/recovery churn — never +re-entering the gimp cycle. On the observer that reads as gliding + trn leg-lifting = "skating." +4-config A/B (`scratchpad/night6/mp_gimpAB.sh`, `[animind]` inst=1 verdict): grass straight/circle +**198 gimp-state entries, clean limp** (17 car crunches during it — crushable icons are the +`0.00123f` sentinel path: gyro kick only, NO broadcast, exonerated); arena1 straight = 1 strike, +replicant recovered to gimp (196); arena1 circle (wall grind) = **0 gimp entries, skating**. So: +turning innocent, cars innocent, single strikes recover — the STORM is the whole bug, and it is +field-relevant (legged players hug walls). **The authentic fix is the un-reconstructed consumer of +the stagger's action-request flags** (`FUN_004a4c54(this,1)` + `(this,0x20)` — the drive suppressor +during the stagger; the port's rebind guard at mech4.cpp:6861 is marked bring-up pending exactly +this). Tracked in [[open-questions]]; replication detail in [[multiplayer]]. + ## Controls (`BT_REAL_CONTROLS`, default-on) `MechControlsMapper` (mechmppr.cpp @004afbe0; btl4mppr.cpp mappers) interprets input → `speedDemand` / `turnDemand`. ⚠ **WndProc NEVER receives WM_KEYUP** (the engine's per-frame reader `GetMessage`s diff --git a/context/open-questions.md b/context/open-questions.md index 75301ca..a94d56c 100644 --- a/context/open-questions.md +++ b/context/open-questions.md @@ -761,6 +761,15 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR numbers no longer point at that code). ## Multiplayer (Phase 7 / P6) +- **Stagger drive-suppressor reconstruction (the #82 wall-grind fix; 2026-07-30).** The binary's + crash/stagger sets action-request flags via `FUN_004a4c54(this,1)` then `(this,0x20)`; their + CONSUMER (almost certainly a drive/steering suppressor while the bmp clip plays) is not + reconstructed, so the clip's ~6.5 u/s root motion re-strikes the wall and the knockdown + broadcast storms (26× one bench run) — peers' replicants churn knockdown/trn = "skating" + ([[locomotion]] §Knockdown for the full A/B). Dig: find the actionRequestFlags bit-1/bit-0x20 + readers in the decomp (mech performance / drive integrate), reconstruct, then drop the marked + rebind guard at mech4.cpp:6861. Until then the limp bench should circle on GRASS (no walls). + - **Cross-fire bench opens (2026-07-30, first real-weapons 4-node runs).** (a) COMBAT STALL: all firing and dying ceased ~3 min in (run 2, throttled `BT_AF_PERIOD=7`) with everyone alive, subsystems healthy, and fps fine — engagement/heat state needs a logging pass (`BT_GOTO_LOG`