Skip to content

Latest commit

Β 

History

20,163 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Firestaff

Firestaff is a clean-room engine for the Dungeon Master games. It reads the original files you own, identifies each edition by its content hash and keeps that data separate from the program.

Firestaff can start verified original media for Dungeon Master, Chaos Strikes Back and Dungeon Master II: Skullkeep across their supported platforms. Coverage is deliberately conservative: a route is available only when the selected edition has a verified native handoff. Full campaign, save and visual parity remain active work, especially for Chaos Strikes Back, Nexus and Theron's Quest.

CI License: MIT

Firestaff logo

Current status

The table was last fully reviewed on 2026-09-12; the Theron's Quest row was updated on 2026-09-24. It reports what has been exercised with real media, not a claim of complete game parity.

Firestaff detects real media and exposes only paths with a verified handoff; it never borrows data from another edition to fill a gap. The detailed status is kept in project status. The published documentation is available at yeager.github.io/firestaff. The preservation status, reviewed 2026-08-12, separates source/disassembly evidence, real-media receipts and open routes.

Game Current scope
Dungeon Master PC DOS, Atari ST, Amiga and FM Towns startup and selected dungeon routes have real-media coverage. The PC 3.4 Hall of Champions candidate panel is rendered from authenticated C040/C026 assets. Further gameplay and visual parity work continues.
Chaos Strikes Back Amiga, Atari ST and FM Towns startup routes have real-media coverage. FM Towns uses its own authenticated entrance palette and MINI.DAT bootstrap state. Campaign, saves and presentation parity are still being completed.
Dungeon Master II: Skullkeep DOS, Amiga, FM Towns and Macintosh have real-media startup and selected runtime coverage. Amiga reaches its initial GDAT-backed M11 frame through the normal start menu with source movement covered. Broader input, save, native display/audio and dungeon-composition parity remain open per edition.
DM Nexus Saturn disc parsing and native MAPD title rendering work from the original CUE/BIN; later menu, HUD and dungeon presentation remain capture-gated.
Theron's Quest Authentic US and Japanese Track 02 media reach bounded native routes, and source-only loaders verify all seven dungeons in both regions. Full presentation, transitions, saves and gameplay remain evidence-gated.

Dungeon Master II: Skullkeep

DM2 has bounded native routes from four authenticated source families:

Edition Accepted source data Verified runtime scope
DOSBox / PC English GRAPHICS.DAT + DUNGEON.DAT; matching DOS saves are optional resume data New Game, active runtime, movement, pits, stairs, level transitions, creatures and spell handoff
Amiga English Original installer archive, read and verified in memory M12 β†’ SWSH/TITL β†’ GDAT New Game β†’ initial runtime frame and movement; receipt confirms real assets, zero core fallbacks and a visible frame
FM Towns Japanese Original HME-242 ZIP/disc image; non-Japanese text uses the built-in GDAT-keyed l10n bridge Title sequence, New Game, inventory, movement, level transitions and creatures
Macintosh English Authentic retail ZIP/HFS media New Game, active big-endian runtime, movement, stairs, level transitions and combat/creature handoff

The shared DM2 data root may contain all four editions. Firestaff resolves a selected version to its own source owner: the DOS data tree or symlink, Amiga installer, FM Towns disc archive, or Mac archive. Original archives are kept intact and archive members are read into bounded memory; Firestaff does not use a sibling edition as a fallback.

Language selection

Firestaff offers 20 interface languages: English, Swedish, German, French, Spanish, Italian, Portuguese, Dutch, Polish, Czech, Russian, Japanese, Korean, Simplified Chinese, Danish, Norwegian, Finnish, Hungarian, Turkish and Indonesian. Auto uses the system language when it is supported and otherwise uses English. A language chosen in the start menu or with --lang <code> takes precedence over Auto.

