Browser game · Action RPG
Scary Scary Dungeon
A single-player action RPG that runs in the browser. You fight as a Warrior, a Mage or an Archer down three floors: a sunken monastery, the fortress under it, and an abbey on the face of a mountain.
Project notes · · called Ashen Vault until
Plays in the browser at play.kevinoflannagain.xyz, no sign-in needed. Progress is saved in the browser. Test mode on the title opens any floor with every ability unlocked, and saves nothing.

Three classesWarrior, Mage and Archer
Every character carries one weapon of each kind. The one in hand sets the class, and each class keeps its own four abilities on Q, E, R and C, so switching mid-run is a choice rather than a restart. A new character starts with junk: a rusty pipe, a bent stick, and a toy wand with the price tag still on.
Warrior: close range
Knives, swords, axes, maces and hammers each have their own four-hit chain, reach and weight. A sword cuts, drives, thrusts and cleaves; a hammer gathers for half a second and sends a husk flying. The right button raises a guard, and a press timed to the blow parries it and answers with the weapon’s counter. A shield only counts beside a one-handed weapon.
Abilities Rending Cleave, Flowing Steel, Chainbreaker, Whirlwind, Earthsplitter, Falling Sword, Wrath of the Fallen

Mage: magic
Warp bolts on the left button; on the right, an Arcane Pulse that charges for just over a second and throws everything in an eight-metre cone. Blink, two charges of short teleport, replaces the dodge. The spells are built to work on each other: a Gravity Well draws fire in and burns as an inferno, Frost Line freezes water and crusts over lava, and lightning runs through a pool into everyone standing in it.
Abilities Flame, Frost Line, Storm Rod, Gravity Well, Force Lance, Chain Lightning, Meteor, Stolen Hour

Archer: long range
Tap for quick arrows, or hold for a full draw that hits over five times as hard and knocks foes off their feet. The right button looses a seven-arrow Scatter Volley at close range. Vault replaces the dodge: a flip towards the cursor that looses a full draw at the nearest foe from the top of the leap.
Abilities Skewer, Rapid Fire, Bank Shot, Explosive Arrow, Sentry, Rain of Arrows, Deadeye

Abilities and forms
Each class learns its abilities by level 15 and carries four. Every ability, the Mage’s Blink and the Archer’s Vault included, has two forms, and the player takes one: Flowing Steel can turn twice mid-dash, or haul six foes and land a finishing cut. Forms are earned by use rather than by level. Ten real uses master an ability and open its pair, so the choice comes once the player knows the ability. That makes 24 abilities and 48 forms.

The descentThree floors, one road each
Each floor is one road of chambers with three seals to claim and the Bellkeeper at the end. Below the first floor, foes have 30% more life and hit 30% harder for each depth, and from depth four the abbey repeats with extra rules. Gear and levels survive death, and a run in progress survives a reload.
The Sunken Monastery
Eighteen chambers. The Grand Cloister is a pitched battle: 27 of the monastery’s dead stand in lines across the nave, spears in front and bows behind, under standard-bearers who shout their orders, with a lich commanding from a dais at the far end. When he falls the line breaks, and only the heavies fight on.

The Sunless Bastion
Fourteen chambers in the wardens’ fortress under the monastery, with 24 traps that bite the dead as readily as the hero: spiked plates, bolts from slits in the wall, fire vents and iron jaws. A river of lava runs the length of the Brazier Row. Foes walk round it, and one thrown in goes under.
The Hanging Abbey
Fourteen chambers on a switchback road up a mountain, above the cloud. Out under the sky the edges are open: a foe thrown over one goes into the drop, and its gold and gear stay on the lip. Gusts cross the Wind Bridge and carry off anything already off its feet.



Under the hoodPhysics and enemy behaviour
The part I spent longest on is a single body state for every enemy. Heavy arrows, force spells, sword carries, and ordinary knockdowns all push the same object, so nearby bodies exchange momentum by mass, fast impacts bowl over lighter foes, and a body thrown into stone slams into it.
The monastery’s dead, the oathless, each have one of five temperaments (bully, shirker, stickler, craven or dim) that decides who comes in first and who hangs back. A standard-bearer orders its line about and mends it; kill it and the line loses its ranks and its nerve. Asleep, they argue in pairs or play out skits; awake, they blame each other for friendly fire.
- Three classes, 24 abilities and 48 forms, with free switching between forms.
- Rolled loot after the Game Boy Advance Return of the King: 55 forged bases, prefixes and suffixes such as Cantor’s and …of the Long Vigil, and 19 uniques with powers no roll carries.
- Champions, also after Return of the King: one foe in each group is drawn larger, with up to two and a half times the life and one of five traits.
- A regression suite of over 1,100 tests pins map geometry, cooldown rules and enemy behaviour.
- Sound effects come from a sample bank, mixed to level targets for cues like tells, hits and falls. The music is three songs made with Suno, and the fighting song comes in within about half a second of a foe giving chase.

TouchA phone held sideways
The same game runs on a phone in landscape. A floating stick follows the thumb, the buttons sit under the right hand, and tapping a foe targets it. Ground abilities aim from a drag, so a spell lands on the enemy instead of behind it.

Built withTypeScript, three.js, React and Vite
The engine is TypeScript on three.js, with React for the menus and HUD and Vite for the build. Enemy models and gear are made in Blender and exported as meshes. The game state is saved in the browser; there is no server.
Much of the code was written with AI coding assistants, steered through design notes, handoff documents, and the test suite. Each feature has a short write-up recording what was decided and how it was checked.
The game was called Ashen Vault until 27 September 2026. The save keys and the hosting kept the old name, so existing saves carried over.
What is not finished
Balance across a whole run has not been tuned by hand, and phones have only been tested in browser emulation, not on handsets.




