Interim pod-like grouping ahead of the authentic ConfigureMappables/ ChooseButton mapper channels (decomp-anchored in open-questions): - Three fire channels like three pod buttons: gBTWeaponTrigger (lasers, key 1 or SPACE), gBTPPCTrigger (PPCs, key 2), gBTMissileTrigger (missiles, key 3 or CTRL). Keyboard only per user (mouse buttons removed). - EmitterSimulation picks its channel by classID (PPC 3028 vs Emitter 3016); BT_AUTOFIRE holds all three. - The BT_BEAM_LOG sampler modulus 30 aliased to ONE weapon under the new synchronized 5-beam volleys (5 | 30) -> 31 (coprime). Verified: all 5 energy weapons fire (31 samples each), aimed hits land, kill completes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.2 KiB
4.2 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=(bhk1/madcat/…). The code path is mech-agnostic (verified — Mad Cat booted + fought with zero code changes). [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.
Key Relationships
- Base: wintesla-port (the engine build recipe).
- Verify loop: reconstruction-method; env gates: decomp-reference §6.