Clark Lavery

Clark Lavery

Web, Games & Graphics Programmer

Odam

Odam

A dice-builder RPG where every face you roll is an ingredient. Spend a sword on a Slash, a sword and a bone on a Strike, or save your faces for something bigger, then build a set of dice that can survive the next fight.

How it plays

  • Roll, lock, reroll. Keep the faces you want and throw the rest again. Then spend the locked faces on techniques: attacks, defences, buffs and debuffs.
  • Status effects change the rules. Burning hurts you every time you reroll, so you have to commit early. Dodge makes you ignore any hit bigger than half your health, so a single heavy blow is the wrong answer to it.
  • Four classes, many builds. Ranger, Fighter, Rogue and Elementalist, each split into archetypes with their own dice and techniques.
  • A campaign between fights. A branching map of battles, scouting events and campfires where you rest, recover and prepare.

How it's built

  • Svelte 5, TypeScript and Vite, shipped as an installable PWA that works offline on a phone or a desktop.
  • The battle engine knows nothing about the screen. The board is a view of it, so the tests run whole battles headless, including AI-against-AI games across every enemy and boss to catch turns that never hand over.
  • A dice ledger records exactly one place for every die: the board, the tray, a technique's slot, or used. Drag and drop, undo and redo all read from it, so a die can't be in two places at once.
  • Data-driven content. Dice, faces, techniques, enemies and status effects are plain model files, and the in-game glossary is generated from them, so the manual can't drift out of date.