The egg generator's known-good list was just bhk1+madcat (the only two ever exercised as egg vehicles); the operator roster therefore leaned on those. Swept every ModelList candidate as a solo egg vehicle: 18/18 boot a mission, spawn, and animate with no crash -- avatar, blkhawk, loki, owens, sunder, thor, vulture and all short variants (ava1, lok1/2, mad1/2, own1, snd1, thr1, vul1) join bhk1/madcat as first-class picks. eggmodel now lists the canonical 8 first for the operator dropdown. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.9 KiB
id, title, status, source_sections, related_topics, key_terms
| id | title | status | source_sections | related_topics | key_terms | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| build-and-run | Build / Run / Debug — recipe, repo layout, env gates | established | PROGRESS_LOG.md §10a, §10a-bis; README.md |
|
|
Build / Run / Debug
The one top-level CMakeLists.txt builds munga_engine (engine) + bt410_l4 (reconstructed BT
game lib) + btl4.exe. Full recipe + repo-layout map: docs/PROGRESS_LOG.md §10a / §10a-bis +
README.md. Env-gate table: decomp-reference §6.
Build (Win32 / VS2019 BuildTools — the DXSDK link libs are Lib/x86)
# configure once:
cmake -S C:\git\bt411 -B C:\git\bt411\build -G "Visual Studio 16 2019" -A Win32 \
-DCMAKE_GENERATOR_INSTANCE="C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools"
# build:
cmake --build C:\git\bt411\build --config Debug
- Links DXSDK d3d9/d3dx9/dinput8 + OpenAL/libsndfile (
engine/lib/). DXSDK June 2010 atC:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\(overridable-DDXSDK). [T2] - Linker uses
/FORCE— tolerates header-defined globals + the dead offline-factory unresolved externals in mech3.cpp (Mech::CreateSubsystemStreamreferencesvoid*-signatureCreateStreamedSubsystemfor every class; never called at runtime). ⚠/FORCEalso HIDES real unresolved symbols as runtime AVs — see reconstruction-gotchas §6. [T2] - Editing an
engine/file rebuilds the engine lib automatically (one project). A NEW member on aDPLRenderer/d3d_OBJECTclass needs the game objs that embed its layout recompiled — delete stale objs if layout-mismatch corruption appears. [T2] - ⚠ Kill the running exe before rebuilding (
taskkill //F //IM btl4.exe) or you get LNK1104.
Run
run\run.cmd [EGG] # default DEV.EGG; cd's to content\ and runs btl4.exe -egg <EGG>
- cwd MUST be
content\— the engine resolvesBTL4.RES,VIDEO\,BTDPL.INI, eggs relative to cwd (theloadTablesgotcha:L4VIDEO.cpp:849fopen("VIDEO\\REPLACEMATS.tbl")is relative + unchecked → fread on NULL if cwd is wrong). Logs tobtl4.logincontent\(orBT_LOG=<file>). [T2] - Interactive: WASD drive; weapon groups (keyboard, task #43) 1/Space = lasers, 2 =
PPCs, 3/Ctrl = missiles; X all-stop; V cockpit/chase view. Default egg =
DEV.EGG(map=grass, time=day). Swap mech via the egg'svehicle=— ALL 18 ModelList names CERTIFIED playable (2026-07-18 vehicle sweep): the canonical 8 (avatar, bhk1/blkhawk, loki, madcat, owens, sunder, thor, vulture) + the short variants (ava1, lok1/lok2, mad1/mad2, own1, snd1, thr1, vul1); each boots a solo mission, spawns, animates, no crash. The code path is mech-agnostic. [T2]
Debug (cdb x86)
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\cdb.exe". Pattern for a faulting stack (cwd
= content): -g -c ".lines;sxe av;g;kp 24;q" with BT_ASSERT_TO_DEBUGGER=1. Debug CRT fills fresh
heap 0xCDCDCDCD (uninit) + freed 0xFEEEFEEE — invaluable for "was this ever constructed?".
BT_HEAPCHECK=1 = whole-heap validation every alloc/free (O(n²) at mission load — SLOW). To attach
to a frozen abort dialog: cdb -p <pid> -c ".lines;~*kp 30;q". [T2]
Repo layout (bt411)
engine/MUNGA/+engine/MUNGA_L4/— the shared 2007 MUNGA engine + Win32/D3D9 HAL (carries our BT render/loader work: bgfload/L4D3D/L4VIDEO + the image codec).engine/shim/(ATL),engine/lib/(OpenAL/libsndfile),engine/rp/(RP headers the audio HAL includes).game/reconstructed/— the reconstructed BT source (the bulk).game/original/BT/+BT_L4/— surviving original BT.cpp+ all BT headers (the include path).game/fwd/— ~186 forwarding shims (#include <EXPLODE.hpp>→../../engine/MUNGA/<NAME>.h).game/btl4main.cpp— the WinMain launcher.content/— the runtime tree (BTL4.RES, VIDEO/, GAUGE/, AUDIO/, eggs, BTDPL.INI). Run cwd.reference/decomp/— the raw Ghidra pseudocode (all/part_*.c) — the source-of-truth.docs/— the detailed ledgers (incl.PROGRESS_LOG.md, the full pre-restructure CLAUDE.md).tools/— btconsole.py, disas2.py, map/res scanners.context/— this knowledge base.
Versioning (2026-07-18)
4.10 = the 1995 arcade release; 4.11 = this win32 reconstruction; dev builds =
4.11.<git commit count> + short hash, + suffix = built from an uncommitted tree
(e.g. 4.11.311 (980c9cd+)). Stamped every build by tools/btversion.cmake →
build/btversion.h (BT_VERSION_* macros); shown in the boot banner (btl4.log head) and
the window title. Ask a tester for their title bar / btl4.log head to identify a build.
Key Relationships
- Base: wintesla-port (the engine build recipe).
- Verify loop: reconstruction-method; env gates: decomp-reference §6.