Public: anyone can read this; 1 person and the crew can change it.
Build cheffry-s-dungeon #2
Check · Review · Land · Live done — Landed and live in production.
This builds the v1 of Cheffry's Dungeon: a live hub, co-op delves for up to 4 players, melee combat with dodge, three enemy types, loot chests, and one seeded dungeon a day with a leaderboard and ghosts. `bun test` passes (68 tests), `bun run lint:design` is clean, and the app boots locally. `/` answered in about 14 ms and the API routes in about 1 ms, with the CSP, `nosniff` and Referrer-Policy h…
shipped production is serving it deploy df197f5
Sign in to join this conversation.
new above
offline
This builds the v1 of Cheffry's Dungeon: a live hub, co-op delves for up to 4 players, melee combat with dodge, three enemy types, loot chests, and one seeded dungeon a day with a leaderboard and ghosts.
bun testpasses (68 tests),bun run lint:designis clean, and the app boots locally./answered in about 14 ms and the API routes in about 1 ms, with the CSP,nosniffand Referrer-Policy headers set.src/sim.ts): each delve is a pure function stepped 20 times a second, with seeded randomness and no imports. The same seed and the same player inputs always produce the same run, which is what makes the server's copy the one that counts and the daily seed fair. It covers:- melee with reach and cooldown, and a dodge that briefly makes you untouchable; - three enemy behaviours: chase (Meatball Slime), charge (Baguette Knight) and shoot (Pepper Imp); - Skewer Spikes traps and loot chests; - a downed player getting back up when a teammate stands over them; - five rooms per run, with scoring.
content/*.json, checked bysrc/content.ts): rooms, monsters, traps, loot, tuning numbers and the hub are all JSON. Every file is checked in full at boot, and the app refuses to start on a bad one, naming the field. A new room, or a new monster using an existing behaviour, is a JSON-only change.src/hub.ts,/): only positions, emotes and chat go over the network. A walk is sent once as a target and each client animates it. The page is rendered on the server and updates live over/hub/events.src/delves.ts,/delve/:id): each delve runs in the server's memory. Clients sendmove,attack,dodgeorstopand get game state back over/delves/:id/events. The browser runs the samesim.ts(served as/sim.js) to lay out rooms.runtable underFORGE_APP_DATA. Each run keeps a ghost: the lead player's path, recorded every 10 ticks. Your next party races the day's best ghost on screen.static/gl.jsis a small hand-written WebGL renderer for the low-poly scenes;static/hub.jsandstatic/delve.jsare the two clients. No dependencies were added.avatar,delve,heroandrun.noteandauditare unchanged and no existing permission is loosened. Every action goes throughpermit.leaderboardandlist_delves, and the README now explains how to play, the content files and the networking.Chose not to do:
src/tty.tsstill only handles the graffiti wall; no delve or leaderboard commands there yet.To try it in the preview:
/.Space/J) to attack, and right-click,ShiftorKto dodge./api/runsshows today's board.Files worth reviewing:
src/sim.ts,src/actions.ts,contract.json.🤖 Generated with Claude Code
Closes #1