Files
TeslaRel410/restoration/source410/README.md
T
CydandClaude Fable 5 d9b34ddc63 source410: THE WHOLE 4.10 TREE COMPILES - 11/11 under the fleet's BC++ 4.52
All 10 surviving original TUs plus the reconstructed BTL4APP.CPP pilot build
clean with the authentic OPT.MAK flags (compile410.sh --sweep). First time
the 4.10 BattleTech source has compiled since 1996.

- layout_probe.cpp: the period compiler measures 1995 layouts from the
  surviving headers; validated 3/3 against binary alloc sizes (BTMission
  0xFC, BTL4ModeManager 0xC, BTRegistry 0x10). Base boundary: Simulation
  0xD0 / Entity 0x1C4 / Mover 0x300 / JointedMover 0x328 => Mech-own region
  0x328-0x854 (MECH-LAYOUT.md staging worksheet).
- 13 staged headers close the family ([T3] reserved[]-parked layouts;
  interfaces PROVEN by the surviving consumers): MECH, MECHSUB, HEAT,
  POWERSUB, MECHWEAP, EMITTER, MECHMPPR, BTPLAYER (BTPlayer__MakeMessage =
  Player's 8 args + roleName/teamName [T1 via BTREG]), PROJTILE, MISSILE,
  BTL4MPPR, BTL4VID + the round-2 BTCNSL/BTSCNRL.
- compile410.sh: PCH gate retired (bt.hpp/mungal4.hpp full include sets),
  DPL SDK roots on the include line.
- BTL4APP.CPP: appmgr include + GetApplicationManager()->GetFrameRate() +
  ResourceDescription:: scoping; Fail() held at its recorded line 400.
- Evidence ledgers: STAGED-HEADERS.NOTES.md, MECH-LAYOUT.md, BACKFILLS,
  BTCNSL (binary-recovered console wire IDs), BTSCNRL.

Remaining for a linkable BTL4OPT: the ~40 missing TU bodies (917-function
manifest) - the header skeleton they grow into now exists and compiles.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 07:58:26 -05:00

74 lines
5.4 KiB
Markdown

# source410 — literal reconstruction of the missing BT 4.10 game source
**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
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
1995 MUNGA/MUNGA_L4 engine headers that DID survive.
## Ground rules
1. **Never copy a reconstructed file into `CODE/`** — the assembled buildable tree
(originals + reconstructions) is produced by a script into a build directory, so
provenance stays unambiguous file-by-file.
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
judgment call with its tier ([T1] decomp-proven … [T4] style guess). The `.CPP` itself
stays clean 1995 style — no modern annotations inside.
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
their recorded lines. A file that can't meet its line constraints yet says so in the
sidecar.
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`.
## What drives the work
- 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`).
- 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;
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`,
`CODE/RP/MUNGA*/**` (the 1995 engine source itself).
## Status (2026-07-19)
**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
back-dating (donors: `C:\VWE\BT412\engine\MUNGA\*.h`).
| item | state |
|---|---|
| **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`) |
| 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 |
| 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) |
**Next work package — the mech-family, REVISED (round-3 finding, 2026-07-19):** the plan to
"reconstruct mech.hpp first" was the wrong order. A full read of the port's mech.hpp shows
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
declares "the remaining members up to sizeof==0x854" in its mech2-4 slices. A literal
MECH.HPP that precedes those TU reconstructions would be fiction. Corrected order:
1. **MECH.HPP is the CAPSTONE, grown incrementally** with each mech-family TU
reconstruction (mech.cpp → mech2-4 → subsystem TUs), starting as an interface +
known-ordered members with explicit `reserved[]` filler for unmapped regions
(sidecar-tracked), tightened as each TU pins its slice.
2. The dependent headers (`mechsub`, `mechmppr`, `btl4mppr`, `emitter`+`mechweap`,
`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
green as those land — BTREG last (it includes the whole game-header world).
Offset oracles for every stage: BT411 CLASSMAP.md, decomp-reference.md §3, and the port
headers' static_assert-locked members.
## Toolchain — IN HAND (2026-07-19)
**Borland C++ 4.52**, archived at `../../BORLAND/BC45/`, chosen by byte-match: the fleet's own
`CODE/RP/CW32.LIB` is identical to 4.52's (and not 4.5's). BCC32/TLINK32/TLIB/MAKE run natively
on Win11. The shipped `BTL4OPT.EXE` recipe is `CODE/BT/OPT.MAK` (plain `bcc32`,
`-DLBE4;DEBUG_LEVEL=0;DEBUG_STREAM=cout`, `-5 -a4 -ff -k- -V -Jg -x- -RT-` + the full `-O` set,
PCH `btopt.csm`; link `-Tpe -ax` with `c0x32.obj + dpmi32.lib + cw32.lib` = Borland PowerPack
DPMI32, not Phar Lap TNT). Compile verification of reconstructed TUs is therefore possible
file-by-file; the current blocker for full closure is the 1995 engine header gap (`vdata.hpp`
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).