Preservation + Godot remaster of Havoc (Reality Bytes, 1995): .FF asset extraction, format docs, and reverse-engineering toolkit.
Find a file
pyr0ball 27174a1c79 feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection)
Diagnosed and fixed the crash that killed HAVOC_NOCD.EXE ~1s after launch
(dgVoodoo window appears black, then the process exits). It was not a clean
exit: an ACCESS_VIOLATION (null-pointer read at VA 0x444E6A) during init.

Root cause is a copy-protection check in the WORLDS\ data-file loader
(0x42a480). It opens each file (GRAFIX/LAND/MAP/STUF) from both a local
"WORLDS\<name>" path and a CD-drive path (HAVOC.INI [SETUP] DRIVE=D:\), and
returns a valid stream only when the local open fails and the CD-drive open
succeeds. With files present locally and no D: drive it returned NULL, and the
GRAFIX loader (0x444db0) dereferenced that NULL without checking.

Fix: 14-byte patch at FO 0x29a2b rewrites the return decision to hand back the
successfully-opened local object. The game now boots to the title screen
("HAVOC(tm) by Reality Bytes"), responsive, main loop running.

- docs/PATCHES.md: full patch table (28 patches) + crash write-up
- tools/: RE + patching scripts (r2pipe disasm, minidump parser, ctypes
  debugger, PE/IAT/import analysis)
- run_probe.bat / run_and_log.bat: reliable native launch for repro
- .gitignore: exclude CD images, Ghidra install/project, dgVoodoo, *.ini

Diagnosed via WER minidumps (%LOCALAPPDATA%\CrashDumps) parsed in pure Python
(no cdb/windbg available).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TN4Ytn3gdWRonNmHpisWQv
2026-07-03 09:29:59 -07:00
docs feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
tools feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
.gitignore feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
README.md Initial commit: Havoc preservation toolkit + format docs 2026-06-28 23:33:30 -07:00
run_and_log.bat feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00
run_probe.bat feat: NOCD patch boots Havoc on modern Windows (defeats CD copy protection) 2026-07-03 09:29:59 -07:00

Havoc — Preservation & Godot Remaster

Reverse-engineering, asset-extraction, and Godot remaster of Havoc (Reality Bytes, Inc., 1995) — a first-person vehicular-combat shooter for Windows 95/98.

Havoc renders a software-rasterized 3D world (textured terrain, low-poly enemy/pickup models, drivable and flyable vehicles, dithered 8-bit color) into a DirectDraw framebuffer, framed by an elaborate 2D cockpit HUD (mirrors, radar, gauges, weapon icons). Biomes include desert, snow/ice, lava, and ocean.

The original 32-bit executable (DirectDraw + DirectSound, no Direct3D — the 3D is all software) no longer runs reliably on modern Windows (legacy DirectDraw + a 16-bit installer/DirectX setup path). Rather than only emulate it, this project extracts the original data into open formats and rebuilds the game in Godot as a quality-of-life remaster.

Legal: Havoc is 30-year-old abandonware. This repository contains only original reverse-engineering code and documentation. It does not redistribute the game's executables, DLLs, or data files (see .gitignore). You must supply your own copy of the game data to run the tools.

Status

  • Identified binaries: HAVOC.EXE/LAUNCHER.EXE/SETUP.EXE are 32-bit PE (i386), DirectDraw + DirectSound, not 16-bit/DOS.
  • Cracked the .FF ("FlashFile") archive format — see docs/FORMATS.md.
  • Extracted MUSIC.FF: 97 WAV segments + 17 playlist-sequenced songs (verified correct).
  • FL Studio pack: per-song MIDI + sample mapping (tools/ff_extract.py --fl).
  • ogg/mp3 conversion (--convert, needs ffmpeg).
  • Crack graphics formats: GRAFIX*.DAT, LAND*.DAT, MAP*.MAP, STUF*.DAT.
  • Decompile HAVOC.EXE (Ghidra) to recover game logic.
  • Godot remaster project (widescreen, higher-res, rebindable input).

Tools

tools/ff_extract.py — extract any .FF archive.

python tools/ff_extract.py MUSIC.FF -o out_music --songs          # raw entries + assembled songs
python tools/ff_extract.py MUSIC.FF -o out_music --songs --convert ogg
python tools/ff_extract.py MUSIC.FF -o Havoc_MUSIC_FLStudio --fl  # FL Studio samples + MIDI

Layout

tools/        reverse-engineering & extraction scripts (tracked)
docs/         format documentation (tracked)
godot/        Godot remaster project (tracked, WIP)
<game files>  original data — supplied by you, gitignored