A browser-based "Grimoire" (storyteller's tool) for running games of Blood on the Clocktower, built for my uni's BOTC club.
Work in progress. Core state management and a functional token/script/bluff/reminder UI are working. Fancy stuff forthcoming...
I wanted a grim tool optimized for local play with features other (excellent!) tools lack. Specifically auto-resolution, offline modes, and co-storytelling support. I run games for the 100+ member university club I founded, so I'm building the tool I want to use.
- Add, remove, kill, revive, and rotate tokens on the board
- Load offical and custom scripts (but not homebrew, yet) and scope character selection to it
- Bluff support with auto-generation
- Track and add per-character and global reminder tokens
- View in-play jinxes
- Full undo/redo history!
- MAJOR UI OVERHAULS FOR EVERYTHING
- Pass 'n play role assignment
- Step-by-step storyteller instructions and auto-resolution
- Offline support as an installable PWA
- Online support for co-storytelling
- State is managed with a single
useReducerover a discriminated-unionGrimActiontype, with an undo/redo history wrapper around it. - All actions are plain, deterministic JSON to support future multiplayer features.
- Game logic was first prototyped in Python (see
/prototype) as I figured out the shape of things.
React, TypeScript, Vite. Character/script data vendored locally from TPI's offical community release rather than fetched at runtime.
All code within was written by me by hand or taken from common templates. However, AI was used in planning architecture and identifying bugs. This is my first significant web project, so I relied on the help and got rather savvy with it. Thank you for bearing with me.
npm install
npm run dev