For the Japanese FM Towns edition of DM2, Firestaff keeps the original Towns disc as the only game-data owner. A built-in, GDAT-keyed bridge maps the disc's authenticated text records to canonical English gettext entries, so no PC-English GRAPHICS.DAT is required at runtime. The selected catalog then applies the chosen supported language, including Swedish. Catalog completeness is checked in CI; an unavailable or invalid catalog falls back to canonical English rather than to text from another edition. See translation status for the generated per-language coverage.

Focused real-media checks and their current boundaries are documented in TODO-dm2.md, DONE-dm2.md, DM2 platform variants and the DM2 FM Towns wiki guide.

Theron's Quest uses ordinary desktop controls in Firestaff: Up/W moves forward, Down/S moves backward, and Left/A and Right/D turn while held. Tab selects the next living member of the Soul Room party and G picks up a source-verified item in the facing cell. P drops that explicitly selected source item on the party square, and U uses a door in the facing cell. Keypad 8/2/4/6 provides the same four directions. Left and right mouse buttons are Button I and Button II; mouse motion only moves the normal pointer and never changes the selected object or jumps between controls. On touch screens, a short touch is Button I and a long touch is Button II.

Theron's Quest runtime status

The native Track 02 runtime can select co-located US or Japanese data explicitly with --theron-native us or --theron-native jp. Verified bounded routes include Japanese Rev. 1 title-to-Akutuba startup and US Continue from the authentic Akutuba-complete Backup RAM into dungeon 2, level 0, followed by three native movement inputs on a floor-only path. Source-only loaders also verify all seven dungeon sources in both regions; that is data coverage, not proof of the original game's transitions. Broader campaign progression, original T900 item placement/use, gameplay presentation, combat, audio and save parity remain open. README screenshots are Firestaff-rendered only; original-emulator captures are not presented as Firestaff output. See the platform status and capture handoff record for the evidence boundaries.

Chaos Strikes Back editions

Firestaff recognises original CSB editions by hash rather than by their folder names. The scanner currently covers the following families when the required matching data is present:

Original family What Firestaff does with it today
Amiga 3.1 and 3.5 Default CSB route when a verified native program handoff is available. Native startup, entrance, supported HUD and viewport material use the Amiga data path.
Atari ST 2.0 and 2.1 Native media uses its own animation, runtime, HUD and supported viewport-material routes.
FM Towns English and Japanese Native CD installations use their version-specific Towns packages for the supported title, Game and Utility routes.
PC-9801 Japanese 3.1 Not supported. The media is retained only as preservation reference and cannot select a data, startup, gameplay or input route.
X68000 Japanese 3.1 Not supported. The media is retained only as preservation reference and does not select a data, startup or gameplay route.

Recognition is deliberately separate from a playability claim. A recognised edition has passed the data gate; it does not imply that every screen, save format or gameplay path has reached parity. Firestaff keeps each edition on its own data path and never borrows files from another release to make a route appear to work.

CSBWin legacy saves

A complete original-named legacy CSBWin slot can resume with matching Atari ST 2.0/2.1 GRAPHICS.DAT and DUNGEON.DAT, from both the launcher and CLI:

firestaff --game csb --data-dir /path/to/CSB --save /path/to/CSBGAME2.DAT

The loader validates the full save body and source provenance before starting. It does not treat an arbitrary 512-byte header, renamed copy, compact roster, or DMSAVE.* file as a CSB resume. Extended Features/DSA saves remain fail-closed pending authenticated real-save coverage; its behavior is source-locked against CSBWin reference code and does not create a CSBWin game route.

Your game data

No game data is included. Keep your legally owned files in any directory and tell Firestaff where to look. It searches recursively and can inspect supported loose files, ZIP archives and disc-image containers without relying on filenames.

For the DAT-based games, GRAPHICS.DAT and DUNGEON.DAT must come from the same original edition. The launcher rejects incomplete or mismatched pairs. Optional title, animation, music and save files stay useful when they belong to the same edition, but they do not replace the required game data.

Suggested layout:

~/.firestaff/data/
  dm1/
  csb/
  dm2/
  nexus/
  theron/

Use the launcher setting or --data-dir to select another root, then inspect what was recognised:

