# DungeonCraft An original dungeon building & defence game that runs in the browser (Rust + [macroquad](https://github.com/not-fl3/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](DESIGN.md) for all design decisions and [CREDITS.md](CREDITS.md) for third-party assets. ## Running The easiest way is Docker; the image builds the WASM file and serves it with nginx: ```sh docker compose up -d --build # open http://localhost:18093 ``` ### Building without Docker Requirements: Rust with the `wasm32-unknown-unknown` target. ```sh 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 and contains a headless simulation test. ## Controls | Input | Action | |---|---| | 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 | ## Adding a language 1. Copy `lang/en.lang` to `lang/.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.