Reverse engineering analysis and Godot 4 + C# rebuild of BattleTech: The Crescent Hawk's Inception, the 1988 MS-DOS game by Infocom.
├── docs/ # RE documentation & findings
│ ├── CONTEXT.md # Master context (1050+ lines)
│ ├── TECHNICAL_ANALYSIS.md # Comprehensive technical analysis (3211 lines)
│ ├── MEMORY_MAP.md # Full memory map (603 lines)
│ ├── ADDRESS_REFERENCE.md # Address reference (1035 lines)
│ ├── BLD_BYTECODE.md # BLD bytecode specification (342 lines)
│ ├── WORLD_MAP_FINDINGS.md # World map analysis (321 lines)
│ ├── REBUILD_PLAN.md # Godot rebuild plan
│ ├── REBUILD_ROADMAP.md # Rebuild roadmap
│ └── STORY_TEXT.txt # Extracted full story text
│
├── tools/ # Python analysis tools
│ ├── bld/ # BLD script tools (decoder, converter, viewer)
│ ├── assets/ # Asset extraction & rendering tools
│ └── analysis/ # RE analysis tools
│
├── reko/ # Reko decompiler output
│ ├── UNBTECH.exe.c # Full C decompilation (2MB)
│ ├── UNBTECH.exe.h # Header with struct definitions
│ ├── UNBTECH_all.asm # Combined disassembly (60K lines)
│ └── segments/ # Per-segment .c/.asm/.dis files
│
├── asm/ # Assembly analysis
│ └── discoveries.asm # Manual analysis notes
│
├── json/ # BLD → JSON conversions (26 files)
│
├── spice86/ # Spice86 emulation outputs
│
├── BattleTechCHI/ # Godot 4 + C# rebuild
│
├── original/ # Original game assets (local only, not uploaded)
│ ├── bld/ cmp/ icn/ mtp/ anm/ saves/ exe/
│
├── extracted_assets/ # Rendered PPM/PNG from game assets
└── Assets/ # Converted sprite/tile sheets
- BLD bytecode fully reverse-engineered: 26 opcodes, substitution cipher, 4-layer interpreter
- World map decoded: 64×64 tile grid, 93 tile types, fog of war system
- Combat system documented: 2D6 to-hit, LoS ray-casting, AI targeting, heat/ammo
- Story fully extracted: All 26 BLD scripts decoded with narrative markers
- Memory map complete: 100+ addresses mapped across all segments
The rebuild is in Phase 6 (ANM integration + combat ANM). ~8,000 lines C# across 45+ scripts in BattleTechCHI/Scripts/.
- ✅ Phase 0–1: Core engine, data models, asset loaders, game loop, partial save/load
- ✅ Phase 2: Tile rendering, world map viewport, local maps, LocationMapper, fog of war
- ✅ Phase 3: BLD interpreter (26 opcodes), cipher decoder, 47-case dispatcher (all real impl.), dialogue, ShopScreen
- ✅ Phase 4: Combat — init, turn order, movement, LoS, to-hit (2D6), damage, AI, heat/ammo, fog, HUD, encounters
- ✅ Phase 5: AnmPlayer + ViewportManager + BldAnmMap, runtime ANM decompress
- ✅ Phase 6: Combat mech panel ANM (MechPortrait), map cursor ANM, StorySlots 16→8 fix, emulator A: drive fix
- ⬜ Phase 7: End-to-end playtesting, polish (VFX, BTSTATS, sound, w4FBC refactor, TileMapLayer migration)
Spice86 emulator with 19 BattleTech-specific MCP tools for runtime game state introspection:
- Read/write game state (state array, story slots, unit slots, cursor, credits, flags)
- Read combat grids, unit positions, fog of war
- Inject keyboard input (script the game through menus)
- Read CPU registers and memory
# Start emulator with MCP server on port 8081
dotnet exec bin/Debug/net10.0/UNBATTLETECH.dll \
--Exe "/path/to/BTECH.EXE" \
--CDrive "/path/to/game/" \
--HeadlessMode Minimal --McpHttpPort 8081 --NoGui
# Read game state
curl -s -X POST http://localhost:8081/mcp/ \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"bt_get_state","arguments":{}}}'# Convert BLD → JSON and back
python3 tools/bld/bld_json_converter.py to-json original/bld/
# Extract full story text
python3 tools/bld/extract_story.py
# Decode all BLD files with opcode analysis
python3 tools/bld/decode_bld.py
# ASCII terminal viewer for maps
python3 tools/bld/ascii_viewer.py
# Render CMP assets to PPM
python3 tools/assets/extract_assets.py
# Build C# rebuild
cd BattleTechCHI && dotnet build
# Build emulator
dotnet build UNBATTLETECH.csprojThis repository contains no original game assets (BLD, CMP, EXE, etc.). Only reverse engineering analysis, documentation, and original source code for a clean-room rebuild are included. The original game assets remain in original/ for local development only (gitignored).