Browser · 3D · in development

Dig deep.
Build well.
Hold the heart.

You are the thing under the mountain. Carve tunnels out of solid rock, raise the rooms that keep your dungeon alive, and put every imp and warrior you own between the monsters and the Dungeon Heart.

⚡ Runs in the browser 🔓 No install, no account 🛠️ Built with Three.js

The loop

Three things, over and over, under increasing pressure

Every dungeon starts as one lit room in a mountain of rock. What it becomes is entirely a question of what you dug first.

Dig

Mark rock and your imps go to work. Gold seams pay for everything that follows, so where you dig first decides how fast the whole dungeon grows.

Build

Claimed floor becomes rooms. Rooms are not decoration — each one changes a number you are about to need, and adjacent tiles of the same room reinforce each other.

Defend

Waves arrive on a timer, and every fifth one brings something considerably worse. Your warriors fight back, your imps die if you forget about them, and the Heart does not regenerate.

Seven rooms

Every room is a trade-off you make with gold you do not have yet

There is no filler here. Each room type does one specific thing, and building the wrong one early is a real setback rather than a cosmetic mistake.

Treasury · 10g

Stores gold. Without it, everything your imps mine has nowhere to go.

Lair · 18g

+2 to your maximum imp count per tile. More hands, more rock cleared.

Hatchery · 22g

New imps arrive faster, so losses during a wave hurt less.

Library · 26g

+0.6 mana per second per tile — the resource everything advanced runs on.

Training Room · 30g

+1 warrior training slot. Turning gold into soldiers takes space.

Barracks · 34g

Rally point and warrior training. You need at least one, and you will want it early.

Forge · 28g

+25% imp dig speed per tile. Pays for itself in rock, not in gold.

Upgrades

Rooms level up, and neighbouring tiles of the same type raise the multiplier together.

What makes it a game

The parts that punish autopilot

Heroes

A rare unit that earns XP and levels through a run, and lands a cleave attack no warrior has. Losing one is a different kind of loss than losing a recruit.

Veterancy

Warriors rank up from kills — Recruit, Veteran, Elite — on top of whatever your barracks level gave them at hire. The room sets the floor, the fighting sets the rest.

Wave design

Grunts give way to faster Stalkers and Runners, then ranged Slingers, door-breaking Sappers, imp-hunting Thieves and Brutes that soak everything you throw at them. Boss waves land on a fixed interval, escorted and scaled the same way a normal wave would be.

Payday

Imps and warriors draw wages on a timer. Miss one because the treasury is empty and somebody walks out of your dungeon.

Mission objectives

Each run has a stated goal and a win condition, not just an indefinite survival timer that ends when you get bored.

Spells

The mana your libraries generate is what you cast with — direct interventions from your own hand, when warriors and walls are not going to be enough on their own.

Achievements

Lifetime stats and achievements persist between runs, so a disastrous game still moves something forward.

Straight from the game

Turn it over yourself

These are not renders or marketing shots — real glTF exports, rendered with the same lighting rig and the same renderer the game uses, loaded on demand. Drag to rotate. Every model here except Overlord's Hand and the Command Rune is the exact one running in your session mid-game — those two tools stay 2D cursor icons in the game itself by design, and are shown here as art only.

The viewer only downloads once you scroll to it, and the page works perfectly well if it never loads at all.

An interactive 3D model of the imp loads here. It needs WebGL — if your browser or connection says no, you are not missing any information, only the toy.

The Heart does not defend itself

It runs in the tab you already have open. Nothing to install, nothing to sign up for.

Enter the dungeon (opens in a new tab)
` marker (see site/partials/header.html's own header comment for the backstory). Byte-identical footer content across every real page before this migration -- the only two exceptions were bugs this migration fixes rather than preserves: - leaderboard.html's footer had a stray aria-current="page" on its own "Leaderboard"
  • , which nothing else in any footer ever did (aria-current belongs to the header nav's "this is the current page" signal, not the footer's static link list) -- almost certainly copy-paste residue from the header logic, not a deliberate footer feature. Not reproduced here. - preview.html/preview3.html's footers were missing the Guide/ Privacy
  • s and the Play link's sr-only "(opens in a new tab)" span -- stale copies predating those additions, not a deliberate difference for the visual experiment those pages are actually about (their own hero/motion markup, not the boilerplate chrome). Now unified onto the same footer as everywhere else. -->