rimlike/memory.md
megaproxy c5dadedab0 Bump MVP map to 80², lock world-view camera, resolve doc rot
Resolves the rimlike docs audit. Decisions made this session:

- Map: 40² → 80² for MVP slice; architecture sized to ~120² ceiling.
  Pawn count unchanged (3 start / 6 cap) — 'split-the-difference'
  sizing rather than frontier-feel scale.
- World-view camera (locked): pinch + drag-pan + double-tap-centre.
  Storyteller alerts include 'Go there' tap. No minimap, no
  follow-cam in MVP. New ui.md section captures this.
- Storyteller cooldowns: per-event AND per-category — both gates
  must pass. Resolves design.md/architecture.md disagreement.
- MAX_STACKS_PER_THOUGHT = 5 (was named-but-unset).
- Hauling no-destination fallback: drop after 3 retry passes,
  surface a passive 'No stockpile accepts X' alert.
- Container all-neighbors-blocked: hold then drop after ~5 sim s
  to avoid deadlock.
- Auto-roof big-room UX: emits room_too_large signal when BFS hits
  the ≤8-cell cap; UI surfaces a 'split with an interior wall'
  banner. Threshold + exact wording added to memory.md TODOs.

Doc rot cleaned in design.md and architecture.md: removed the stale
'8 work categories' intermediate sections (canonical 9-list lives
later in each file). Updated architecture.md perf claims for the new
map size.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 19:45:29 +01:00

