WORLDS/GRAFIX0N.DAT is a big-endian (Mac-origin) tileset: an 8-byte header (file size at 0x08, entry count at 0x0c), 16-byte entry records (BE offset + id), and per-graphic blocks with a BE width/height/frames/id header followed by w*h*frames 8-bit palette indices. Confirmed against the in-game loader at 0x444db0 (16-byte record stride, BE->LE dword swap). GRAFIX00.DAT decodes to 29 graphics: explosion (id 901, 8 frames), smoke (id 911, 8 frames), and 27 single-frame 64x64 structure/wall textures (ids 8001-8028). tools/grafix_extract.py renders them to PNG with any 768-byte RGB palette (the XPAL palettes from INTRFACE.FF work). - tools/grafix_extract.py: parser + PNG renderer - docs/FORMATS.md: GRAFIX0N.DAT spec - README: status update Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TN4Ytn3gdWRonNmHpisWQv
52 lines
2.6 KiB
Markdown
52 lines
2.6 KiB
Markdown
# 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](https://godotengine.org/) 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
|
|
|
|
- [x] Identified binaries: `HAVOC.EXE`/`LAUNCHER.EXE`/`SETUP.EXE` are 32-bit PE (i386),
|
|
DirectDraw + DirectSound, **not** 16-bit/DOS.
|
|
- [x] Cracked the `.FF` ("FlashFile") archive format — see [docs/FORMATS.md](docs/FORMATS.md).
|
|
- [x] Extracted `MUSIC.FF`: 97 WAV segments + 17 playlist-sequenced songs (verified correct).
|
|
- [x] FL Studio pack: per-song MIDI + sample mapping (`tools/ff_extract.py --fl`).
|
|
- [ ] ogg/mp3 conversion (`--convert`, needs ffmpeg).
|
|
- [x] Boot `HAVOC.EXE` on Windows 11 (dgVoodoo2) — NOCD + copy-protection fix, see [docs/PATCHES.md](docs/PATCHES.md).
|
|
- [~] Crack graphics formats: `GRAFIX*.DAT` done ([docs/FORMATS.md](docs/FORMATS.md)); `LAND*.DAT`, `MAP*.MAP`, `STUF*.DAT` next.
|
|
- [ ] 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.
|
|
|
|
```sh
|
|
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
|
|
```
|