6 KiB
Project: rimlike
A 2D, tile-based cute-farming-RPG-meets-colony-sim for mobile / handheld. Rimworld DNA, Going Medieval × Stardew lodestars. Touch-first UI, sandbox + light storyteller, Rimworld-fidelity depth (5-priority work matrix, 16-chip stockpiles, mood + soft breaks, lighting, room beauty, Quality, dirtiness, production chains, combat, burial). Built on Godot 4 with the ElvGames "Ultimate Farming RPG" Humble bundle as primary art and Ventilatore Fantasy Tileset as medieval accent.
Working title rimlike — rename TBD.
Working agreement
- This is a git repo with
originon Forgejo athttps://git.rdx4.com/megaproxy/rimlike.git(private). HTTPS auth uses the token in~/.git-credentials— pushes are non-interactive. - Commit after each logical change with a one-line imperative message;
git pushafter each commit (or at minimum before ending the session). - Read
memory.mdat session start. Update it before ending the session. - Read the relevant
docs/companion (design / architecture / ui / art) for any task in that area —memory.mdis the index, the companions are the depth. - Never commit secrets — see
.gitignoreand the rules in~/claude/CLAUDE.md.
Project-specific notes
- Engine: Godot 4 (GDScript). 2D-first. Mobile and Steam-Deck export targets; iOS export needs Mac/Xcode, Android from Linux is fine.
- Tile size: 16×16 pixel art (locked).
- Art: ElvGames "Ultimate Farming RPG" Humble bundle is the primary visual layer; local path
/mnt/d/godot/assets/humble set new/. Ventilatore Fantasy Tileset Bundle is owned and used as medieval accent. License attribution is required — maintain a credits string for every pack used (seedocs/art.md). - Tick rate: sim 20 Hz, render 60 Hz decoupled. Default speed Fast (5×) — 1 in-game day ≈ 5 min real time. Auto-pause on threats / pawn-down / dialog events.
- Save format: Mid-tick suspend safe; we save between sim ticks. JobRunner state must round-trip from day one.
- i18n from day one: all player-visible strings live in a string table; English-only ship plan but no hardcoded copy in code.
- Conventions: GDScript with Godot's standard idioms. Class-per-file. Snake_case for files and variables. Tilesets imported from the bundle's
Tilesets/*.pngdirectly (skip the .unitypackage / .yymps / RPG Maker variants). - Open scope: the
Vertical sliceinmemory.mdis the MVP target — realistic timeline 3–6 months solo. Do not silently expand scope; fork choices live inmemory.mdOpen questions.
MCP Pro integration
AI assistant tools come from Godot MCP Pro (172 tools, paid, proprietary). Two pieces:
- Server at
D:\godot\mcp\server\(=/mnt/d/godot/mcp/server/from WSL) — Node.js, shared across all Godot projects on this machine, not part of this repo. - Editor plugin at
addons/godot_mcp/— copied from the paid zip, gitignored (proprietary license, not redistributed). Re-copy on a fresh clone (once the Godot project is scaffolded):cp -r /mnt/d/godot/mcp/addons/godot_mcp ./addons/, then in Godot: Project → Project Settings → Plugins → Godot MCP Pro → Enable. .mcp.jsonhere wires Claude Code → server..claude/settings.local.jsonis the pre-built read-only-tool allowlist from the zip (committed).- The Godot editor must be running with the plugin enabled before Claude can use MCP tools — look for the green dot in the "MCP Pro" bottom panel.
- Editor vs runtime tools: editor tools always work; runtime tools (
get_game_*,simulate_*,assert_*, etc.) needplay_scenefirst. Full split inaddons/godot_mcp/skills.*.mdorD:\godot\mcp\instructions\CLAUDE.md. - Don't set
GODOT_MCP_PORTin.mcp.json— server auto-scans 6505–6509; fixed port causes silent failures with stale Node processes. If "Editor not connected" persists, kill any leftovernode.exein Task Manager.
Delegation: tiered subagents (cost/speed)
The main conversation runs on Opus. Three project-local subagents in .claude/agents/ exist to offload work to cheaper, faster models. Default to delegation for any well-defined task that fits an agent's description — including small mechanical edits. Don't skip delegation just because the edit is tiny; the user wants the tiered system visibly firing on its natural workload.
quick-edit(Haiku) — mechanical edits to.gdfiles: typos, renames, removingprint()s, removing unused imports, single-line fixes. Default for any rename or search-and-replace. Tools restricted to file-edit + grep.researcher(Haiku) — read-only codebase exploration: "where is X defined", "what connects to signal Y", "which scenes reference resource Z". Returns a digested summary, not raw grep output. Default for any exploration or audit question before designing a feature.gdscript-refactor(Sonnet) — medium-scope GDScript work that needs reasoning but no architecture decisions: extract a method, thread a parameter through several call sites, add a save/load seam, write a small new autoload.
Keep on Opus only when:
- the file/files are already loaded in your context from an earlier turn in this conversation (Haiku would re-read from scratch, blowing the savings), OR
- the task needs MCP Pro editor tools (scenes, runtime,
play_scene,execute_game_script), OR - the user is iterating tightly with you and a subagent would break the loop, OR
- the work is genuinely architectural / ambiguous and needs your judgement.
When in doubt, delegate — overhead on a wasted dispatch is cheap; missed savings on Opus-doing-Haiku-work compound across the session.
Report delegation in the final summary. When you finish a task, briefly say which subagents you used and what for — e.g. "Used researcher (Haiku) to locate the JobRunner call sites; did the refactor on Opus." If you handled everything yourself, say "No delegation — handled on Opus." One short line at the end of the response is enough; the user wants to see whether the tiered-model system is actually firing.