169 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# memory — rimlike
Durable memory for this project. Read at session start, update before session end. Date format: `YYYY-MM-DD`.
A 2D, tile-based **cute-farming-RPG-meets-colony-sim** — Rimworld DNA, Going Medieval × Stardew lodestars — shaped for mobile and handheld. Promoted from `~/claude/ideas/rimlike` on 2026-05-10 after a single deep brainstorm session. Realistic MVP timeline: **36 months solo**.
## How to read this project
`memory.md` is the index of decisions and open questions. The deep specs live alongside in `docs/`:
| File | Contents |
|---|---|
| [`docs/design.md`](./docs/design.md) | Game design — core loop, simplifications, skills, statuses, mood, weather, stockpiles, production, combat, death/burial, storyteller corpus |
| [`docs/architecture.md`](./docs/architecture.md) | Tech — pawn AI / job system, time/tick model, Godot 4 engine layout, TileMap split, all subsystems (mood, lighting, rooms, hauling, production, combat, storyteller) |
| [`docs/ui.md`](./docs/ui.md) | Touch UX — work-priority matrix, stockpile/container screens, mood/lighting/rooms cues, combat banners, storyteller event UI, screens still to design |
| [`docs/art.md`](./docs/art.md) | Owned assets (ElvGames bundle primary, Ventilatore secondary), license, autotile gotcha, audit list, candidates kept for record |
When working on a feature, read `memory.md` first, then the relevant `docs/` file(s).
## Decisions & rationale
Distilled from the brainstorm. Each lock has a "why" — change with deliberate intent.
### Pillars
| Decision | Choice | Why |
|---|---|---|
| **View** | Top-down, grid-aligned tilemap | Closest to Rimworld feel; matches owned tilesets. |
| **Primary platforms** | iOS + Android touch, then Steam Deck / ROG Ally gamepad. Desktop falls out for free. | Mobile is the hard constraint; Deck inherits. |
| **Ambition** | itch.io + TestFlight release. Real artifact, small audience. | Drives engine choice; no app-store polish-tax. |
| **Engine** | Godot 4 (GDScript) | 2D-first, free, exports everywhere we need, fast iteration. |
| **Tile size / style** | 16×16 pixel art, **cute-farming-RPG primary** (ElvGames bundle), Ventilatore as medieval accent | ElvGames "Ultimate Farming RPG" Humble bundle owned (~2.8 GB, 70+ packs). Tone: Stardew × Going Medieval × Rimworld. |
| **Setting** | Medieval fantasy with cute palette | Owned-art alignment + clearer scope (no electricity / hydroponics / energy weapons) + underexplored on mobile. |
| **Run shape** | Open-ended sandbox, autosave, persistent world | Player picks up where they left off. |
| **Session length** | 515 min target | Drives every UI and pacing choice. |
| **Default speed** | Fast (5×), with auto-pause on event | 1 in-game day ≈ 5 min real time. Solves the "watch a pawn walk for 60s" problem; 1× exists for combat / fine work. |
| **Goal scaffolding** | Light storyteller prompts | Soft, dismissible nudges give each short session shape without forcing scenarios. |
| **Combat** | Realtime with auto-pause on threat | Rimworld-feel; touch-friendly. |
| **Health** | Single HP per pawn + status effects (Bleeding/Sick/Tired/Hungry/Wet/Cold/Downed/...) | ~80% of the drama for ~5% of Rimworld's health-system code. |
| **Scale** | 36 pawns, **80×80** MVP map (architecture sized to ~120² ceiling) | Roughly Stardew-farm size; readable when zoomed in, doesn't fit a phone screen — forces the world-view camera (pinch / pan / jump-to-alert) rather than strategic-overview-on-phone. |
| **Priority levels** | 5 (Critical / High / Normal / When idle / Off) | Matches Rimworld + Going Medieval contract. |
| **Failure state** | Ghost colony — no game over; storyteller drops wanderer in 35 days | Mobile-friendly; preserves player investment. |
### Architecture (tech)
- **Sim tick 20 Hz, render 60 Hz, decoupled.** Pawn positions lerp between sim ticks. (`docs/architecture.md` Time / tick model)
- **Pawn AI: 5-layer pipeline** (Decision → WorkProvider → Job + JobRunner → Status interrupts → Player overrides). Slimmer than Rimworld's ThinkTree. ~8001500 LOC GDScript for full MVP.
- **TileMap layers**: 0 Terrain · 1 Floor · 2 Wall · 3 Designation · 4 Roof · 5 Fog. Furniture / Pawn / Item / EffectFX as scene-instanced entities (not TileMap).
- **Pathfinding**: `AStarGrid2D` (built-in), updated on wall/door/furniture changes.
- **No background simulation** — app backgrounded = sim paused. Avoids "lost colony to a raid while at work."
- **Save format**: between sim ticks only; JobRunner mid-toil state round-trips from day one.
### Game design
- **5 skills** (Manual Labor / Crafting / Cooking / Medicine / Combat), 010 each, level by use, multiplicative speed/quality bonus. Skills modify duration and quality, never permission.
- **9 work categories** (Construction / Mining / Hauling / Cleaning / Crafting / Cooking / Plant / Doctor / Combat). 5-level priority matrix per pawn.
- **Storage**: floor zones AND independent crate furniture (4 stacks each), unified by `StorageDestination` interface. **16 filter chips** (Wd/St/Ir/Cu/Ag/Au/Cl/Veg/Mt/Gr/Ck/Md/Tl/Wp/Ar/Co), 5 priorities with Rimworld flow semantics. One stack per tile, one type per tile.
- **Production**: 2-step where medieval-sense (Iron→Ingot→Weapon, Grain→Flour→Bread); 1-step otherwise. 5 workbenches (Carpenter, Smelter, Smithy, Cooking hearth, Millstone), ~22 recipes. Full Rimworld bill semantics (one-shot count / forever / until-N + ingredient-quality filter + skill threshold).
- **Quality system** (Shoddy/Normal/Excellent/Masterwork/Legendary) on every crafted item; multiplicative stat bonus. Quality from crafter skill + RNG only (inputs are just resources).
- **Mood**: ~13 thoughts (data-driven registry, mix persistent + event-driven). Soft breaks at sustained mood < 25 for 30 in-game min Sulking or Wandering, recover at mood 35.
- **Lighting** (real shader at night), **auto-detected rooms** (named by furniture, scored for beauty + dirtiness), **dirtiness + Cleaning** (8th work category), **beauty score** with Quality multiplier.
- **Roofing**: indoor = Layer-4 Roof flag, sim-data only (no rendering, just an indoor tint on floors). Auto-roof when walls enclose 8 cells (BFS); No-Roof designation for courtyards. Plants don't grow indoors.
- **Weather**: 4 types (Clear / Rain / Storm / Cold snap), daily roll, season-weighted. Wet status accumulates outside in rain, decays indoors. 4 seasons × 12 days = 48-day year.
- **Combat**: 3 weapons (sword/axe/bow), 3 armor slots (helm/cuirass/boots). Walls + trees provide cover. Two-roll resolution (hit, then damage with armor reduction). Downed-then-rescue death model; doctors auto-prioritize. Combat=Off "defends if cornered, won't volunteer." Friendly fire ON.
- **Death / corpses**: Both burial AND cremation. Graveyard = special stockpile (Corpses-only); pawns dig graves, place permanent grave markers (tap deceased pawn-detail). Cremation pyre = furniture with single recipe (1 corpse + 5 wood). Corpses decay 050 fresh / 50100 rotting (no butcher) / 100 rotted.
- **Storyteller**: 25 prompts written in `docs/design.md`. Daily 6am roll, weighted pool, per-category cooldowns, tension model alternates quiet/threat per Tynan Sylvester pacing. Ambient banner for low-stakes, modal auto-pause for choice events.
### Touch UX
- **Bottom-sheet menus** instead of right-side panels. **Long-press** = inspect/context. **Tap world** = select. Speed/pause buttons fixed top.
- **Work-priority matrix**: 9 columns × N pawns, sticky pawn-name column, horizontal scroll on phone. Tap-to-cycle priority, long-press for 5-chip picker, swipe column for bulk-set. Per-pawn and per-job views layered on top.
- **Stockpile/container UI**: 4×4 chip grid for the 16 filter categories; same UI for floor zones and crates.
- **Storyteller events**: ambient banners for nudges/seasonal/lore; modal auto-pause for wanderer/threat/disease/milestone. Events log + "while you were away" digest at resume.
- **Indoor tint** marks "this is inside" without needing roof rendering matches Stardew/Rimworld convention.
- **World-view camera**: pinch-zoom + drag-pan + double-tap-to-center; selected pawn does **not** force-follow. Storyteller alerts/banners include a *Go there* tap that pans the camera to the event tile. **No minimap in MVP** revisit if playtest shows people getting lost on the 80² map.
### Art strategy
- **ElvGames "Ultimate Farming RPG" Humble bundle** is the primary art (`/mnt/d/godot/assets/humble set new/`, ~2.8 GB, 70+ packs, all 16×16, ElvGames license: commercial OK with credit).
- **Ventilatore Fantasy Tileset Complete Bundle** stays as medieval accent for biome variety / decorative props / animated water.
- Mana Seed series considered but **dropped** from buy plan (the bundle covers what we'd planned).
- **Authoring still required**: designation overlays (~2 hrs custom), possibly autotile bits on bundle wall sheets, possibly wolf sprite, possibly grave marker.
## Open questions / TODOs
### Audit / unblock-the-prototype action items
These are concrete checks to run before serious construction begins. Total ~75 min.
- [ ] **Aesthetic harmony test** open one tile from ElvGames Forest 4 Seasons + one from Ventilatore + view side-by-side. Decide whether they mesh (use both) or clash (drop Ventilatore from active use). ~15 min.
- [ ] **ElvGames autotile audit** count corner / T-junction / cap pieces in `Houses Tileset 2 Seasons/FG_Houses.png` and `Fortress Tileset 2 Seasons/FG_Fortress.png`. 16 wall variants per material autotile is solvable; <8 fall back to Mana Seed Iconic Homestead ($19.99) or custom-author. ~1530 min.
- [ ] **Wolf sprite source** bundle's Animal Sprites pack lacks wolves. Browse EvoMonster Packs 0115 or Turn-Based RPG Monster packs for a suitable predator. Or plan custom (~few hours pixel art). ~15 min.
- [ ] **Grave marker source** Retro Graveyard 16×16 (Tier 3) probably has it; verify. ~10 min.
- [ ] **License compilation** maintain credits string for every pack used (ElvGames + Ventilatore + any others). Display in game's credits screen. Confirm specific terms per pack before any commercial release.
### Design topics still open
- [ ] **Auto-roof big-room UX**: the 8-cell BFS cap silently fails on rooms larger than 8×8. Decide whether to (a) keep the cap and surface "this area is too large to roof split with an interior wall" hint when the player encloses one, (b) bump the cap to ~16 with the same hint at the new threshold, or (c) detect any enclosed area regardless of size. Affects `EnclosureDetector` + a new room-feedback UI.
- [ ] **Onboarding / first 60 seconds**: mobile-specific. Don't copy Rimworld's tutorial.
- [ ] **Touch UI for non-priority screens**: world view, build drawer, alerts, day-summary, pawn detail. See `docs/ui.md` "Screens still to design."
- [ ] **Background time / "while you were away" mechanic** locked to no background simulation in MVP; revisit if it feels bad in playtest.
- [ ] **Audio direction** who/where for SFX + ambient track? Bundle has 11 music + 8 SFX packs covering most needs.
- [ ] **Steam Deck input parity** gamepad-driven cursor, or full menu navigation by D-pad? Probably both.
- [ ] **Localization stance** English-only for MVP, but architect strings for i18n (already locked in CLAUDE.md).
- [ ] **Pawn name/backstory generation** hand-curated list vs simple generator.
- [ ] **Naming the game** "rimlike" is a working title.
- [ ] **Monetization stance** free? PWYW? Premium?
- [ ] **Tech / research progression** medieval tech tree shape.
- [ ] **Map / world generation** fixed seed for slice; procgen later.
### Tunable in prototype (not real "open Qs", just numbers to playtest)
- Sleep mood gradient values (`+5/+0/2/5/8`)
- Wet status thresholds (25 / 60) and accumulation rates
- Season weather weights (Spring/Summer/Autumn/Winter distributions)
- Hit-chance bonuses (skill ×5%, range ×5%, cover 40/20%)
- Bleed-out timer (6 in-game hours)
- Various mood thought magnitudes and decay times
## Vertical slice (MVP target)
Same scope as locked in `~/claude/ideas/rimlike/plan.md`. Realistic timeline 36 months solo for an MVP this rich.
- **1 biome** (temperate forest, ElvGames Forest Tileset 4 Seasons; Ventilatore foliage accents).
- **1 map**, **80×80 tiles**, fixed seed for now.
- **3 starting pawns** ("settlers" / "villagers"), each with name + portrait + one-sentence backstory.
- **Verbs**: chop wood, mine stone & ore, build walls/floors/furniture/crates, plant/harvest crops (34 types), cook meals (recipes), haul, repair, clean.
- **Needs**: hunger, sleep, mood (~13 distinct thoughts, soft breaks at sustained mood < 25).
- **Status effects**: Hungry, Tired, Bleeding, Sick, Downed, Wet (Damp/Soaked), Cold.
- **Storage**: floor zones AND containers, 16 filter chips, 5 priorities.
- **Quality system** on all crafted items.
- **Lighting** torches + hearths emit light; visual darkness at night.
- **Rooms** auto-detected, named by contents, beauty + dirtiness scored.
- **Cleaning** as 8th work category.
- **Day/night cycle**, ~5 min per day at default speed. **Seasons** (Spring/Summer/Autumn/Winter, 12 days each).
- **Weather**: Clear / Rain / Storm / Cold snap.
- **One disaster type**: wolves at night (bandit raids deferred).
- **One storyteller**: random quiet/threat alternation, 25 prompt corpus.
- **Save/load**, autosave on suspend, single slot.
- **Touch UI** end-to-end (no desktop-only gestures).
- **Sound**: minimal UI clicks, ambient day/night loop, alert sting.
## Session log
### 2026-05-10
- Promoted from `~/claude/ideas/rimlike/` (single multi-hour brainstorm session).
- Scaffolded `projects/rimlike/` from `_templates/project/`. Customized `CLAUDE.md`. Distilled `plan.md` into this `memory.md`. Moved companion files (design / architecture / ui / art) into `docs/`. `git init`, first commit "Initial scaffold". Created Forgejo repo `rimlike` (private), set HTTPS remote, pushed `main`. Archived idea folder to `~/claude/archive/ideas/rimlike/`.
- Wired Godot MCP Pro: `.mcp.json`, `.claude/settings.local.json` allowlist, three project-local subagents (`quick-edit`, `researcher`, `gdscript-refactor`). Added the MCP-Pro and tiered-delegation sections to `CLAUDE.md`. Editor plugin / `addons/godot_mcp/` re-copy still pending Godot project scaffold.
- Reviewed `docs/` against `memory.md` and `CLAUDE.md`. Decisions made:
- **Map size bumped from 40² 80²** for the MVP slice; architecture sized to ~120² ceiling. Pawn count stays at 3 start / 6 cap (frontier feel was rejected in favor of "split-the-difference" sizing Stardew-farm scale, not Going-Medieval scale).
- **World-view camera** = pinch-zoom + drag-pan + double-tap-to-center; storyteller alerts include a *Go there* tap. No minimap in MVP. No follow-cam (avoids fighting the player when issuing build orders across the map).
- Storyteller cooldown semantics: **per-event AND per-category, both gates must pass** (resolves the design.md vs architecture.md disagreement).
- `MAX_STACKS_PER_THOUGHT = 5` (was named-but-unset).
- Hauling-loop fallback: items that fail to find any valid destination after 3 retry passes drop on the floor and surface as a passive "No stockpile accepts X" alert.
- Cleaned up doc rot in `docs/design.md` and `docs/architecture.md` both had stale "8 work categories" intermediate sections still next to the canonical "9" lists. Removed the (8) snapshots.
- Updated `docs/architecture.md` perf assumptions (60² 80² with 120² ceiling).
- `docs/ui.md` got a new **World view camera (locked)** section; removed the world-view bullet from "Screens still to design".
- Open: auto-roof big-room UX (added to TODOs above) the 8-cell BFS cap silently fails on bigger rooms; player feedback path needs a decision before EnclosureDetector lands.
## External references
- **Forgejo repo:** https://git.rdx4.com/megaproxy/rimlike (private)
- **Owned art bundle (primary):** ElvGames "Ultimate Farming RPG" Humble bundle, local at `/mnt/d/godot/assets/humble set new/`. License: ElvGames terms (<https://elv-games.itch.io/terms>). Commercial OK with credit; no NFT/crypto/resale.
- **Owned art bundle (secondary):** Ventilatore Fantasy Tileset Complete Bundle — <https://itch.io/s/117124/the-fantasy-tileset-complete-bundle>
- **Mana Seed catalog (fallback if bundle gaps surface):** <https://seliel-the-shaper.itch.io/>
- **Iconic Homestead (autotile-ready wall fallback, $19.99):** <https://seliel-the-shaper.itch.io/iconic-homestead>
- **Lodestars:** Rimworld (Tynan Sylvester / Ludeon Studios), Going Medieval (Foxy Voxel), Stardew Valley (ConcernedApe).
- **Original brainstorm history:** archived to `~/claude/archive/ideas/rimlike/` after promotion. The session log there captures every decision's rationale.
- **Brainstorming-mode preference:** see `~/.claude/projects/-home-megaproxy-claude-ideas/memory/brainstorm-ask-dont-decide.md` (not directly applicable to projects but captures interaction style).