Current projects

Browser game · Action RPG

Ashen Vault

A single-player action RPG that runs in the browser. You pick a sword, a staff, or a bow, walk one road through a sunken monastery, and fight your way to the Bellkeeper.

Project notes ·

The hosted build asks for a ChatGPT sign-in before it loads. Progress is saved in the browser.

Ashen Vault title screen: a cloaked figure walks towards a giant stone king in a firelit hall, with Sword, Staff, and Bow to choose from
The title screen. Choose a fighting style, then enter the monastery.

The ideaFind a fighting style and make it yours

I wanted a game where every attack means something. Enemies wind up before they strike, positioning matters, and a good hit visibly throws, floors, or pins whatever it lands on.

Every character carries all three weapons. Equipping a different one changes the class and restores its own four-slot ability loadout, so switching styles mid-run is a real choice rather than a restart.

  • Sword. A three-hit chain of cut, drive, and cleave that sweeps enemies along the blade. Hold the right button to guard; time it to parry and riposte.
  • Bow. Tap for a quick arrow or hold for a full draw that knocks lighter enemies off their feet. The art is a seven-arrow scatter volley.
  • Staff. Warp Bolt tugs a target towards you; Arcane Pulse charges up and releases a cone of force that flings even heavy foes.

The monasteryOne road, eighteen chambers

The map is deliberately linear. There is no backtracking: each chamber joins exactly two neighbours, and three seal chambers hold sealed doors that only open once their seal is claimed. The Hollow Throne and the Bellkeeper wait at the end.

Later depths reuse the same monastery with a stronger garrison and extra rules. Gear and levels survive death; the current run does not survive a reload.

The hero in a red cloak surrounded by skeletal husks, pikemen, and a shield bearer in the Chapel of Embers, with the action bar and quest tracker on screen
The Chapel of Embers. A husk pack with pikemen, skirmishers, and a caller closes in.
The Sunken Monastery map: eighteen chambers connected in a single winding route, with seals, sealed doors, and the Hollow Throne marked
The map. Seals open the next door; the forge's wishing bell is an optional fight.
The Warrior abilities screen with seven sword arts, a four-slot loadout, and three improvements listed for Rending Cleave
Eight abilities per class, four equipped, three improvements each.

Under the hoodBodies, momentum, and enemies that read the room

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.

Enemies have threat tiers, poise, hearing, and morale. A husk pack presses forward together, arbalists hold their fire until they have a line, and a shirker breaks off when the fight turns. Casks, chandeliers, and the monastery bell can all be broken.

  • Three classes, twenty-four abilities, and seventy-two bought improvements with free refunds.
  • A regression suite of over four hundred tests pins map geometry, cooldown rules, and enemy behaviour.
  • Sound comes from a curated sample bank, mixed to level targets for cues like tells, hits, and falls.

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.

Ashen Vault on a phone in landscape: the hero faces The Last Watch beside a treasure cache, with a movement stick on the left and attack buttons on the right
Touch layout at phone size. The Last Watch guards the first cache.
The inventory screen: a figure of the hero with gear slots, three starting weapons in the pack, and the Garrison Shortsword selected
The inventory. Every new character starts with a sword, a staff, and a bow.

Built withthree.js, React, and a lot of notes

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.

What is not finished

Balance across a whole run has not been tuned, physical handsets have only been tested in browser emulation, and later depths reuse the same monastery rather than adding new chapters.