DUNGEON CITY RUMBLE / ENGINEERING
State of the tech: November 2026
What Dungeon City runs on after a week of rewrites: the stack, the dungeon builder, rendering, combat, and how it all gets tested.

Dungeon City changed shape several times this past week. It started as a Unity camp on Windows, moved into the browser, traded a hand-built dungeon for a generated one, and rebuilt its battle twice. This is a snapshot of the technology as it stands on November 4, before the next round of changes.
The stack
The game is a static web app. Three.js 0.187 draws everything in 3D, the postprocessing library supplies the HD-2D finish, and GSAP handles camera moves and interface motion. All three are vendored into the project with recorded hashes and loaded through an import map, so there is no build step to play it locally and no server code to host it. The alpha at /dungeon-city/ is that same folder of files, packed and served by the Cloudflare Worker that runs this site.
A small hash router mounts one view at a time: the camp, the dungeon floor, and the battle that opens over a floor room. Each view cleans up completely when the player leaves, and a test checks that by counting geometries and textures across a remount. Progress is saved in the browser and can be exported to a file.
The Unity version was retired on October 31. Its project, last build and saves are archived with a checksum for each of its 7,744 files, so nothing from that phase is lost.
A dungeon built from shapes
Every floor comes from a seed. The planner written on November 1 replaced an inherited generator that built everything from one-cell cubes. It treats a floor as shapes instead: a room's role picks its outline, so the boss lair is round, shrines are circular, vaults are square with alcoves in their walls, and fights get halls, L-shapes, crosses, octagons and ovals. Passages are routed around the rooms with A* and smoothed, so they can run at any angle and bend.
Rooms and passages combine into one distance field. The walls are masonry laid along its outline, and each floor tile is clipped to the same outline in the shader, so a circle stays a circle. Underneath it all, a plain cell grid is what the party walks on and what spawning, scouting and battles use. Rooms also sit at their own heights now, joined by flights of stairs that suit the place: hewn stone in built halls, rough rock in caves, boards in the mine.
Three layers decide what a floor feels like. Origin is how the place formed: built halls, natural caves, burrows, an abandoned mine or open-air ruins. Theme sets the palette, liquids and dressing: ancient, frost, molten, grim or verdant. Inhabitants can move in on top, so a goblin tribe turns any of them into a camp with tents, totems and a chieftain's throne. Quests choose a floor's seed, origin, theme and inhabitants, which keeps the dungeon from becoming an endless reroll.
Rendering
The look is HD-2D: pixel-art characters standing in a lit 3D diorama. The camp, the map and the battle share one renderer setup for HDR output, bloom, tilt-shift focus, color grading and vignette. A budget of twelve lights feeds both the rooms and the sprites. Each character sheet gets a generated normal map, so a fighter beside a campfire is warm on one side and dark on the other, for well under 0.05 ms a frame.
Most of the speed came from removing waste. Shared materials, cached shadows, and flames, crystals and particles moved onto the GPU cut draw calls while exploring from 199 to 144. Opening a battle used to freeze the map for up to five seconds while shaders compiled; the longest stall is now under 0.4 s. During a fight, the dungeon behind it holds its last frame instead of redrawing, which matters most on phones.
Combat
Battles run on a speed timeline rather than rounds. A strip of portraits along the top shows who acts next, and faster fighters act more often. Everyone has a battle bar that fills as they hit and get hit, then fires their ability. A shared super pool can be spent on an adventurer's super or the barmaid's ultimate. Staggers and hexes set enemies up for finishers, and each kind of enemy has its own targeting habit.
The camera frames each fight as a side-on stage. It finds the longest clear line between the two sides and looks across it, so every face stays visible. Fighters stand on the room's real levels, daises and pits included. Health carries between fights on a floor and refills on the stairs down and at shrines.
The barmaid is the player, and she never fights directly. Her controls are a ring around her portrait: four recipes and four supers, numbered for the keyboard. Recipes cook on battle time, each slice filling like a clock face until the dish is ready to serve. As of this morning she stands on the battle stage with her cart, where nothing can target her, and her ultimate launches a salvo of tiny tin rockets from it.
Characters, gear and loot
The roster of 34 adventurers is defined as data: tier, weapon class, role, ability, super and a named personal weapon. One tier ladder covers characters and gear: Basic, Enhanced, Epic and Legendary. Bosses drop gear with rolled affixes, and the workbench upgrades each piece twice, from Original to Improved to Perfected, with the player picking one of three affix offers at each step. A test holds the rule that a Perfected piece stays just below a fresh piece one tier up. Innate traits, such as Agile's dodge, give each unit up to two passives.
Sound, art and input
Voices, music and sound effects come from ElevenLabs. Camp residents speak their lines, the battle music has two looping tracks for each kind of room, and 26 cues mark the combat mechanics. Characters and enemies are PixelLab sprites, and every effect starts in PixelLab's VFX workbench, which has supplied 23 effects so far. Painted art covers the camp chapter, menus and character screens.
The game plays with mouse, touch, keyboard or a standard gamepad. Phones are supported in landscape, where the game goes fullscreen on the first tap.
How it gets built and checked
Development runs through AI tools that I direct. A coordinating Claude Code session on my own PC splits the work into parallel sessions, each in its own git worktree, and merges a branch only after the tests pass. ChatGPT and Codex paint illustrated assets to layouts Claude prepares. An independent review on a separate model played the whole build and read the code against the design decisions. It found an exploit that made loot endless, and the next wave of work closed it.
About three dozen headless browser suites cover the camp chapter, floor building and exploration, combat rules, loot, and the round trip from camp to dungeon and back. One sweep plans 162 floors and checks each of them flat and with elevation. Every release is play-tested on a preview before it goes public.
What's next
The tavern and its quest board come next, along with the town the prologue leads to. Most combat numbers are still placeholders, much of the roster still fights as stand-in sprites, and frame rates on real phones haven't been measured yet.