diff --git a/context/open-questions.md b/context/open-questions.md index d53af30..cc39a20 100644 --- a/context/open-questions.md +++ b/context/open-questions.md @@ -161,6 +161,17 @@ register. ⚠ The audit also flags the damage-economy item as SELF-CONTRADICTOR (task #8 "landed" vs the kShotDamage=12 bring-up residue) — audit before reworking. ## Deferred subsystems / feeds (authentic path scoped, marked in code) +- **Myomer seek "SUPERCHARGE" — 4.0-manual vs 4.10-binary, AWAITING THE PLAYER VERSION-PROBE + (2026-07-31).** The 1995 manual (p20/p22 + stat sheets) says seek changes TOP SPEED (gear 4 = + "Supercharge", expert-only; Loki/Thor print Normal 143 / Super Charged 182 / Gimped 40 kph). + The 4.10 binary provably has NO runtime myomer→speed coupling (full data-flow closure [T1]: + demand fn @004afd10 all branches, all speedDemand writers, AvailableOutput's 2 callers, the + virtual slot-0x3C sweep, the single SpeedEffect attr ref, the 0x7A0 writer set — see + phases/phase-13). Printed ratio 1.27 vs 4.10's vestigial gear ratio 1.43 → documented + 4.0→4.10 drift. The operator is asking SAURON/Oracle whether THEIR pod-era mechs sped up at + seek 4. If yes and wanted: resurrecting supercharge is an OPT-IN deviation — the plumbing + (gear ratio, 0x7A0 cap, ratio² heat, heatFactor overheat-to-zero) all exists; it needs one + authorized multiplication in the demand path. [[subsystems]] [[pod-hardware]] - **Environment gravity unwired — the myomer CLIMB-heat term is inert (found 2026-07-31, #85).** `Mover::localEnvironment` (MOVER.h:271) is declared and never populated anywhere in the port; `GetEnvironment()->gravityConstant` is the named analog of the 1995 Mover's gravity POINTER at diff --git a/phases/phase-13-night7-collision-myomer-coolant.md b/phases/phase-13-night7-collision-myomer-coolant.md new file mode 100644 index 0000000..d05d8e8 --- /dev/null +++ b/phases/phase-13-night7-collision-myomer-coolant.md @@ -0,0 +1,107 @@ +# Phase 13 — Night-7 follow-ups: collision economy, myomer system, coolant leaks (2026-07-31) + +One session, six commits (`054c3f2..c18929b`), driven by the night-7 field reports (build +4.11.659, testers SAURON / RajelAran / Oracle — Oracle is new, with hands-on original-pod +experience). Every fix is bench-verified; field verification is the next playtest. +KB authority per topic: [[multiplayer]], [[subsystems]], [[locomotion]], [[combat-damage]], +[[pod-hardware]] §Manual, [[translocation-warp]], [[open-questions]]. + +## 1. #94 — zone-less-death un-wreck (`054c3f2`) [T1 root cause / T2 verified] +Peers saw SAURON's live mech as flaming wreckage after a ram. Root cause: the peer wreck +lifecycle's two halves listened to different signals — wreck ON = the replicated death +explosion (unconditional); wreck OFF = a damage-zone falling-edge latch that a COLLISION +death never produces (type-0 prices as internal rattle, zones never move). Fix: the un-wreck +(+ peer respawn warp) now rides the death-state EXIT edge of the replicated MovementMode +({2,9} → alive; only `Mech::Reset` leaves the death modes; the state rides every record +header). Bench: 14/14 zone-less deaths un-wrecked, 12/12 explosive regression. +Gitea #94: awaiting-verification. (#81's earlier fix stands — different hole, same machinery.) + +## 2. Collision-pricing audit → two economy fixes (`37dd7f9`) [T1 formula / T2 verified] +The formula layers were verified authentic (crash gate @0x4ab178 == 0.0 read from the exe; +StaticBounce kinetic-loss pricing [T0]; divert scale + 0.5-pt free floor). Two port defects: +- **A. Grind pacing**: the 0.4 s `gBlockCooldown` hysteresis suppressed the knockdown during + sustained contact → full-commanded-speed crash price EVERY frame → the 2-3 s grind death + (SAURON's ram death, 110 priced frames at |v|≈34.7). Removed; the binary's pacing + (knockdown zeroes the drive; free floor needs v>~18.5 while the knockdown fires at v>6.3) + makes wall grinding free taps + ~1.2 s staggers. Bench: 150 s full-throttle wall push = + 125 paced binds, 4,767 crash frames all free, 0 deaths. +- **B. Raw ram dispatch**: the ×0.001 "ram economy normalization" (2026-07-12) predated the + #83 divert and compounded with its ~4e-5 scale — no physically possible ram could clear the + free floor; rams were a no-op against the victim. Raw restored [T1 @part_012:15324]. + Bench: tx==rx byte-identical (66239.1), victim priced 2.55 pts rattle, 108 knockdowns ↔ + exactly 108 type-5 records on the observer (no skating regression). + +## 3. #85 — myomer drive heat LIVE (`1570983`) [T1 operands / T2 verified] +The integrator @004b8d18 was fully reconstructed but its five Mech motion operands were +`return 0.0f` shims → `ratio² × damageGain × 0` forever (Oracle's "ice cold at seek 4"). +Operands re-grounded from raw disasm + decomp: `+0x1C4`=localVelocity, `+0x82C`=the 15-ring +smoothed AccelerationLastFrame, `+0x20C`=moverMass, `*(+0x250)`=environment gravity pointer +(FUN_00421e2c). Physics: `heat += ratio²(1+dmg)[0.005·½mv² + 0.2·mg|vy|dt + 0.2·m|v||a|dt]`. +Authored tuning extracted from BTL4.RES (18 records, one tuning): eff 0.995/0.8, gears +0.3/0.5/0.7/0.9999 rec idx 2; myomer thermal 77/1000/2000, thermalMass 2.5e5. Bench: hard +circling drove T 77→1225 and the coolant loop pulled it back to ~520. Caveats documented: +the kinetic term is per-tick (no dt — 1995 fixed-frame assumption, mild fps dependence); +the climb term reads g=0 (environment gravity unwired — open-questions). Gitea #85: +awaiting-verification. + +## 4. #88 — coolant leaks, both halves (`a8a0042`, `31552c0`) [T1 root cause / T2 verified] +- **Arming** (the #64 shadow): `UpdateCoolant` prices the leak from the qualified ENGINE + member `Subsystem::damageZone` — which the MechSubsystem ctor never assigned (it filled + only its re-declared shadow). zoneDamage read 0 forever → leaks structurally impossible. + Fix: both ctors alias the engine member to the same zone (#64 half-fix; the de-shadow + sweep stays open). Bench: rattle + weapon crits both drive `[cool]` leak pricing. +- **Central pull-through**: `HeatSink::DrawCoolant` was a `return 0` stub (the operator + noticed the coolant panel bar never moved). Real base @0x4add00 disassembled: the draw + RECURSES up the sink linkage (× coolantFlowScale@0x15C per hop) and terminates at the + Reservoir's supply (@0x4af3b0, already faithfully ported). The bank's `helper@0x1D8` + member is its reservoir connection (not vestigial). Bench: a destroyed myomer's leak + drained the central tank 6.0→5.58 over ~30 s — the cockpit coolant BAR now drops. + Gitea #88: awaiting-verification; #64 half-closed. + +## 5. Myomer system COMPLETE — the "WAVE 6 mover cutover" was a phantom (`cf8618b`) [T1] +`@004b9550/@004b95b8` ("ConnectToMover") are MechWeapon::ConfigureMappables/ChooseButton — +the `+0x31C` there is weapon TriggerState and `**(mech+0x128)` is the CONTROLS MAPPER's +button roster. **The binary has NO dynamic myomer→speed feed.** Full data-flow closure +(every check [T1]): the demand fn @004afd10 (all three control-mode branches + turn clamp) +has no myomer term; all `mapper->speedDemand` writers = that fn + the gimp clamps; +`AvailableOutput` has exactly 2 callers (RegisterMaxOutput @assembly + the graph sampler); +the virtual slot-0x3C sweep finds only the graph + the mapper detach; the SpeedEffect +attribute string has 1 reference (its own table row); `mech+0x7A0` writers = ctor-zero + +RegisterMaxOutput. The authentic system, all live: heat; VITAL death (myomers are the only +authored vital=1 subsystem — also the ram-death mechanism, rattle weight 0.35); the +assembly cap (RegisterMaxOutput → mech+0x7A0 = base×~1.4284, now really registered); +the ENG power curve at true scale; electrical sourcing. REMOVED as inventions: the +`speedDemand *= speedEffect` demand multiplier + BTMyomersDriveOf + the Myomers mover +family. #75 CLOSED (premise falsified: myomer damage does not slow a live mech; the +damage slowdown is the leg-damage gimp gait). + +## 6. The seek dial — decoded end-to-end, one question OPEN for the players +What seek does in 4.10 [T1]: heat ratio² (floors at 1 — gears 1-3 heat identically); +the generator brown-out threshold, whose real stake is TORSO TWIST (the Torso PowerWatcher +zeroes twist while the myomers are not Ready; generator has NO load model — demand never +pulls the bus down); the ENG graph. Gear 4 = double heat + hair-trigger dropout for a +taller graph. **The 1995 manual (4.0) says otherwise**: seek "translates to a lower or +higher top speed", gear 4 is named SUPERCHARGE (expert-only), stat sheets print three top +speeds (Loki/Thor: Normal 143 / Super Charged 182 / Gimped 40 kph). The printed ratio +(1.27) doesn't even match 4.10's vestigial gear table (1.43) → a documented 4.0→4.10 DRIFT +(third alongside experience gates + coolant-loop redistribution). Plausible motive: MP +fairness (expert-only speed advantage patched out of mixed-experience pods). +**OPEN — the player version-probe**: the operator is asking SAURON/Oracle whether seek 4 +made their pod-era mechs faster. If the pods they played had supercharge, resurrecting it +would be an opt-in deviation (all plumbing exists: gear ratio, the 0x7A0 cap, heat penalty, +heatFactor overheat-to-zero — one authorized multiplication in the demand path). + +## Carried opens (unchanged this session) +Cross-fire combat stall; silent node crash (procdump armed); 17s-late kill credit; #93 +end-of-round PerformAndWatch use-after-free (one occurrence, symbolized); goto +release-to-manual freeze; environment gravity unwired; the #64 full de-shadow sweep; +mech3 CreateStreamedSubsystem stub bridges (/FORCE known-cold). + +## Field re-test list for the next session (all labeled awaiting-verification) +1. #94: ram-kill victims respawn visibly (no zombie wreck) on every screen. +2. Collision economy: wall-humping harmless; rams stagger + rattle BOTH parties; no 2-s + grind deaths. +3. #85: myomers warm on the ENG panel while driving; ~2× at seek 4; loops respond. +4. #88: subsystem damage arms the leak warning and the coolant BAR bleeds down. +5. Seek: heat changes with gear, speed does NOT (correct per 4.10) — plus the version-probe + question above.