Richard ZinkandClaude Opus 5.5 2dba65be8b Soundtrack: XM composer script and 8 generated chiptune modules
tools/compose_music.py synthesises chip instruments and writes FastTracker 2 XM files
(editable in MilkyTracker). The title leitmotif runs through all pieces: title,
three build tracks, two battle tracks, victory and defeat jingles.
Validated with libopenmpt; instrument tuning checked (A4 = 440 Hz).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 05:57:55 +01:00

DungeonCraft

An original dungeon building & defence game that runs in the browser (Rust + macroquad, compiled to WebAssembly).

Dig out your underground realm, claim the portal to attract creatures, keep them fed, rested and paid, fend off endless hero waves that adapt to your army – and finally destroy the Hero Gate.

  • 3D isometric view with a freely rotatable and tiltable camera
  • Procedural pixel art, irregular cave walls, flickering torch light
  • CP437 text-mode style interface with the DINOBYTE bitmap font
  • English and German (language files in lang/, easy to extend)

See DESIGN.md for all design decisions and CREDITS.md for third-party assets.

Running

The easiest way is Docker; the image builds the WASM file and serves it with nginx:

docker compose up -d --build
# open http://localhost:18093

Building without Docker

Requirements: Rust with the wasm32-unknown-unknown target.

rustup target add wasm32-unknown-unknown
cargo build --release --target wasm32-unknown-unknown
cp target/wasm32-unknown-unknown/release/dungeoncraft.wasm www/
cp ~/.cargo/registry/src/*/macroquad-*/js/mq_js_bundle.js www/
python3 -m http.server 8080 -d www   # open http://localhost:8080

Testing the game logic

The game logic (src/game.rs, src/map.rs) does not depend on macroquad. The tests (a headless simulation of whole games and a savegame round trip) run natively without the audio feature:

cargo test --release --no-default-features

Controls

Input Action
Esc Pause menu (save, load, settings)
Left click / drag Use the active tool (dig and rooms: drag a rectangle)
Right click Drop a unit from your hand
Right drag, WASD, arrows, screen edge Move the camera
Middle drag, Q/E, R/F Rotate / tilt the camera
Mouse wheel Zoom
1–9, 0, X, V Select a tool or spell
P / Space Pause
M, +/- Sound on/off, volume
G Tile outlines on/off
H Help

All keys except Esc and the arrow keys can be changed in Settings → Keys.

Savegames

Use Save Game in the pause menu to download a .dcsave file (JSON). Load it again via Load Game or by dropping the file onto the game window. The game also autosaves into the browser every two minutes and when the tab is closed; Continue on the title screen resumes from there.

Adding a language

  1. Copy lang/en.lang to lang/<code>.lang and translate the texts (placeholders {0}, {1} stay as they are).
  2. Add the file to SOURCES in src/i18n.rs.
  3. Note: the DINOBYTE font only covers the CP437 character set.
S
Description
No description provided
Readme MIT
351 MiB
0 Stars 1 Watchers 0 Forks
2026-11-07 13:37:02 +01:00
Languages
Rust 48.2%
Logos 46.2%
Python 5%
JavaScript 0.4%
Shell 0.1%