firestaff --scan-data
firestaff --data-dir /path/to/games --scan-data

See game-data setup for the accepted media and the role of optional files for each game. The game-data format reference explains the verified containers, record families and save boundaries.

Firestaff never requires, searches for, reads, or bundles a BIOS, firmware, System Card, or external emulator. The only runtime input is your legally obtained game data in the local data directory; repository CI enforces this boundary.

The reproducible source dependency inventory is available as sbom/firestaff.spdx.json (SPDX 2.3). It excludes game media and every user-local input.

Included tools

Firestaff also ships desktop tools for working with files you own. They are optional and never run while playing a game.

Tool Purpose Documentation
Firestaff Artpack Studio Creates and validates Modern-mode artpacks without modifying original game media. Artpack Studio guide
Firestaff Dungeon Studio Views and edits supported dungeon data, with a built-in screenshot option for documentation and review. Dungeon Studio source
Firestaff Savegame Editor Inspects and edits supported save files; always keep a backup of an original save. Savegame Editor source

The desktop bundles build translations from their .po source catalogs during packaging. Generated .mo files are not stored in the source tree.

Platform status at a glance

Game Playable Verified runtime routes Data/preservation only Unsupported
DM1 β€” PC DOS, Atari ST, Amiga and FM Towns startup and selected dungeon routes PC-9801 preservation X68000
CSB β€” Atari ST, Amiga and FM Towns title/start-menu routes β€” PC-9801, X68000
DM2 β€” DOS, Amiga, FM Towns and Macintosh startup plus selected runtime routes Mac JP/FR preservation X68000
Nexus β€” Saturn disc/resource parsing and bounded native MAPD title presentation Saturn demo/fan translations β€”
Theron's Quest β€” PC Engine/TurboGrafx Japanese Rev. 1 title-to-Akutuba route; US authentic Continue to dungeon 2 level 0 with bounded movement; all seven US/JP dungeon sources load Original transitions, T900 item use/placement, broader campaign/save, presentation, combat and audio parity remain evidence-gated β€”

This table is a summary. Use Platform status for the exact feature boundary and Project status for cross-game evidence rules.

Running Firestaff

Build from source when a suitable package is not available:

git clone https://github.com/yeager/firestaff.git
cd firestaff
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build --parallel
./build/firestaff --scan-data

Firestaff requires CMake, a C11 compiler and SDL3. On macOS, SDL3 is available through Homebrew:

brew install sdl3

Useful command-line options:

firestaff --game <dm1|csb|dm2|nexus|theron>
          --data-dir <path>
          --platform <auto|pc|amiga|atari-st|fm-towns|pce|saturn>
          --dm1-fmtowns-ja
          --csb-fmtowns-ja
          --csb-utility-disk
          --scan-data
          --fullscreen
          --scale-mode <n>
          --no-music | --music
          --version

In the startup menu, Settings β†’ Audio β†’ Music Volume β†’ Off disables music while preserving sound effects and UI audio. --no-music applies the same choice for a direct CLI launch; --music explicitly re-enables it.

Nexus renders the admitted retail MAPD title sequence natively from the original CUE/BIN. The later menu, HUD and dungeon compositor remain deliberately fail-closed until their own real Saturn consumer evidence exists. Firestaff never delegates Nexus startup or gameplay to Mednafen (or another emulator); emulator tooling is used only outside the product to obtain and validate capture evidence.

--csb-fmtowns-ja explicitly selects the hash-verified Japanese FM Towns package and fails if that original package is not present; it never guesses from the host language or substitutes the English package.

--dm1-fmtowns-ja explicitly selects the hash-verified Japanese FM Towns edition and fails closed if its original members are unavailable; the default FM Towns selection remains the English edition.

Theron's Quest (PC Engine CD)

Place the original US Track 02 BIN in .firestaff/data/theron/ (or pass a data root that contains theron/TQUS02.bin). When both regions are installed, select either one without moving files:

