Current projects

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.

Scary Scary Dungeon title screen: Close range, Magic and Long range to choose from, Test mode buttons for each floor, and a clip of the Warrior’s chains binding a pack
The title screen. Each fighting style plays footage recorded from the game.

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

On the Hanging Abbey’s Cloud Terrace, chains run from the Warrior to six skeletal husks and bind them into one knot
Chainbreaker, taken as Iron Maelstrom, binds six of the pack into a knot for Earthsplitter.

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

In the Chapel of Embers the Mage sends a rolling wave of fire into a purple gravity well that has dragged a pack of husks together
Flame rolls into a Gravity Well in the Chapel of Embers, and the well burns as an inferno.

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

In the Hollow Throne a single bolt carries three husks towards a pillar while one of them shouts “AAAAAAH!”
Skewer runs three husks through and nails them to the pillar behind.

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 Mage’s Abilities screen: eight abilities along a path, Gravity Well playing as footage beside its damage figures, and its two forms, Crushing Depth and Singularity
The Abilities screen plays each ability as footage from the game and lists what it deals with the weapon in hand.

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.

In the Grand Cloister the Forward Standard shouts “Spears! He is HERE. Spears!” as a line of shielded pikemen advances on the hero
The Grand Cloister. The Forward Standard calls the spear wall forward.

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.

In the Brazier Row two fire vents breathe cones of flame across the floor beside a river of lava as the hero cuts at a husk
The Brazier Row: fire vents on alternating clocks beside the lava.
On the Wind Bridge snow streams past as the hero cuts through two skitters, while a red lane marks an arbalest drawing on them
The Wind Bridge in a gust. The red lane is an arbalest drawing.
The Bellkeeper, a giant bell-bodied figure swinging a bell as a mace, attacks the hero on the abbey’s open belfry, its sweep drawn on the floor
The Bellkeeper on the abbey’s belfry. Its sweep is drawn on the floor before it lands.

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.
The gear screen: a pack of weapons in the middle, and on the right the Oathbreaker compared with the worn Steel Longsword, marked Upgrade, in Yours and This columns
The gear screen compares a find with what is worn and says what gets better and what gets worse.

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.

Scary Scary Dungeon on a phone in landscape: the Warrior at the edge of the Cloud Terrace as a husk falls into the drop, with a movement stick on the left and ability buttons under the right thumb
Touch layout at phone size, on the edge of the Cloud Terrace.

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.