Hellbender

June 17, 2026 · View on GitHub

A from-the-binary static recompilation of Hellbender (1996) — Microsoft & Terminal Reality's sequel to Fury³ — into native C.

Hellbender runs the same voxel-landscape engine as Fury³ and Terminal Velocity, so this project reuses the Fury³ recompiler / pcrecomp toolbox wholesale. It was picked as the next target precisely to prove the toolchain generalises — and so far it does: the Fury³ lifter recompiled all 5,262 of Hellbender's functions with zero changes.

Part of the pcrecomp family of PC static-recompilation projects (civ · dinopark · elfish · fury3 · gta · recoil · crimsonskies · black & white · …).


Status

🟡 Early bring-up — it lifts clean and compiles. The whole binary is recompiled to C and the import bridge layer is generated; the runtime port + link is next.

PhaseWhatState
0Reconnaissance — PE analysis, import map, engine ID✅ done
1Disassembly — IDA headless function recovery (5,221 funcs)✅ done
3Lift to C — 5,262 funcs → 513,668 lines, 0 errors, compiles to objects✅ done
4Shim layer — 507 import bridges generated; runtime port🟡 bridges done, runtime next
5Build & link — single exe⬜ next
6+Bring-up — CRT → WinMain → window → assets → render → flight⬜

The blow-by-blow Fury³ playbook (the nine lifter fixes, CRT shims, host heap, POD asset system, WndProc bridge, GDI present path) all lives upstream in pcrecomp and Fury³'s docs/PROGRESS.md — most of it carries over directly. See docs/PHASE0.md for the recon writeup.


Why Hellbender

It's the cheapest, highest-confidence reuse of the Fury³ toolchain. Binary evidence (identical "Unable to open sky.act" error string, shared .vox/.raw asset names like blast%d.raw and bigex%d.raw) confirms it's the same Terminal Reality voxel engine — just one generation evolved and rebuilt with a newer compiler.

HellbenderFury³ (for comparison)
FormatPE32, i386, Windows GUIsame
Size1.68 MB (+ 60 KB overlay)645 KB
Image base / entry0x00400000 / 0x004ADD300x00400000
LinkerMSVC 3.10 (1996)MSVC 2.55 (1995)
Imports507 across 11 DLLs160 / 5
Functions (IDA)5,2211,932

The bigger OS surface is mostly stub-able: Hellbender probes DirectDraw / WinG / DISPDIB for presentation and falls back to plain GDI/StretchBlt — the exact path Fury³ already drives — so the alternate backends, plus Smacker video (smackw32), registry config (ADVAPI32), and the comctl32 property-sheet settings dialog, are all stubbed. The hot path (software voxel renderer → 8-bit DIB → StretchBlt, the USER message loop, KERNEL file/mem, WINMM audio) is the same shape as Fury³.


Building

You provide your own legally-obtained HELLBEND.EXE (this repo ships no game code or assets). Generate the C, then build:

py -3.11 run_lift.py          # IDA bounds → src/recomp/gen/recomp_*.c
py -3.11 gen_imports.py       # → src/runtime/imports_gen.c  (507 bridges)
# (runtime port + CMake build: in progress)

License

Tooling and original code in this repo: MIT. Hellbender and all its assets are property of their respective owners; none are included here. This is a preservation and interoperability project.


Part of pcrecomp — "everything old is new again."