Files
dungeoncraft/README.md
T

244 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<p align="center">
<img src="docs/img/logo.png" width="128" alt="DungeonCraft - the soul core">
</p>
<h1 align="center">DungeonCraft</h1>
<p align="center"><b>Dig. Build. Defend. Conquer.</b><br>
An evil little dungeon game for the browser - in glorious pixels, in 3D, for free.</p>
<p align="center">
<img src="https://img.shields.io/badge/Rust-macroquad-b7410e?logo=rust&logoColor=white" alt="Rust">
<img src="https://img.shields.io/badge/WebAssembly-runs%20in%20the%20browser-654ff0?logo=webassembly&logoColor=white" alt="WebAssembly">
<img src="https://img.shields.io/badge/made%20with-Claude%20Code-d97757?logo=anthropic&logoColor=white" alt="Made with Claude Code">
<img src="https://img.shields.io/badge/made%20with-Qwen%20%2B%20OpenCode-7b6cf6" alt="Made with qwen3.8-flash-next-iq3xxs and Strata in OpenCode">
<img src="https://img.shields.io/badge/license-MIT-2ea44f" alt="MIT License">
<img src="https://img.shields.io/badge/languages-18-555" alt="18 languages">
</p>
<p align="center">
<a href="https://dungeon.familie-zink.org/"><b>▶ Play now - open it in your browser, or download the standalone file on the title screen</b></a><br>
<a href="BESTIARY.md">Bestiary</a> · <a href="INSTALL.md">Run your own server</a> · <a href="DESIGN.md">Design notes</a>
</p>
<p align="center">
<img src="docs/screenshots/title-battle.png" width="820" alt="The title screen: the endless battle between a lava river and an underground river">
</p>
---
## Wake up, master.
Yes, you. Don't look around, there's nobody else down here - just you, four imps and me, old **Crookfinger**.
A hundred years ago the Order of the Lightwatch smashed your soul core into shards and carried them off like trophies.
They polished their boots, sang songs about the sun and forgot about you. **Big mistake.**
Your heart still beats. Hear that? *Lub-dub. Lub-dub.* That's the sound of a grudge.
So pick up the pickaxe - well, point at the rock, the imps carry the pickaxes - and let's dig ourselves a realm.
Gold is in the walls, creatures are waiting behind the portal, and the knights... the knights are about to have
a very bad century.
<p align="center">
<img src="docs/screenshots/dungeon-heart.png" width="820" alt="The beating crystal heart, the demon gate and the dark towers">
<br><i>Your heart, master, held in chains on its obsidian throne. And the demon gate. I polished it myself.</i>
</p>
## What awaits you down here
**🕳 Dig your realm.** Mark the rock and your imps dig, claim the ground, carry gold, gems and diamonds to the
treasury and hang torches on the walls. Up to five imps help each other with one job. Every tile you claim is *yours*.
**🏰 Build rooms that bring the right guests.** A lair and a mushroom garden open the portal. A library brings
shadow mages, a training hall stone ogres, a temple the flame priestess, an aerie giant bats, gargoyles, arcane
owls - and maybe, one day, an **ember wyrm**. Fourteen rooms in total, from the forge to the sacrifice altar.
**👹 Keep them happy, or they leave.** Every creature wants a bed, food and its wage on payday - and it walks to the
treasury to fetch it. Each has a favourite room, and some of them simply cannot stand each other.
Put a mage next to an ogre and watch the fur fly. (Nobody dies. Probably.)
**⚔ Train them into legends.** Ten ranks from Recruit to Warlord, with chevrons, bars and stars - and gear that grows
with them, up to golden armour, a crown and a halo. With the level come abilities: the ogre learns to *stomp*, the mage
to *step through shadows*, the chainbreaker to spin like a *whirlwind*.
<p align="center">
<img src="docs/screenshots/bridge-battle.png" width="820" alt="A battle on a tongue of rock between lava and water">
<br><i>The knights brought a bridge. How thoughtful. Now they're bringing it back, one piece at a time.</i>
</p>
**🔥 Defend with towers, traps and doors.** Arrow spires, hellmouth cannons and dark spires on the walls. In the
**forge** your creatures build spike pits, poison vents, fire jets, stone rollers, alarm bells, rune mines and
frost glows - and doors of wood, iron and magic. Lock them, and nobody gets through. Not even the giant. Well. Not for a while.
**✨ Cast nasty spells.** Lightning, healing, seer's eye, cave-in, haste, stoneskin, gold rain, invisibility,
plague, quake and frost. Your scholars **research** them in the library - one discovery after another.
**🌫 Explore the dark.** Everything beyond your walls is black until your creatures go there.
Somewhere out there: a cave of neutral **dwarves** guarding gold and gems - and sometimes a chest with the plans
of a dwarven **rune forge tower**. Islands in lava rivers. Mana springs. Creatures in chains, waiting to be freed.
<p align="center">
<img src="docs/screenshots/forge-and-traps.png" width="400" alt="The forge with coglings and every kind of trap and door">
<img src="docs/screenshots/dark-rooms.png" width="400" alt="Prison, graveyard, arena, altar and guard posts">
<br><i>Left: the forge and its little coglings. Right: prison, graveyard, arena, guard posts and the altar. Cosy.</i>
</p>
**🌳 Up into the daylight.** Some maps reach the surface: grass, birds, sunshine - disgusting - and forests your
imps fell for **wood**, the second resource (down below only the odd giant mushroom gives some). Wood builds bridges
and wooden doors. Raise walls again where you dug too much, burn the knights' wooden bridges, pull up your
**drawbridges** when they come, freeze lava into obsidian to cross it - and roll **battering rams and catapults** out
of your forge to break a fortress in the forest.
<p align="center">
<img src="docs/screenshots/surface.png" width="400" alt="The cliff between the dungeon and a sunny forest above ground">
<img src="docs/screenshots/bridges.png" width="400" alt="A raised drawbridge, a lowered one, and obsidian on a lava river">
<br><i>Left: the world up there. Too bright. Right: a drawbridge up, a drawbridge down, and lava that thinks it is a floor.</i>
</p>
**🏆 Champions and trophies.** Every fifth wave a champion of the Order leads the knights - Sir Aldric, Dame
Seraphine, Brother Halvard or Captain Rothgar, each with a trick of his own and loot for whoever brings him down.
After every game a chart shows how it went, and 64 achievements wait - some of them secret, all of them petty.
**👑 Other masters want your realm, too.** Mossgrim the Mouldy (green, smells like a wet cellar) and Lady Nightwell
(blue, writes threatening letters on scented paper) dig their own dungeons in free play and in the campaign.
And the humans attack *everybody*. Let them bite each other first.
**🎓 New down here?** The *Tutorial* in the title menu: Crookfinger shows you the ropes, one step at a time.
**📜 A campaign of thirty missions.** Take back the shards of your soul core - from the first little outpost by the
border brook to the citadel of Grand Master Valerian Brightshield. Rivers, fortresses, treasure islands, sealed
caves, rival masters, and me, telling you the story. With tea.
<p align="center">
<img src="docs/screenshots/dwarf-cave.png" width="400" alt="A dwarf cave with a rune chest">
<img src="docs/screenshots/fog-of-war.png" width="400" alt="The start of a game in the fog of war">
<br><i>A dwarf cave, master. Nice dwarves. Don't go too close. - And this is where every game begins: in the dark.</i>
</p>
<p align="center">
<img src="docs/screenshots/lava-light.png" width="820" alt="Lava lights up the dungeon, torches on stands in a big hall">
<br><i>Lava glows ten tiles wide, master, and my imps put torches on stands where the walls are too far away.</i>
</p>
## Build your own campaigns
> *You want to torment heroes your own way? Fine. The* **campaign editor** *is right in the title menu - in the same
> graphics as the game, no tools needed.*
<p align="center">
<img src="docs/screenshots/editor-campaign.png" width="400" alt="The campaign graph: missions as cards, linked by next missions and branches">
<img src="docs/screenshots/editor-map.png" width="400" alt="The map editor on the 3D map with the zone tool">
<br>
<img src="docs/screenshots/editor-triggers.png" width="400" alt="Triggers of a mission: zone entered, line crossed, zone claimed, ...">
<img src="docs/screenshots/editor-blocks.png" width="400" alt="The block editor with message, objective, variable and spawn blocks">
</p>
- **Campaign graph**: missions as cards; drag arrows for the next mission and for branches (another goal reached
first leads elsewhere). Save as a file, online, and publish for every player on the server.
- **Maps**: a random map rolled once per run of the campaign, or a painted one - start from the generator and paint
ground, rooms, veins, the core, portals, the hero gate, units, towers, traps, knight fortresses and rival masters,
with brush, rectangle, fill, mirroring and undo. Trigger zones are drawn right on the map.
- **Scripts as blocks**, no code: a start script, victory and defeat checks, a clock, and triggers - zone entered or
left, line crossed, zone claimed or dug, units in a zone, timers, a unit or tower falls, values, rooms, spells,
slaps, research. Problems are marked red while you build.
- **Test play** right from the editor, with the trigger log and the variables on screen; **co-op** for editor
campaigns. *Open the demo* in the editor shows every trigger at work. Details: [docs/CAMPAIGN_EDITOR.md](docs/CAMPAIGN_EDITOR.md),
[docs/MISSION_SCRIPTING.md](docs/MISSION_SCRIPTING.md).
## Together
- **Versus** for 2-4 masters, with teams, gold for allies and fallen masters watching the rest of the match.
- **Co-op**: the 20-mission campaign *League against the Lightwatch*, the built-in missions or any editor campaign,
each master with an own dungeon; empty seats are played by the AI. Hero waves march on the strongest master.
- **Offline with an AI partner**: every co-op mission also runs without the server - the partner builds his own
dungeon, follows your attack flag and helps out with gold. Interrupted runs go on with *Continue*.
Details: [docs/MULTIPLAYER.md](docs/MULTIPLAYER.md).
<p align="center">
<img src="docs/screenshots/coop-league.png" width="400" alt="The Match page with the co-op league and the AI partner">
<img src="docs/screenshots/languages.png" width="400" alt="The language dropdown with pixel flags for 18 languages">
</p>
## Meet the household
<p align="center">
<img src="docs/img/units/worker_5.png" width="56" alt="Pit imp">
<img src="docs/img/units/kobold_5.png" width="56" alt="Kobold">
<img src="docs/img/units/spider_5.png" width="56" alt="Cave spider">
<img src="docs/img/units/mage_5.png" width="56" alt="Shadow mage">
<img src="docs/img/units/ogre_5.png" width="56" alt="Stone ogre">
<img src="docs/img/units/jailer_5.png" width="56" alt="Jailer">
<img src="docs/img/units/priestess_5.png" width="56" alt="Flame priestess">
<img src="docs/img/units/cogling_5.png" width="56" alt="Cogling">
<img src="docs/img/units/revenant_5.png" width="56" alt="Revenant">
<img src="docs/img/units/bat_5.png" width="56" alt="Giant bat">
<img src="docs/img/units/gargoyle_5.png" width="56" alt="Chain gargoyle">
<img src="docs/img/units/owl_5.png" width="56" alt="Arcane owl">
<img src="docs/img/units/wyrm_5.png" width="56" alt="Ember wyrm">
<img src="docs/img/units/chainbreaker_5.png" width="56" alt="Chainbreaker">
</p>
> *Fourteen kinds of wonderful creatures, master, and eight kinds of humans in shiny tin. I wrote everything down for
> you - who loves what, who hates whom, who learns what - in* **[Crookfinger's Bestiary](BESTIARY.md)**.
> *The same book is in the game, by the way - on the title screen and in the pause menu.*
## How to play
1. **Open the game online**: <https://dungeon.familie-zink.org/>. It runs on desktop and on phones (touch controls switch on by themselves).
Logged-in players can download the whole game as one HTML file from the title screen (*Download Standalone*);
it then runs offline, and downloaded savegame files load there too.
2. Or **run your own server** with Docker - with user accounts, savegames on the server and the game as an
installable app: see **[INSTALL.md](INSTALL.md)**.
**The basics, master:**
| | |
|---|---|
| Left click / drag | use the tool - dig, build rooms (drag a rectangle), cast, place towers and traps |
| Right click | drop what your hand holds (creatures, prisoners - or a sacrifice on the altar) |
| Shift + click | slap your own creatures (faster for a while) or punch a hero |
| Right drag, WASD, screen edge | move the camera · middle drag, Q/E, R/F: rotate and tilt · wheel: zoom |
| Esc | pause menu: save, load, settings, bestiary |
On phones: tap to use a tool, drag to mark or move, two fingers to zoom and turn, long press for information.
## Under the hood
- **Rust**, compiled to **WebAssembly**, with [macroquad](https://github.com/not-fl3/macroquad) - one small module, no engine, no plugins.
- A real 3D isometric world in pixel art: chunked meshes, flickering point lights, a glow pass, particles,
billboard sprites with eight viewing directions, every frame of it drawn by code - **no image files** except the font.
- Procedural chiptune soundtrack as FastTracker 2 modules with its own XM replayer and synthesised sound effects:
47 pieces around one leitmotif - in the dungeon dark and minor, above ground bright, with flute, harp, birdsong
and wind; the music follows the camera between the two worlds.
- A tiny Rust savegame server (axum, Argon2 passwords) - optional; without it the game uses savegame files.
- 18 languages: German, English, Spanish, Portuguese, Dutch, Danish, Norwegian, Swedish, Finnish,
Russian, Croatian, Hungarian, Serbian, Romanian, Slovak, Czech, Italian and Greek – chosen from a
dropdown with pixel flags; another language is one text file away.
## Made with Claude Code
<p><img src="docs/img/claude-mark.png" width="72" alt="Claude Code mark" align="left"> &nbsp;DungeonCraft was developed with the help of
<a href="https://claude.com/claude-code"><b>Claude Code</b></a>, Anthropic's AI coding assistant - the code, the graphics,
the music, the texts and this page. Claude, Claude Code and Anthropic are trademarks of Anthropic; the pixel mark only
credits the tool.</p>
<br clear="left">
## Made with qwen3.8-flash-next-iq3xxs, Strata and OpenCode
Parts of DungeonCraft were also developed with the language model qwen3.8-flash-next-iq3xxs, run with Strata in
<a href="https://opencode.ai"><b>OpenCode</b></a>. Qwen and OpenCode are trademarks of their respective owners; the pixel
marks on the title screen only credit the tools.
## License
DungeonCraft is released under the **[MIT License](LICENSE)** - © 2026 Richard Zink. It covers the code, the generated
music in `assets/music/` and the procedural graphics.
The **Dinowyde** and **DINOBYTE** fonts (`assets/dinowyde_1x.png`, `assets/dbyte_1x.png`) by [mby](https://mby.itch.io/) are licensed separately under
**CC BY 4.0**. Details in [CREDITS.md](CREDITS.md).
---
<p align="center"><i>"The underworld is yours, master. Now - tea?"</i><br>- Crookfinger</p>