bd49e118d5c15bdb13bc248272342bdef904cd49
construct() takes a seed, not a stat block. It rebuilds the RNG and rolls the attributes itself, so it never trusts a number handed to it (§2) and the same seed yields an identical character, hidden Luck included (§10). The whole character is reproducible from four primitives: seed, race_id, calling_id, spend. The rng parameter is dropped — the seed is now the only source of randomness. The roll is 3d6 with a hard floor of 8. Straight 3d6 puts ~9% on a primary the +3 pool cannot rescue, and a character bad at the one thing he is FOR is not grit — it is the fine §7 forbids, paid for twenty hours. LCK is unspendable, not merely hidden: spending on it is a validation error. GameState.stats becomes GameState.sheet. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QYa9u7Kdxv5gX4AnwWexy8
coc-rpg
AI-driven single-player, party-based fantasy RPG. Godot 4 client, FastAPI proxy, AI as Dungeon Master.
Read CLAUDE.md first — project charter and working agreement. It is the source of truth. If code disagrees with it, the charter wins until the charter is changed.
The one rule
Code owns state. AI owns text. (charter §2)
Repo layout
/client Godot 4.7 game client (GDScript) — ALL game state, ALL game rules
/docs Client-specific docs (scenes, input, combat wiring)
/api FastAPI proxy — auth, metering, prompt routing, logging (charter §4)
/docs API-specific docs (endpoints, model routing, deploy)
/prompts Role prompts — source code, versioned, reviewed (charter §5, §16)
/content Authored game data — quests, NPC knowledge lists, fallback text
/quests Story skeletons and quest definitions
/npcs Per-NPC knowledge lists (charter §6 — "the whole design")
/fallback Authored degraded-DM text for every AI surface (charter §13)
/docs Cross-cutting docs — roadmap, ADRs, planning affecting both sides
/adr Architecture Decision Records
The three processes (charter §4)
client (GDScript) ──HTTP──▶ api (FastAPI) ──▶ Replicate / Ollama
The client holds no API key, ever. It knows one base URL and a set of role endpoints. It sends game state, receives text.
Description
Languages
Text
100%