./build/firestaff --theron-native us --data-dir "$HOME/.firestaff/data"
./build/firestaff --theron-native jp --data-dir "$HOME/.firestaff/data"

Hash-verified Track 02 members in external archives can also be read directly in memory when the installed host archive tool is explicitly enabled:

./build/firestaff --theron-native jp \
  --enable-external-archive-tools \
  --data-dir "$HOME/.firestaff/data/theron"

When both a loose regional BIN and an archive member are present, the loose BIN is preferred. Archive-only Japanese 7z startup is covered by the theron_v1_jp_7z_direct_boot real-media test when that corpus is installed.

When a complete CUE is present, native startup may bind matching original Track 01 CDDA. A loose Track 02 never borrows audio from an unrelated file.

The title accepts Enter, followed by the stage and Soul Room selections. The Japanese Rev 1 CUE then reaches the bounded native Akutuba runtime through hash-verified Track 02 records. For a headless, reproducible CLI receipt, use:

SDL_VIDEODRIVER=dummy SDL_AUDIODRIVER=dummy ./build/firestaff \
  --game theron --data-dir "$HOME/.firestaff/data/theron" --boot-probe \
  --script 'enter,enter,action' \
  --boot-probe-expect-phase theron-runtime --boot-probe-expect-runtime \
  --boot-probe-expect-level-loaded 1 --boot-probe-expect-party 1,0,0 \
  --boot-probe-expect-startup-active 0

This confirms the native source-backed runtime route, not a recovered PC Engine CD-runtime semantic handoff. Uncaptured creature AI, combat, generator, sound-effect and text-control semantics remain unavailable rather than being replaced with host behavior. --csb-utility-disk opens the separately preserved FM Towns C06 Utility Disk after the normal verified CSB F31 boot; it implies --game csb --platform fm-towns and fails closed if that package is unavailable. The start menu also has a dedicated CSB Utility Disk (FM Towns) entry. This is distinct from the Atari R1 Hint Oracle (--csb-hint-oracle) and never substitutes its data or UI. The Hint Oracle needs --data-dir <root> containing the verified Atari R1 HCSB.HTC, HCSB.DAT and native MINI.DAT; those files may be loose or inside a supported archive. --save <MINI.DAT> is optional and selects an explicit native save instead of the verified R1 MINI.DAT found in that root. The initial Japanese C06 Utility chooser additionally requires the user's authorised 256 KiB FMT_FNT.ROM; set FIRESTAFF_FMTOWNS_FONT_ROM to that file before launch. Firestaff uses the ROM only for its original Shift-JIS glyphs and keeps the route closed if the file is missing or malformed; it never substitutes a system font or installs the ROM into game data.

Run the local test suite with:

ctest --test-dir build --output-on-failure

Some tests need original game data and skip when that corpus is not present.

How the project is built

The launcher selects a game and its verified data. The game layer then owns rendering, input and runtime state, while the data layer reads the original files and models the dungeon.

Launcher
  └─ Game runtime
       └─ Dungeon and data layer
            └─ Original game files supplied by the player

Gameplay work is checked against primary references. DM1 and CSB use ReDMCSB, with CSBWin and documented original formats as additional references. DM2 uses skproject; Nexus and Theron's Quest use their respective platform analysis and original media.

The documentation index links the user guides, data notes and technical references. The project status is the place to check the current boundary before relying on a development route.

Legal

Firestaff is a clean-room engine reimplementation. You need game files from copies you legally own; the repository contains no copyrighted game data.

Dungeon Master, Chaos Strikes Back and Dungeon Master II are trademarks of FTL Games. DM Nexus is a trademark of Victor Interactive Software. Theron's Quest is a trademark of Working Designs and Victor Interactive Software.

License

MIT. See LICENSE.

About

πŸ”₯ Source-faithful Dungeon Master engine β€” DM1, CSB, DM2, DM Nexus and Theron's Quest on modern hardware. macOS, Windows, Linux, Steam Deck.

Topics

Resources

Contributing

Security policy

Stars

8 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Contributors

Languages