A clean-room, portable reimplementation of Harbinger (Silverback Entertainment, 2003), in the spirit of DevilutionX: modern Windows and Linux first, other platforms later, with full controller support.
This repository contains no game data. You need your own copy of the game;
the engine reads the original res0.sqh / res1.sqh archives.
- Step 1, mapping the game: first pass done. See docs/findings.md.
- Step 2, rebuilding the engine: under way. See docs/engine.md.
- What is left, in order: docs/plan.md.
What exists so far:
.sqharchive reader andsqhtool(list / extract).gimimage decoder andgim2tgaVfs(archive mounting and the game's path rules)- Parsers for interface layouts (
.itf), fonts (.fnt), resource indexes (.mgr), cursors (.acr) and the animated button items (.itm) - Audio:
.wavand.mp3decoding,Harbinger.ini,config.cfg harbinger, the game: the front end (main menu, character screen, Options, Load Game), drawn from the original files, with the menu music and sounds, and mouse, keyboard and gamepad input. Play opens the first level (floor, walls, objects, characters and music so far) to look around in, with the HUD and the inventory screen (CHAR, I or the pad's View button; D-pad / stick, A, X and B drive it on a controller, seedocs/inventory.md)- Level (
.chk), brush (.brs), gizmo (.giz), agent (.agt), animation (.anm) and cutscene script (.gsc) parsers, andlevelshot, which renders a whole level with its objects and characters to an image harbinger-viewer, an SDL3 sprite browser (keyboard or gamepad)- Gameplay in main so far: walking (mouse, keyboard or gamepad), gear and
melee and ranged combat, player health and death, enemy AI with melee and
ranged attacks, spawners, portals and umbilicals between levels (with
umbilical codes and the Level Selection screen), scripted cutscenes and
enemy moves, gizmo use (doors, consoles), chest loot, experience and levels
with the stats panel, the HUD and inventory screen with full controller
navigation, and NPCs, dialogue and the quest state behind them (
.dlg,.qst; the conversation screen with mouse, keys or pad, seedocs/dialogue.md)
harbinger --data "C:/Games/Harbinger"
Without --data, harbinger looks for Harbinger.ini next to itself and
then in the current folder, so on Windows you can copy harbinger.exe and
SDL3.dll into your Harbinger folder and double-click it. A ready-built
Windows zip (harbinger-windows) is attached to every CI run under the
repository's Actions tab. Your settings are kept in
%APPDATA%\harbinger-recomp\harbinger\ (config.cfg, and display.ini for the
window size or fullscreen and the 4:3 or 16:9 widescreen view, set in Options or with Alt+Enter); the game folder is only read.
cmake -S . -B build -G Ninja # fetches SDL3 if it isn't installed
cmake --build build
HARBINGER_DATA="/path/to/Harbinger" ctest --test-dir build --output-on-failure
Tests that need the original files are skipped when HARBINGER_DATA is unset.
Every format and behaviour is documented with its evidence and labelled
proven, likely or guessed (see docs/). Decompiler output is used only as a
reference and never copied into the source tree.