Files
BT412/README.md
T
arcattackandClaude Opus 4.8 7b7d465e5e Initial commit: bt411 -- standalone Windows BattleTech (Tesla 4.10 port)
Clean, self-contained extraction of the BattleTech-specific work from the
reverse-engineering workspace -- engine + game + content + build, with nothing
from Red Planet or the raw archive dumps. Builds green (Win32) and runs the
single-player drive->animate->target->fire->damage->destroy loop out of the box.

Layout:
  engine/   MUNGA + MUNGA_L4 shared 2007 engine, carrying our BT render/loader
            work (bgfload/L4D3D/L4VIDEO: BSL bit-slice decode, LOD/ground/shadow
            models) + image codec; the minimal rp/ headers the audio HAL needs
  game/     reconstructed BT logic + surviving-original BT source + fwd shims
            + WinMain launcher
  content/  full runtime tree (BTL4.RES, VIDEO/, GAUGE/, AUDIO/, eggs, BTDPL.INI)
  docs/     format specs + reconstruction ledgers
  reference/ raw Ghidra pseudocode (recon source-of-truth) + decomp exporter
  tools/    MP console emulator + map/resource scanners

One top-level CMake builds munga_engine lib + bt410_l4 game lib + btl4.exe.
All paths relativized (186 fwd shims + ~437 CMake abs paths -> repo-relative);
DXSDK is the one external, overridable via -DDXSDK. Verified: builds to a
byte-identical 2.27MB exe and runs combat (TARGET DESTROYED, 0 crashes) against
the bundled content.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 21:03:40 -05:00

107 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BattleTech 4.11 (bt411)
A standalone Windows port of **Virtual World Entertainment's arcade *BattleTech*** (Tesla
platform, release 4.10, ~199596), reconstructed on the shared **RP411 Windows engine**. The
game boots, renders, and runs a single-player **drive → animate → target → fire → damage →
destroy** loop across all 8 maps, with two-instance multiplayer entity replication working.
This repo is a clean, self-contained extraction of the BattleTech-specific work from the larger
reverse-engineering workspace — engine + game + content + build, with nothing from Red Planet or
the raw archive dumps. It builds and runs out of the box.
> **License:** the game content (`content/`) and the original binary are proprietary to Virtual
> World / the pod owner. This repository is **private**; do not redistribute.
---
## Layout
```
CMakeLists.txt one build: munga_engine lib + bt410_l4 game lib + btl4.exe
engine/
MUNGA/ shared 2007 sim/render engine (149 .cpp + headers)
MUNGA_L4/ Win32/D3D9 HAL + renderer + asset loaders (43 .cpp), incl.
our BT work: bgfload / L4D3D / L4VIDEO + the image codec
shim/ minimal ATL shim (USES_CONVERSION/W2A)
lib/ OpenAL32 / libsndfile import libs + runtime DLLs
game/
reconstructed/ the reconstructed BT game logic (mech, subsystems, HUD, app)
original/BT,BT_L4 surviving original BT source + all BT headers
fwd/ header shims forwarding <NAME.hpp> -> the engine's NAME.h
btl4main.cpp WinMain launcher / entry point
content/ runtime data: BTL4.RES, VIDEO/, GAUGE/, AUDIO/, *.EGG, BTDPL.INI
docs/ format specs (BGF, assets) + reconstruction ledgers
reference/
decomp/ raw Ghidra pseudocode — source-of-truth for ongoing recon
ghidra_scripts/ the headless decomp exporter
tools/ btconsole.py (MP console emulator), map/resource scanners
run/ run.cmd helper
CLAUDE.md full project context / progressive knowledge base
```
## Prerequisites
- **Visual Studio 2019 BuildTools** (MSVC v142, x86). The Community install on the original dev
box was broken, hence the explicit BuildTools instance in the configure line below; adjust to
your install.
- **CMake ≥ 3.20**.
- **Legacy DirectX SDK (June 2010)** — the engine uses `d3dx9`/`dinput`/`dxerr`, removed from the
modern Windows SDK. Default path `C:/Program Files (x86)/Microsoft DirectX SDK (June 2010)`;
override with `-DDXSDK=<path>`. (The installer may throw a harmless **S1023** error — dismiss it;
the SDK headers/libs install before the failing redist step.)
OpenAL/libsndfile import libs + DLLs are vendored under `engine/lib/`; the DLLs are copied next to
the exe automatically at build time.
## Build (32-bit / Win32)
```
cmake -S . -B build -G "Visual Studio 16 2019" -A Win32 ^
-DCMAKE_GENERATOR_INSTANCE="C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools"
cmake --build build --config Debug
```
Must be **Win32** — the DirectX SDK link libs are `Lib/x86`. The link uses `/FORCE`: the 1995
headers define free functions/globals without `inline`/`extern`, so identical symbols appear in
many translation units (~124 `LNK2005`); `/FORCE:MULTIPLE` keeps the first. `UNRESOLVED` tolerates
a dead offline-tool factory in `mech3.cpp` that is never called at runtime. (Cleanup task: move
those definitions to single TUs + neutralize the dead factory, then drop `/FORCE`.)
## Run
```
run\run.cmd REM boots DEV.EGG (grass / day)
run\run.cmd DBASE.EGG REM any egg in content/
```
The working directory **must** be `content/` (the engine resolves `BTL4.RES`, `VIDEO\`,
`BTDPL.INI`, and eggs relative to cwd); `run.cmd` handles that. Maps available in `BTL4.RES`:
`cavern grass rav polar3 polar4 arena1 arena2 dbase` — switch via a copied egg's `map=` field.
### Useful env-var flags (default OFF unless noted)
The authentic stack (gait, collision, real controls) is **default-on**; set `=0` to fall back.
Debug/harness flags: `BT_FORCE_THROTTLE=1` (auto-walk), `BT_SPAWN_ENEMY=1` (spawn a target dummy),
`BT_FORCE_FIRE=1` (auto-fire), `BT_HEAPCHECK=1` (whole-heap validation — slow), `BT_BSL=0` (legacy
texture decode), `BT_LOG=<file>`. Interactive: **WASD** drive, **Space/Ctrl** fire, **X** all-stop.
See `CLAUDE.md` for the complete list and the reconstruction history.
## Multiplayer (two instances, one box)
```
instance A: btl4.exe -egg MP.EGG -net 1501 (BT_LOG=mp_a.log)
instance B: btl4.exe -net 1601 (BT_LOG=mp_b.log)
console: python tools/btconsole.py MP.EGG 127.0.0.1:1501 127.0.0.1:1601
```
`-net <port>` enables networked mode; the console emulator delivers the mission egg and the launch
command. Entity + movement replication works; cross-pod combat is in progress.
## Status & continuing the work
The engine, renderer, audio, HAL, build, locomotion, collision, damage, and render fidelity are
done; per-subsystem reconstruction (gyro integrator, projectile/missile weapons) and MP combat are
the active fronts. `docs/` holds the format specs and reconstruction ledgers; `reference/decomp/`
holds the raw pseudocode that every reconstruction is verified against. `CLAUDE.md` is the durable,
progressive project context — read it first.