427 lines
28 KiB
Markdown
427 lines
28 KiB
Markdown
# Session handoff — 2026-08-03 (armor visibility + eject arm chain)
|
|
|
|
## Committed this session (all on master, exe deployed to content/)
|
|
- `fe48acc` **#87 root cause**: zone-level replication send was missing — the binary's
|
|
effect watcher (FUN_0042aa2c) ForceUpdates on BAND-THRESHOLD crossings (master-gated);
|
|
the port only had the gstate branch. Observers saw 0.0 forever. Fixed + 2-node verified
|
|
(replicant peaks == master finals to 4 decimals).
|
|
- `440cee1` #87 dig closure: host response is LINEAR (raw re-read @004573e4/@00457784,
|
|
0.1 literal at call site); the pixel curve was i860 DIV-CARD firmware (flush_material
|
|
@0048d4d4 just marshals) — logged in open-questions. Field claim reconciled: one 25-pt
|
|
hit snaps a 77-pt arm 0→0.325 (measured; snap is visible, 2-pt ERS creep is not).
|
|
Bench: BT_WALK_ZONES filter (legwalk.sh), BindArmourDamage ORPHAN inventory (0 orphans).
|
|
- `8165cee` **#118 eject alive**: the evaluator's per-frame caller found by E8-scan —
|
|
FUN_004a9b5c (Mech MASTER PERF, export hole)+0x10 calls @0049fa1c every frame. Restored
|
|
at top of Mech::PerformAndWatch (master-gated). Mislabel swept: mech+0x414 =
|
|
ejectPermitted (NOT missionReviewMode; real review mode = GLOBAL DAT_004fd550).
|
|
Verified: gen-kill → panic-arm mode ON → miniconsole Panic button LIGHTS (pixel proof
|
|
panicbtn.png) → punch-out → respawn disarms. BT_EJECT_LOG=1 logs edges.
|
|
Also: msg id 0x1a = DuckRequest@0049fa00 latches mech+0x398 — NO reader in image (vestigial).
|
|
- `0089b32` **G = Flush binding** (was: action existed, NO key bound — desktop players
|
|
could never flush!) + BT_FLUSH_HOLD=<frames> scalpel.
|
|
|
|
## IN FLIGHT — the user's firsthand eject test (they asked, then had to shut down)
|
|
Dry run result (content/fl.log): full flush drains the TANK to 0/14 in ~30 s but does
|
|
NOT arm eject — InjectCoolant moves tank coolant INTO the loops (bank RISES); idle heat
|
|
draw won't burn the loops below the 5% arm threshold in minutes.
|
|
**Firsthand recipe to give the user next session** (needs build with 0089b32 — exe in
|
|
content/ is current, but the DIST zip is not):
|
|
1. Solo (play_solo), get in.
|
|
2. HOLD **G** until the COOLANT RES gauge hits 0 (~30 s; flush cloud + audio confirm).
|
|
3. Then run HOT: hold fire (lasers) continuously / keep moving. With the tank dry the
|
|
loops burn coolant with no refill. Watch coolant bars fall.
|
|
4. When the bank crosses 5%: **the Panic button (bottom-left panel) lights bright** —
|
|
press it (or Backspace = key Back action Eject) → punch-out.
|
|
Faster alternates that also arm: lose all 4 generators; or (novice sim) leg-gimp.
|
|
OPEN: how long step 3 takes firsthand (not yet measured — the 3-min idle bench never
|
|
armed; sustained fire should be much faster). If it's tediously long, consider whether
|
|
weapon heat actually draws LOOP coolant in our reconstruction (#100/#120 territory —
|
|
check ConsumeCoolant path under fire before telling testers "minutes").
|
|
|
|
## Next-session queue
|
|
1. Give the user the firsthand recipe above (they explicitly asked to test it).
|
|
2. Time-to-arm under sustained fire — bench it (fire scalpel + BT_COOL_LOG) BEFORE
|
|
promising the recipe works in reasonable time.
|
|
3. Cut dist 717: carries score fix, 28 Hz, eject core+arm chain, #119, #124 triangle
|
|
pick, #87 replication send, G-flush binding. Testers verify: missile snap darkening
|
|
visible in MP now; eject lamp + punch-out.
|
|
4. Gitea: #87 and #118 both commented + awaiting-verification (labels set). #118 note
|
|
says flash-vs-solid lamp is answerable if pod veterans remember blinking (GaugeAlarm
|
|
SetAlertState overlay — not authored for panic in shipped streams as far as checked).
|
|
5. Carried: #55, #100 (reservoir drain — RELATED to step 2 above), #120 (flush floor —
|
|
note: our tank DID reach 0/14, so the floor report may be the LOOP levels, not the
|
|
tank), #121-#123, #125-#130; mover-gravity dt-less lead in open-questions.
|
|
|
|
## Bench inventory added today
|
|
- scratchpad/night10/zonewalk.sh (A now has BT_ARMOR_LOG + BT_SHOT_EVERY=zwA) — the
|
|
standing zone-replication receipt bench; digest_walk.py reads it.
|
|
- scratchpad/night10/legwalk.sh — leg/foot concentrated audit (BT_WALK_ZONES=leg,foot).
|
|
- scratchpad/night10/armorpx.sh — BT_ARMOR_FORCE 0/1 pixel A/B.
|
|
- BT_EJECT_LOG, BT_FLUSH_HOLD, BT_WALK_ZONES, armor ORPHAN dump (BT_ARMOR_LOG).
|
|
- Proof artifacts in content/: panicbtn.png, forceladder.png, snapdiff.png, legdiff.png,
|
|
dollcrop_*.png (all disposable).
|
|
|
|
## KB updated (all committed)
|
|
combat-damage §Zone-LEVEL replication + snap-vs-creep fidelity boundary;
|
|
decomp-reference §4 (effect watcher cluster) + EJECT ARM CHAIN entry;
|
|
multiplayer (band-granularity observer model); test-harness (zone-walk armor receipts);
|
|
open-questions (i860 DIV-CARD firmware ask).
|
|
|
|
---
|
|
## EVENING SESSION ADDENDUM (the eject sprint + the MFD corruption arc)
|
|
|
|
### Eject system — COMPLETE and firsthand-verified (commits 8165cee..7872254)
|
|
- Arm chain per-frame (FUN_004a9b5c+0x10, E8-scan) [T1]; mislabel swept (mech+0x414
|
|
= ejectPermitted; review mode = GLOBAL DAT_004fd550).
|
|
- EjectPilot @0049f854 confirmed via the image message table ('EjectPilot' id 0x19);
|
|
DuckRequest = id 0x1a @0049fa00 (mech+0x398 latch, NO reader — vestigial).
|
|
- ⚠ CORRECTED (same night): an earlier "eject was UNFINISHED/dead code in 4.10"
|
|
claim was WRONG — the absolute-pointer scan missed the E8-relative call; the
|
|
master perf (FUN_004a9b5c+0x10) evaluates per frame, so the ARCADE's eject was
|
|
LIVE. Only the PORT was missing the call (our PerformAndWatch recon predated
|
|
knowing the export-hole fn's contents). Swept from code comments same night.
|
|
- THE PRESS MODEL [settled]: pilot eject = the PILOT KEYPAD bank while armed
|
|
(+ the PANIC key, which reports through that matrix). The MFD soft keys NEVER
|
|
pilot-eject in the binary — every page routes them to authored functions
|
|
(weapon eng: EjectAmmo; myomer eng: seek toggle) — the flashing engEject cell
|
|
is the INVITE LAMP. Our page-gated eng-key eject is a MARKED PORT CONVENIENCE
|
|
(deviation), operator-requested; drop it if strictness wins.
|
|
- Inputs, all live: Panic button (0x3D→pilot-keypad wire), NUMPAD = pilot keypad
|
|
(CONTROLS.MAP `keypad pilot` bindings), Backspace/pad action, and the eng-page
|
|
EJECT key (0x0B/0x23/0x03) page-gated in the RIO drain [T3 intent-completion].
|
|
MFD soft keys otherwise keep authored functions (streamed .CTL: no 0x200000
|
|
records — the 109-record dump is the proof).
|
|
- Generator destruction → stateAlarm 4 (GeneratorOut, renamed from placeholder)
|
|
[T3 inferred link] → the AUTHORED invite trail flashes (gotoEngineering 0x80 +
|
|
engEject 0x85, alarm conditions 4/5).
|
|
- KeypressMessageID pinned to binary 0x19 (chain arithmetic gave 0x17 — the armed
|
|
press was silently swallowed; two mapper ids 0x17/0x18 remain unreconstructed).
|
|
|
|
### The MFD corruption arc (gotcha #27) — RESOLVED
|
|
Root cause = MY two new draws, not eject logic: (1) the eject-wipe gauge scribbling
|
|
a shared ENG/weapon composite plane during eject cycles (re-stubbed, class kept in
|
|
btl4gaug for a proper FUN_004c5fb8 draw-op RE); (2) the full-face flash overlays
|
|
(L4VB16 + L4GLASSWIN, both REMOVED — the side buttons are big under-surface rects;
|
|
the protruding edge IS the lamp; DrawDevSurface's bound texture turned un-reset
|
|
fills into gauge-atlas stripes). Pixel-verified clean under full stress; edge lamp
|
|
0x27 square-waves 34.0↔28.9 across captures = the flash works at authentic scale.
|
|
|
|
### Next-session queue (no release went out tonight)
|
|
1. Cut dist 717 after a fresh operator pass on 0535a7a-era build.
|
|
2. Eject-wipe draw-op RE (FUN_004c5fb8 view vtbl+0x58 arg roles) → un-stub the slot
|
|
graphic.
|
|
3. The eng-page label-vs-lamp position question: operator saw the flash beside
|
|
GEN-MODE, not EJECT, on one page — cross-check the DRAWN eng-page layout
|
|
(streamed gauge pages) against kBTEngBankTop math per bank.
|
|
4. Authentic generator death (combat crits / overload, not the scalpel) reaching
|
|
state 4/5 — then the [T3] MarkGeneratorOut bridge can be checked against the
|
|
real transition site (MechSubsystem::TakeDamage/OnAlarmChanged cluster RE).
|
|
5. Flash presentation: the edge-lamp scale is the design; if the operator wants
|
|
more presence it is a DELIBERATE glass-layer decision (discuss, don't impose).
|
|
|
|
---
|
|
## DAY-2 ADDENDUM (2026-08-04): eject epilogue + the stale-tracker sweep + #108/K-D
|
|
|
|
### Settled today (all committed, tip 0bd9bb6+)
|
|
- Eject FINAL: strict binary model shipped (soft keys never eject; Panic/numpad/
|
|
Backspace do; invite lamps decoded -- conds 4/5 = WEAPON ammo/jam purge invite,
|
|
cond 6 = bus invite via !HasVoltage; hysteresis tried+REMOVED, flap is authentic;
|
|
MarkGeneratorOut bridge removed -- state 4 = the thermal breaker, destruction
|
|
touches nothing electrical @0049c9a8). TechStatus bit table in decomp-reference.
|
|
- #119 leak-voice stutter: AUTHENTIC (wooHoo latch authored all-zeros + no armer
|
|
in the image; the hunt at drained tanks clips the phrase-sequenced voice; our
|
|
only real bug was 2x cadence, already fixed). Deterministic leak scalpel added:
|
|
BT_KILL_SUBSYS partial form "Condenser4=0.5".
|
|
- Tracker STALE sweep: #80 (crits -- landed a5fb96a 07-29, re-verified live:
|
|
[critroll] chance=0.01+0.7*lvl^2 byte-extracted) CLOSED; #2 (experience --
|
|
wired 07-20, [exp] sentinel live) CLOSED; #22 marked awaiting-verification
|
|
(respawn ammo-refill receipts in tonight's logs).
|
|
|
|
### IN FLIGHT: #108 ghost recurrence + the K/D accuracy report (SAME ACTION)
|
|
- #108 hypothesis: per-entity replication dropout on one node (miss death mode +
|
|
wreck gstate + respawn teleport together -> frozen ghost at the old spot while
|
|
hits register elsewhere). Lead mechanic: the wreck SINK (-8u underground) may
|
|
make the entity interest-culled for distant nodes; if re-interest never fires
|
|
after the respawn teleport, that node's replicant freezes forever. UNPROVEN --
|
|
693 field logs lack entity ids and every discriminating marker is env-gated.
|
|
- K/D inaccuracy (night-11 report, build 716): the tally/credit receipts
|
|
(PLAYER_DEAD matchlog rows, [score] panel DRAW probe) are ALL env-gated off in
|
|
field builds -- logs show only roster rebuilds. Cannot confirm or deny from
|
|
the field data. NOTE: K/D columns are replicated state; a #108-style stream
|
|
dropout would corrupt both ghosts AND tallies on the same node -- one cause.
|
|
- THE ACTION (next block, before cutting 717): make field logs self-diagnosing:
|
|
1. players/play_steam.bat (+join*.bat): set BT_MATCHLOG=1 (or a curated
|
|
death/score subset if per-shot DMG volume is too hot -- check matchlog.hpp
|
|
categories) + BT_SCORE_LOG=1.
|
|
2. Entity IDs on the ungated render lines (wreck swap / MakeMechRenderables /
|
|
RemakeEntity -- btl4vid).
|
|
3. NEW ungated [ghost] staleness detector: a replicant whose last-applied
|
|
update record is > N s old while not buried -> one line with entity id +
|
|
age + last-known position (the #108 indictment line).
|
|
4. Un-gate (or default-on) the respawn un-wreck line.
|
|
Then 717's night-11 logs convict #108's mechanism and settle the K/D claim.
|
|
|
|
### Next-session queue (post-717-cut)
|
|
1. The instrumentation block above -> cut 717 -> field night.
|
|
2. #35 Owens laser crash; #126 invisible peer fire; #89 splash; #92 Loki feet;
|
|
#73 (check against the #124 triangle-pick fix -- likely closable).
|
|
3. #118 last tail: MP console notice delivery audit.
|
|
|
|
### #108 CONFOUND (operator recall, 2026-08-04): Conn Man ran a WRONG BUILD for
|
|
much of night 9 -- raw-struct replication + version skew can desync one
|
|
connection's stream (one node loses one entity: the exact ghost signature), and
|
|
same-build benches can't reproduce (59 clean cycles again today). K/D bookkeeping
|
|
verified EXACT both columns (4-node deaths + 2-node cross-player kills,
|
|
matchcheck-reconciled). NEW 717 item: BUILD HANDSHAKE at join/relay (version
|
|
already in matchlog HDR) -- refuse mismatched builds loudly. Instrumentation
|
|
block unchanged (it discriminates skew vs real bug).
|
|
|
|
### BUILD HANDSHAKE: SHIPPED for Steam (2026-08-04, 22f732f + d050db5)
|
|
The #108 build-gate item above is DONE for the Steam path (game/glass/
|
|
btl4lobby.cpp, ~60 lines, in the 717 cut):
|
|
- Host lobby stamped btl4ver=BT_VERSION_STRING (unique per zip -- btversion
|
|
is an always-run custom target, re-stamps from git every build; verified
|
|
build/btversion.h ticked 749->754 across today's commits).
|
|
- Joiner search filters on exact btl4ver match; the no-lobby log names the
|
|
local build so field reports self-diagnose (#68 lesson). Post-join
|
|
GetLobbyData verify covers invites/unstamped hosts: loud log + LeaveLobby.
|
|
- HOST HALF (the part that catches OLD exes, i.e. the actual Conn Man case):
|
|
PublishSelf adds per-member bv=build; the GO mint SKIPS any non-self
|
|
member with absent/mismatched bv -> no token in btl4map -> the stale
|
|
client's own pre-existing "the host's map is missing us" bail fires (that
|
|
code ships in every old build already). Room screen marks such members
|
|
[WRONG BUILD -- WILL NOT LAUNCH] so the host sees it BEFORE pressing GO.
|
|
- Old-build member experience: sits in room, GO fires, their exe fails the
|
|
join back to the FE. They get no in-client message (impossible to add
|
|
text to an exe they already have) -- the host-side room marker + REJECT
|
|
LobbyLog line are the operator's tools.
|
|
- Verified: link clean vs the documented 20-stub /FORCE baseline
|
|
(build-and-run.md:28), gate strings confirmed in the deployed exe
|
|
(ascii + utf16 scans), content/btl4.exe = committed tree (4.11.754).
|
|
NOT yet field-tested (needs two Steam machines; single-account can't
|
|
exercise join-vs-host). First 717 Steam night proves it.
|
|
- NOT COVERED: LAN/relay (join.bat / btconsole relay) -- a stale zip can
|
|
still join a LAN session. Relay-side version check = separate item if
|
|
wanted (version already rides the matchlog HDR for post-hoc detection).
|
|
- ADDENDUM (648f6b1): join-side rejections now MESSAGE-BOX the player
|
|
(LobbyNotice = day-log line + MessageBox): BUILD MISMATCH (probe
|
|
re-search without the version filter names the host's build vs ours,
|
|
read from list-cached lobby data without joining), NO LOBBY FOUND,
|
|
STEAM UNAVAILABLE, LEFT BEHIND (no token in btl4map). Old exes still
|
|
quit silently on rejection (unfixable in the field); host roster
|
|
marker is the operator's view. content/btl4.exe = 4.11.756 (648f6b1).
|
|
|
|
### #91 thor "black rectangle": ROOT-CAUSED + FIXED (2026-08-04)
|
|
Ronin's report (3rd sighting) pinned it: the rectangle = the thor's OWN
|
|
thx_msl missile-pod mount plate. The inside view is a per-mech AUTHORED
|
|
type-A set (KB "exactly one mesh" claim corrected in cockpit-view.md):
|
|
thor = cop+tor+MSL, owens = cop+BOTH LEGS+tshd, sunder/loki/avatar =
|
|
cop+tor. Pilot-facing surfaces are <pfx>skin:blakskn_dz_* -- the same
|
|
interior-structure material as the canopy frame -- but the unlit frame
|
|
constant keyed on the _cop FILENAME, so pod/legs rendered void (0,0,0)
|
|
instead of (0.13,0.12,0.15). bgfload now keys on the material family
|
|
(mechfx shadow quads excluded). Verified by walking captures (zero
|
|
pure-black lower-band px; plate blends with the frame bar at rest).
|
|
Diags: BT_MAT_LOG, BT_HIDE_INSIDE_SEG, [view] roster names; bench
|
|
scratchpad/night11/thorrect.sh. #91 labeled awaiting-verification --
|
|
Ronin should re-fly the thor on 717.
|
|
|
|
### #92 loki feet: ALREADY FIXED -- bench-verified 2026-08-04
|
|
Zone-walk rig vs a LOKI target (scratchpad/night11/zonewalk_loki.sh):
|
|
both feet take aimed direct fire (lfoot zone 4 / rfoot zone 15, pick
|
|
resolves correctly, 7 dmg applications each, all 21 zones alive).
|
|
Oracle's night-7 report was build 659 = pre-#124 pick fix; collateral,
|
|
cured. Labeled awaiting-verification -- Oracle re-flies on 717.
|
|
|
|
### #124 twist-sign verify: DONE -- sign CORRECT (2026-08-04)
|
|
The last inferred half of the frame adapter is now runtime-verified:
|
|
torso pinned 0/+140/-140 (new BT_FORCE_TWIST sim-level diag; the input-
|
|
level pin was dead -- CONTROLS.MAP device push owns live input, Basic
|
|
auto-centers), LRM salvos, new [slice] log (twist, thetaIn/Adj, wedge).
|
|
Picks track the physically-facing flank both directions; wrong sign
|
|
excluded (slice 7 vs observed slice 1). No game-code change. Remaining
|
|
on #124: only the 717 field re-run of Oracle's audit rows.
|
|
|
|
### RESPAWN-RESET AUDIT (2026-08-04, operator request): COMPLETE
|
|
Full matrix in docs/RESPAWN_REARM_PLAN.md addendum. Fixed: coolant VALVES
|
|
(Condenser @004ae534 raw-disasm'd -- missing from export; detent->1 +
|
|
massScale restore + Mech::Reset's @0049f788 recompute tail; bench receipt
|
|
"detent 5 -> 1") and #129 SPAWN SMOKE (replicant un-wreck edge now runs
|
|
the @004d0c14 effect cleanup; peers-only symptom explained). AUTHENTIC
|
|
(no fix): weapon->gen taps + MFD display/control modes persist (mapper
|
|
vtables = root bodies, read from exe). #55/#129 commented, labeled.
|
|
Bench: scratchpad/night11/respawnreset.sh.
|
|
|
|
### CUT: BT411_4.11.767.zip (2026-08-04) -- the "717" field build
|
|
dist/BT411_4.11.767.zip, stamp 4.11.767 (81dda84), STEAM=ON EXPIRE=ON.
|
|
Carries the whole two-day ledger PLUS today: Steam build gate (both
|
|
halves + player-visible rejections), #91 pod-plate fix, #92 receipts,
|
|
#124 twist-sign verify, respawn-reset audit (valves + #129 smoke), and
|
|
the #108 forensics block (ghost detector verified both ways, render IDs,
|
|
field envs in the bats). Zip contents verified by direct inspection
|
|
(gate strings, ghost string, bat envs, clean stamp).
|
|
FIELD NIGHT CHECKLIST: #87 snap darkening, eject flow, #91 (Ronin re-fly
|
|
thor), #92 (Oracle re-fly loki feet), #129 spawn smoke, valve reset,
|
|
#22/#35/#55 awaiting-verification items, and #108 -- gate guarantees
|
|
same-build, so any ghost now leaves a [ghost]/GHOST record.
|
|
|
|
### RE-CUT: BT411_4.11.771.zip supersedes 767 (never distributed)
|
|
Merged Cyd's glass-lamp-latency (per-frame lamp STATE sweep, glass only,
|
|
BT_GLASS_LAMP_SWEEP=0 restores; #45 citation in his comment fixed to
|
|
"field reports"). Smoke-tested: cockpit + all MFD panels un-regressed,
|
|
no compositor artifacts. SCOPE NOTE for testers: this fixes BUTTON/lamp
|
|
responsiveness under load in all glass layouts INCLUDING separate
|
|
windows; instrument-SURFACE refresh (needles/pages) still rides the
|
|
throttled background gauge sweep and can lag on heavy missions -- the
|
|
background-sweep starvation dig is the follow-up. 767 zip deleted.
|
|
|
|
### #124 CORRECTION: per-PANEL hull zones (2026-08-04, field pushback)
|
|
The "aimed torso = always center" claim was WRONG -- players' era memory
|
|
was right. Proof: MAD_TOR patch tags (9 hull zones in the art), dpl
|
|
GEOGROUP-granularity hit block, @49db20 has no runtime caller. Pick now
|
|
resolves the struck patch's dz_* zone via the #87 dmgBinds (segment
|
|
dzone fallback); ZoneAimPoint aims patch centroids. Bench: every hull
|
|
panel resolves individually (utorso 11/12; pre-fix 102/102 -> dtorso),
|
|
victim applied across all panel families. KB + release notes corrected;
|
|
#124 tracker comment posted. Oracle's audit re-run on the new build is
|
|
the acceptance test.
|
|
|
|
### NIGHT 12 FIELD RESULTS (2026-08-04, build 4.11.774) -- "mostly a win"
|
|
TEN issues field-verified + CLOSED with receipts: #124 (per-panel
|
|
targeting ACCEPTED, all 8 chassis perfect incl. searchlight), #16, #73,
|
|
#87 (darkening + per-panel smoke "working very well"), #129, #92, #91
|
|
("thor bowtie worked"), #55 (valves/loops reset, assignments persist),
|
|
#68 (wrong-build join rejected VISIBLY -- gate held in the field), #118
|
|
(panic arms on all 3 authored conditions; dunce-cap notice works).
|
|
NO ghost report all night; skating returned instead (#52 commented: 3
|
|
sightings with times). NEW ISSUES #131-#138: reticle false-lock/no-reg
|
|
(BLACKHAWK-correlated -- the operator's headline; sphere-fallback +
|
|
NO-TRIS leads flagged in the issue), Conn Man's yellow HUD line, gen
|
|
X-out era question, panic score penalty missing, Rajel's non-glass leak
|
|
lamps, leak/component-toggle interaction (repro pending), Oracle's
|
|
maxed-myomer respawn, glass unfocused-window flash throttle (Cyd
|
|
root-caused + fixing, plus red panic button + vPlasma noframe).
|
|
Field logs staged UNSCANNED: scratchpad/night12/steam_20260804_{a,b,c}
|
|
.log (gitignore-verified). Probable mapping from chat headers:
|
|
MS-FIREFLY/santo=Conn Man (Steam DOWN -- winsock fallback, note!),
|
|
GAMERSLAB/rajel=RajelAran, SCREECH-PC/Dave=Oracle -- confirm from
|
|
session headers at scan time. NEXT: log scan (crash @8:45PM ET Oracle
|
|
lobby launch; [ghost] lines vs skating windows; #131 forensics).
|
|
|
|
### #131 FALSE LOCK: FIXED -- miss-means-miss (2026-08-05)
|
|
Root cause: sphere + AABB fallbacks answered where the 1995 card would
|
|
MISS; exposed by LEVEL boresight over the SHORT blackhawk (ray clears the
|
|
mesh, threads the spheres -- ring lit above its head; operator watched it
|
|
live). Fix: pick returns hit/TRUE-MISS/no-tree; spheres only for
|
|
unreadable meshes (none exist); AABB only pre-tree. Receipts: level
|
|
sweep 0 locks (was 168 sphere answers); down-pitch 100% tri-sourced;
|
|
walk matrix tri=18874/sphereFB=0, 156 hits across 16 zones on bhk1.
|
|
New instruments: BT_LOCK_SWEEP / BT_LOCK_ENVELOPE / [picksrc] counters.
|
|
BUILD RITUAL (stale-link flake, bit 3x today): rm build/Release/btl4.exe
|
|
before the build, string-verify the new exe before deploying.
|
|
FIELD NOTE: locking strictly tighter now; if era testers want linger,
|
|
that becomes a sourced investigation (Draco's memory, #131 comment).
|
|
|
|
### NIGHT-12 LOG SCAN (2026-08-05): 3 staged players, ~49 sessions, all 774
|
|
- SKATING DISCRIMINATED: zero [ghost] lines anywhere -> records flowed ->
|
|
#52/#130 is the GAIT/LEG-STATE replication path, NOT starvation. Next:
|
|
2-node gait-state bench.
|
|
- #134 CONFIRMED from data: 3 punch-outs -> 3 DWH notices -> deaths, ZERO
|
|
score awards any sign (SCORE_LOG forced on). Mechanism: eject = self-
|
|
damage killBonus; kill-scoring never engages for self-kill; authentic
|
|
debit likely rides the DEFERRED id-0x16 kill-report block -- that
|
|
reconstruction is the fix.
|
|
- Oracle's 8:45PM "crash": 7-line session dying between "lobby up" and
|
|
the room screen, no exception -- filed with fingerprint (new issue).
|
|
- Conn Man winsock header: ONE failed boot (Steam not ready), relaunched
|
|
46s later on Steam -- benign, no mixed transport.
|
|
- #135/#137: field logs lack lamp/heat instrumentation -- RECOMMEND
|
|
adding BT_LAMP_LOG=1 to players/*.bat next cut; both need local repro.
|
|
|
|
### #52 SKATE detector: negative-verified, awaiting field or gimp bench
|
|
[skate]/SKATE forensic on master (channel-agnostic -- first build keyed
|
|
legCycleSpeed alone and false-fired; peers pose from the BODY channel).
|
|
2-node bench: 7 respawn-while-moving cycles, zero hits, zero false
|
|
fires. Field logs already ruled out starvation. NEXT provocations:
|
|
leg-gimped walker (#82 family), 6-player load. The detector rides the
|
|
next cut regardless -- one field SKATE record names the failing case.
|
|
|
|
### #52 LAB CAMPAIGN CLOSED (2026-08-05): matrix passes, field instrument rides
|
|
Healthy walk / 7x respawn-while-moving / gimp-onset at speed / 21s
|
|
SUSTAINED GIMPED WALKING (BT_SELF_DAMAGE_ZONE=dz_ldleg -- the recipe) /
|
|
leg-death (authentic at 1.0) / respawn: ZERO skate, and the peer's gimp
|
|
view verified live (gl=3, gimp bodyStates cycling => #82 holds). Field
|
|
skating needs field scale -- [skate]/SKATE detector ships next cut.
|
|
BT_LAMP_LOG=1 added to the three player bats (#135 forensics).
|
|
Bench recipe archive: scratchpad/night12/skatebench7.sh (clean-room;
|
|
sed-derived script chains dropped envs twice -- write benches fresh).
|
|
READY TO CUT: everything since 774 incl. #131 fix + both detectors.
|
|
|
|
### #89 DEATH BLAST: reconstructed + verified (2026-08-05, pre-cut)
|
|
Second SplashDamage caller found in the TakeDamage tail (raw disasm
|
|
@0x4a07b8-0x4a0bda). Gates: advancedDamageOn && !suppressConsole
|
|
(ejects never blast). Damage: Explosive, authored DeathSplashDamage/
|
|
Radius (PROMOTED from the global Wword bank -- was clobbered per-mech),
|
|
bursts = 0.015 x moverMass, falloff dist^1.25 in the shared core.
|
|
Bench: madcat radius=50 amt=5 mass=75000 -> neighbor at 8.9u took 73
|
|
bursts cross-pod, SPLASH/DMG reconciled. Deferred: burning dispatch
|
|
(0x17 handler), score post (id-0x16, #134). #89 awaiting-verification.
|
|
|
|
## 2026-08-05 (later): #45/#134 -- the authentic score/death report tail (91bd286)
|
|
User said "see it through" on the deferred id-0x16 block. Full reconstruction from raw disasm of
|
|
the dark-gap tail (@0x4a02f4-0x4a0890):
|
|
- THE BIG DECODES: BTPlayer handler table byte-scanned (file 0x112dxx): 6 entries, 0x16 Score ->
|
|
@0x4c02e4 (the type-switch handler; our port's transcription was already faithful), 0x17
|
|
VehicleDead -> @0x4c05c4, 0x1a ScoreUpdate; @0x4c0200 ("ScoreInflicted") IN NO ENTRY = dead
|
|
1995 code. The death tail's id-0x17 message = Player::VehicleDeadMessage (NOT SetBurningState
|
|
-- #89 banner corrected; mech-table 0x17 label/body mismatch logged in open-questions).
|
|
1995 SCORING MODEL [T1]: kills + received-damage penalties + death costs. NO per-hit credit
|
|
(type-0 lands in a Verify arm that folds an UNINIT stack float -- real 1995 bug; port banks 0).
|
|
Kill award = (victimKillBonus + tally) x inflictedMod x (victimAvgDmg@0x354 x damageBias + 1)
|
|
x tonnage ratio; teamkill = -ffPenalty; SELF-KILL NEGATED (fchs @0x4c03ab) = the #134 penalty.
|
|
- CODE: BTMechPostCombatReports + BTMechPostVehicleDead (btplayer.cpp bridges); mech.cpp handler
|
|
restructured (death latch at ENTRY, collision divert falls through to the tail per @0x4a0375
|
|
jmp -- wall deaths now respawn+blast); BT VehicleDeadMessage 0x38 ext {killed-by player, kill
|
|
zone}; ScoreMessage fields renamed (vitalHit/zoneIndex/subsysID) + wire static_asserts;
|
|
VTVDamaged points_transfered corrected (Round(award), not Now() -- ST0-arg __ftol misread).
|
|
RETIRED: BTPostDamageScore/BTPostKillScore + 3 call sites + the mech4 VehicleDead dispatch
|
|
(the [T3 sender-undecoded] flag is resolved -- this IS the sender).
|
|
- BENCHES (all PASS): scorekill.sh cross-node kill (killer kills=1 award=4.88; victim log
|
|
killedBy=2:1 zone=3; death #1 single cycle); scoreself.sh #134 (type=2 award=-39.00 kills=0,
|
|
total drops); deathblast2.sh regression (72 bursts ~9u). Collision-tail = inspection [T3].
|
|
Bench gotchas hit: spinner target splits leg damage across legs (drop BT_SPIN_SELF);
|
|
BT_ZONE_WALK=60 paces pulses too slow (use =8 + BT_WALK_ZONES=dz_ldleg for a ~2min kill).
|
|
- TRACKER: #134 CLOSED (awaiting-verification) w/ bench receipts; #45 + #89 follow-up comments.
|
|
- KB: combat-damage (new report-tail section), decomp-reference (BTPlayer table + role offsets +
|
|
msg layouts + mech+0x354), open-questions (0x17 mislabel, @0x4c05c4 ext-field consumption,
|
|
collision bench, uninit-award curiosity), multiplayer, KD_SCOREBOARD addendum. checkctx CLEAN.
|
|
- FIELD-VISIBLE CHANGE FOR RELEASE NOTES: score column now behaves like 1995 (kills pay,
|
|
taking damage costs, panic eject costs, per-hit credit gone). KILLS/DEATHS columns unchanged.
|
|
- NOT DONE: burning-state (mech-0x17 mislabel blocks it); @0x4c05c4 killed-by consumption
|
|
(sender carries the fields); DIV firmware intersection routine (unchanged).
|
|
|
|
## 2026-08-05 (evening): SEARCHLIGHT reconstructed (412053d + KB commit)
|
|
User picked searchlight over crouch (crouch's +0x398 consumer is un-located in the export = an
|
|
open-ended dig; parked). Findings + state:
|
|
- SUBSYSTEM was already DONE (searchlight.cpp); input already bound (F5 -> streamed 0x14).
|
|
The GAP was visuals, decoded from @004cef28 case 0xbd8 [T1]:
|
|
COCKPIT = FOG SWAP (fog= lit set vs nosearchlightfog= dark set, authored per BTDPL.INI page;
|
|
arena_night 40/400 vs 5/400!) via SetFogStyle 2/3 -- the engine kept ALL of it by name;
|
|
completed the stubbed plane application + transcribed the @456778/@456814 watcher into
|
|
TickSearchlight (inverted-cache first-tick sync = authentic DARK night start).
|
|
EXTERNAL = spot.bgf cone on the searchlight SITE joint, LightOn-driven (@45612c watcher);
|
|
site segments now get geometry-less DCS children (were skipped entirely).
|
|
- FIDELITY BUG FIXED: all prior builds rendered the LIT fog permanently (nothing ever called
|
|
SetFogStyle(3)). Tonight night is AUTHENTICALLY DARK -- release notes MUST say "press the
|
|
searchlight (F5)" or expect "game too dark / broken" reports.
|
|
- mountSegment @0x1DC identified (was "commandedOn, role unidentified") = resource segmentIndex.
|
|
- BENCHED: searchfog.sh (solo: first-tick dark sync, press->SetFogStyle(2), red-fog probe proves
|
|
the fog pipeline end-to-end), spotcone.sh (2-node: B press -> replication -> A "[spot] cone
|
|
SHOWN (seg 20)"). Bench traps hit: BT_BTNTEST too early (2-node spawn ~poll 900), the
|
|
renderer-level LoadObject wrapper is a btstubs NO-OP (marker case dormant! open-questions) --
|
|
cone loads via d3d_OBJECT::LoadObject direct.
|
|
- OPEN: cone size/aim eyeball pass (user launch); des_night pages have subtle deltas (arena =
|
|
the drama); LoadObject wrapper + dormant marker.
|
|
- NOT DONE tonight: crouch (0x1a DuckRequest latch is 4 lines; the CONSUMER needs a byte-scan
|
|
dig for [reg+0x398] readers -- a good quiet-day project).
|