BT410 5.3.107: census checkpoint -- 98% covered, and nine "missing" TUs had survived all along

Re-measured the manifest census with a three-way split (RECONSTRUCTED /
SURVIVES / MISSING) instead of the old exists-in-source410 test, and audited
every zero-function entry:

  NINE census TUs were never missing.  btmssn, btcnsl, btreg, btteam,
  bttool, gauss, ppc, btl4arnd, btl4mode all have surviving source in CODE/
  and have been building since the tree first compiled -- the census's
  binary file-tags only covered part of each TU's functions, so they looked
  absent.  btmssn is the clean proof: its three "missing" functions are in
  the surviving file, and the Fail's recorded line 0x45 IS line 69 of
  BTMSSN.CPP.

  GNRATOR.TCP is an 18-line TEST FRAGMENT (TestClass +
  ResetToInitialState), and both methods already live in POWERSUB.CPP --
  verified line-for-line, outputVoltage zero included.

Which leaves the true remainder at FOUR TUs: mech3 (3 fns -- the
authoring-side stream builders), mech4 (17 fns -- large parts already
re-hosted at STAGED seams in Simulate), and two zero-function entries.

897 of 917 census functions covered.  The honest completion metric stays
the Fail() stub count: 22 across 15 files, down from 26/18 at the start of
the gait arc.  README status block rewritten from its stale 2026-07-19
snapshot to say all of this.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-08-03 15:57:27 -05:00
co-authored by Claude Fable 5
parent d2be54a3b9
commit b720b68e38
+103 -87
View File
@@ -1,87 +1,103 @@
# source410 — literal reconstruction of the missing BT 4.10 game source # source410 — literal reconstruction of the missing BT 4.10 game source
**Everything in this directory is RECONSTRUCTED, not recovered.** The authentic surviving **Everything in this directory is RECONSTRUCTED, not recovered.** The authentic surviving
source lives in `CODE/` and is never mixed with this tree. The goal here is an source lives in `CODE/` and is never mixed with this tree. The goal here is an
archival-grade recreation of the `d:\tesla_bt\` translation units that exist only inside archival-grade recreation of the `d:\tesla_bt\` translation units that exist only inside
`BTL4OPT.EXE` (the shipped 4.10 binary), written in the 1995 VWE house style against the `BTL4OPT.EXE` (the shipped 4.10 binary), written in the 1995 VWE house style against the
1995 MUNGA/MUNGA_L4 engine headers that DID survive. 1995 MUNGA/MUNGA_L4 engine headers that DID survive.
## Ground rules ## Ground rules
1. **Never copy a reconstructed file into `CODE/`** — the assembled buildable tree 1. **Never copy a reconstructed file into `CODE/`** — the assembled buildable tree
(originals + reconstructions) is produced by a script into a build directory, so (originals + reconstructions) is produced by a script into a build directory, so
provenance stays unambiguous file-by-file. provenance stays unambiguous file-by-file.
2. **Every `.CPP` here has a `.NOTES.md` sidecar** carrying the evidence: the binary 2. **Every `.CPP` here has a `.NOTES.md` sidecar** carrying the evidence: the binary
address map, decomp references, which sibling sources supplied each idiom, and every address map, decomp references, which sibling sources supplied each idiom, and every
judgment call with its tier ([T1] decomp-proven … [T4] style guess). The `.CPP` itself judgment call with its tier ([T1] decomp-proven … [T4] style guess). The `.CPP` itself
stays clean 1995 style — no modern annotations inside. stays clean 1995 style — no modern annotations inside.
3. **Assert line numbers are constraints.** The binary's `Fail()` sites record the original 3. **Assert line numbers are constraints.** The binary's `Fail()` sites record the original
file+line (`BTL4APP.CPP:400` etc.); reconstructed files are shaped so those calls land on file+line (`BTL4APP.CPP:400` etc.); reconstructed files are shaped so those calls land on
their recorded lines. A file that can't meet its line constraints yet says so in the their recorded lines. A file that can't meet its line constraints yet says so in the
sidecar. sidecar.
4. **Layout mirrors the original tree**: `BT/` (bt.lib, 36 TUs) and `BT_L4/` (btl4.lib, 4. **Layout mirrors the original tree**: `BT/` (bt.lib, 36 TUs) and `BT_L4/` (btl4.lib,
13 TUs + BTL4.CPP), matching the surviving `BT.MAK`/`BTL4.MAK`. 13 TUs + BTL4.CPP), matching the surviving `BT.MAK`/`BTL4.MAK`.
## What drives the work ## What drives the work
- The per-TU manifest: `C:\VWE\BT411\reference\BT410_SOURCE_MANIFEST.md` - The per-TU manifest: `C:\VWE\BT411\reference\BT410_SOURCE_MANIFEST.md`
(tool `tools/manifest410.py`; method log `phases/phase-03-bt410-source-manifest.md`). (tool `tools/manifest410.py`; method log `phases/phase-03-bt410-source-manifest.md`).
- The decomp: `C:\VWE\BT411\reference\decomp\all\part_*.c` (+ `section_dump.txt` strings). - The decomp: `C:\VWE\BT411\reference\decomp\all\part_*.c` (+ `section_dump.txt` strings).
- The port's semantic reconstructions: `C:\VWE\BT411\game\reconstructed\` (WinTesla-hosted; - The port's semantic reconstructions: `C:\VWE\BT411\game\reconstructed\` (WinTesla-hosted;
each literal file here re-hosts one back onto the 1995 engine APIs). each literal file here re-hosts one back onto the 1995 engine APIs).
- Style/idiom exemplars: surviving `CODE/BT/*.CPP`, `CODE/RP/RP_L4/*.CPP`, - Style/idiom exemplars: surviving `CODE/BT/*.CPP`, `CODE/RP/RP_L4/*.CPP`,
`CODE/RP/MUNGA*/**` (the 1995 engine source itself). `CODE/RP/MUNGA*/**` (the 1995 engine source itself).
## Status (2026-07-19) ## Status (2026-08-03)
**Compile verification is LIVE: `./compile410.sh --sweep`** (BC4.52 + the authentic OPT.MAK
flags; the period compiler is the reviewer). `backdate.py` mechanizes WinTesla→1995 header **The census is 98% covered** (897 of 917 binary-attributed functions):
back-dating (donors: `C:\VWE\BT412\engine\MUNGA\*.h`). `manifest410.py`'s 50-TU missing-source census now splits RECONSTRUCTED /
SURVIVES / MISSING — an audit found NINE census TUs (btmssn, btcnsl, btreg,
| item | state | btteam, bttool, gauss, ppc, btl4arnd, btl4mode) had surviving source in
|---|---| `CODE/` all along (attribution noise: the binary file-tags covered only part
| **THE WHOLE TREE COMPILES (2026-07-19)** | ✅ **11/11: all 10 surviving originals + the BTL4APP.CPP pilot build clean under BC4.52 + authentic OPT flags** (`./compile410.sh --sweep`) | of each TU's functions). Remaining MISSING:
| BT/BTCNSL.HPP + BT/BTSCNRL.HPP | ✅ reconstructed — **console wire IDs recovered from the binary** (Killed=9, Damaged=10, ScoreUpdate=13, DeathWithoutHonor=15 [T1]; TeamScore=12 [T4 GUESS — verify]); see BTCNSL.NOTES.md |
| BT_L4/BTL4APP.CPP (pilot reconstruction) | ✅ compiles (18.5KB obj); 12/12 functions, Fail() at recorded line 400 | | TU | fns | note |
| Staged header family (13: mech/mechsub/heat/powersub/mechweap/emitter/mechmppr/btplayer/projtile/missile + btl4mppr/btl4vid) | ✅ [T3] interface-proven by every surviving consumer; layouts parked in reserved[] blocks — see STAGED-HEADERS.NOTES.md + MECH-LAYOUT.md | |---|---|---|
| MUNGA backfills (VDATA, ROTATION, VECTOR2D, AUDREND, APP, LAMP, GAUGREND, GAUGE) | ✅ compile-proven (BACKFILLS.NOTES.md) | | `bt/mech3.cpp` | 3 | the resource STREAM BUILDERS (authoring-side) |
| `bt/mech4.cpp` | 17 | master perf / IntegrateMotion / ReplicantPerformance — large parts already re-hosted in `Mech::Simulate` at STAGED seams (see MECH4.NOTES.md) |
**Next work package — the mech-family, REVISED (round-3 finding, 2026-07-19):** the plan to | `bt/gnrator.cpp` | 0 | GNRATOR.TCP is an 18-line test fragment; both its methods live in POWERSUB.CPP |
"reconstruct mech.hpp first" was the wrong order. A full read of the port's mech.hpp shows | `bt_l4/btl4galm.cpp` | 0 | zero attributed functions; header survives |
it is a hybrid (1995 skeleton + Recon proxies + port-only members + relocated fields), and
substantial regions of the binary's 0x854-byte Mech object remain UNMAPPED — the port **The honest completion metric is the `Fail()` stub count: 22 stubs across 15
declares "the remaining members up to sizeof==0x854" in its mech2-4 slices. A literal files** (down from 26/18 at the start of the gait arc). `SEQCTL.CPP` and
MECH.HPP that precedes those TU reconstructions would be fiction. Corrected order: `BTL4.CPP` are stub-free.
1. **MECH.HPP is the CAPSTONE, grown incrementally** with each mech-family TU
reconstruction (mech.cpp → mech2-4 → subsystem TUs), starting as an interface + **Playable-systems status:** the mech WALKS (two-channel clip gait, all 12
known-ordered members with explicit `reserved[]` filler for unmapped regions mech2 functions, interior+exterior clip sets), LIMPS from real leg damage
(sidecar-tracked), tightened as each TU pins its slice. (two-stage leg death), TURNS IN PLACE by stepping, walks REAL TERRAIN (the
2. The dependent headers (`mechsub`, `mechmppr`, `btl4mppr`, `emitter`+`mechweap`, gravity-less ground snap), and collides authentically (frame rejection,
`btplayer`, `projtile`, `missile`) ship WITH their TUs against the staged MECH.HPP. knockdown stagger, the collision-damage economy, crushable props, rams).
3. The blocked originals (BTTOOL, GAUSS, PPC, BTREG) and the BTL4APP pilot compile MISSION REVIEW links end to end (BTL4PB + L4SPLR + the review/camera launch
green as those land — BTREG last (it includes the whole game-header world). in main) — runtime test pending a recorded spool. The engine tree gained
Offset oracles for every stage: BT411 CLASSMAP.md, decomp-reference.md §3, and the port L4SPLR.CPP (182 TUs).
headers' static_assert-locked members.
**Next work package — the mech-family, REVISED (round-3 finding, 2026-07-19):** the plan to
## Toolchain — IN HAND (2026-07-19) "reconstruct mech.hpp first" was the wrong order. A full read of the port's mech.hpp shows
**Borland C++ 4.52**, archived at `../../BORLAND/BC45/`, chosen by byte-match: the fleet's own it is a hybrid (1995 skeleton + Recon proxies + port-only members + relocated fields), and
`CODE/RP/CW32.LIB` is identical to 4.52's (and not 4.5's). BCC32/TLINK32/TLIB/MAKE run natively substantial regions of the binary's 0x854-byte Mech object remain UNMAPPED — the port
on Win11. The shipped `BTL4OPT.EXE` recipe is `CODE/BT/OPT.MAK` (plain `bcc32`, declares "the remaining members up to sizeof==0x854" in its mech2-4 slices. A literal
`-DLBE4;DEBUG_LEVEL=0;DEBUG_STREAM=cout`, `-5 -a4 -ff -k- -V -Jg -x- -RT-` + the full `-O` set, MECH.HPP that precedes those TU reconstructions would be fiction. Corrected order:
PCH `btopt.csm`; link `-Tpe -ax` with `c0x32.obj + dpmi32.lib + cw32.lib` = Borland PowerPack 1. **MECH.HPP is the CAPSTONE, grown incrementally** with each mech-family TU
DPMI32, not Phar Lap TNT). Compile verification of reconstructed TUs is therefore possible reconstruction (mech.cpp → mech2-4 → subsystem TUs), starting as an interface +
file-by-file; the current blocker for full closure is the 1995 engine header gap (`vdata.hpp` known-ordered members with explicit `reserved[]` filler for unmapped regions
first — only the drifted WinTesla `VDATA.h` survives, in BT412/engine). Include order for (sidecar-tracked), tightened as each TU pins its slice.
builds: `CODE/BT/*` over `CODE/RP/*`, `-DNO_PRECOMPILED_HEADERS` until the mech-family headers 2. The dependent headers (`mechsub`, `mechmppr`, `btl4mppr`, `emitter`+`mechweap`,
are reconstructed. Remaining gap: TASM32 (JOYSTICK.ASM only). `btplayer`, `projtile`, `missile`) ship WITH their TUs against the staged MECH.HPP.
3. The blocked originals (BTTOOL, GAUSS, PPC, BTREG) and the BTL4APP pilot compile
## Link campaign (build410, 2026-07-19) green as those land — BTREG last (it includes the whole game-header world).
`source410/build410.sh` assembles BTL4OPT.EXE: merged-engine mass compile (**152/152 green** Offset oracles for every stage: BT411 CLASSMAP.md, decomp-reference.md §3, and the port
— the ENTIRE surviving engine compiles), BT TUs (11/11), tlib libs (munga 1.25MB / mungal4 headers' static_assert-locked members.
with the prebuilt-1995 objs / bt / btl4), then the authentic tlink32 link rooted by a probe
main (build scaffold). First true link run: **52 unresolved externals** ## Toolchain — IN HAND (2026-07-19)
(`UNRESOLVED-LEDGER.txt`) = the measured remaining gap. Kill-lists: l4gauge.cpp back-date **Borland C++ 4.52**, archived at `../../BORLAND/BC45/`, chosen by byte-match: the fleet's own
(14 widget statics), the missing-engine-body back-date wave (~24: rotation, player, team, `CODE/RP/CW32.LIB` is identical to 4.52's (and not 4.5's). BCC32/TLINK32/TLIB/MAKE run natively
l4app, explode, dropzone, terrain, cultural, subsystm-statics, netclient...), the prebuilt on Win11. The shipped `BTL4OPT.EXE` recipe is `CODE/BT/OPT.MAK` (plain `bcc32`,
RANDOM.obj fold, and the staged game-TU statics blocks (MECH.CPP et al. — each TU file opens `-DLBE4;DEBUG_LEVEL=0;DEBUG_STREAM=cout`, `-5 -a4 -ff -k- -V -Jg -x- -RT-` + the full `-O` set,
with its binary-evidenced Derivation/SharedData statics and grows into the full body). PCH `btopt.csm`; link `-Tpe -ax` with `c0x32.obj + dpmi32.lib + cw32.lib` = Borland PowerPack
Link-lib arbitration: SOS = SOSDBXC+SOSMBXC (the 32-bit Borland-flat variants; SOSMW*=16-bit), DPMI32, not Phar Lap TNT). Compile verification of reconstructed TUs is therefore possible
WATTCP excluded (it belongs to the 16-bit NetNub TSR — the game talks to it via shared file-by-file; the current blocker for full closure is the 1995 engine header gap (`vdata.hpp`
memory), filestrm = the RP-era pair (BT-tree pair is post-4.10 drift; override layer). first — only the drifted WinTesla `VDATA.h` survives, in BT412/engine). Include order for
builds: `CODE/BT/*` over `CODE/RP/*`, `-DNO_PRECOMPILED_HEADERS` until the mech-family headers
are reconstructed. Remaining gap: TASM32 (JOYSTICK.ASM only).
## Link campaign (build410, 2026-07-19)
`source410/build410.sh` assembles BTL4OPT.EXE: merged-engine mass compile (**152/152 green**
— the ENTIRE surviving engine compiles), BT TUs (11/11), tlib libs (munga 1.25MB / mungal4
with the prebuilt-1995 objs / bt / btl4), then the authentic tlink32 link rooted by a probe
main (build scaffold). First true link run: **52 unresolved externals**
(`UNRESOLVED-LEDGER.txt`) = the measured remaining gap. Kill-lists: l4gauge.cpp back-date
(14 widget statics), the missing-engine-body back-date wave (~24: rotation, player, team,
l4app, explode, dropzone, terrain, cultural, subsystm-statics, netclient...), the prebuilt
RANDOM.obj fold, and the staged game-TU statics blocks (MECH.CPP et al. — each TU file opens
with its binary-evidenced Derivation/SharedData statics and grows into the full body).
Link-lib arbitration: SOS = SOSDBXC+SOSMBXC (the 32-bit Borland-flat variants; SOSMW*=16-bit),
WATTCP excluded (it belongs to the 16-bit NetNub TSR — the game talks to it via shared
memory), filestrm = the RP-era pair (BT-tree pair is post-4.10 drift; override layer).