Marks bed-claim (LOW) and drag-paint (MED) bugs as resolved. Adds
session entry covering 6 commits from today: critical-bug fan-out
(save/load, sow, ingredient2, hauling, storyteller), A+B+C, D+E+F,
drag-paint+gitignore, bed deconfliction, Sprint A cleanup. Five new
patterns recorded — trust-but-verify, Job.target_node deconfliction,
workbench.from_dict completion side-effects, ingredient2 inversion,
delegation report.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three-agent fan-out (gdscript-refactor x3) ships the chosen Phase 19
approach: contextual hints during first session + a Help reference,
plus a sweep of hover tooltips for desktop discoverability.
- HintSystem (autoload) + HintOverlay (layer 22 top-center banner):
7-step tour gated on player events — welcome (boot+2s), pawn select,
build drawer open, stockpile painted, work matrix open, day_ended,
tour_complete. Per-hint dismissals persist as Array[String] in
GameState.settings['dismissed_hints']. Max-3 FIFO queue if hints
chain. Reduce-motion path snaps in/out instead of tweening.
Reset_tour() public API for the Help modal.
- HelpModal (layer 20): 5-tab static reference (Controls / Verbs /
Priorities / Storyteller / Tips). Opens via EventBus.help_requested,
dimmed backdrop, X/Esc/backdrop-tap dismiss. SettingsMenu gains an
'Onboarding' section: Show-hints checkbox, Help button (emits
help_requested), Reset hints button (calls HintSystem.reset_tour with
has_method guard). Pre-existing 'W' keybind reference fixed to 'P'.
- Tooltip pass: tooltip_text via Strings.t on every TopBar button
(10 buttons incl. speed shortcuts), BuildDrawer FAB, and every tool
button in BuildDrawer (21 tools). _add_tool_btn extended with optional
tooltip param. ~34 new tooltip.* string keys.
Contracts pre-written (Opus): EventBus.help_requested, hint_dismissed,
ui_panel_opened signals; GameState show_hints + dismissed_hints
defaults; BuildDrawer.open + WorkPriorityMatrix.open emit
ui_panel_opened so HintSystem can subscribe via one signal.
Also recorded [MED] known bug in memory.md: drag-paint with active
paint tool is eaten by camera drag-pan.
MCP runtime verified: welcome banner fires 2s after boot, dismiss
queues build_drawer hint on next ui_panel_opened, dismissed_hints
persisted as ['welcome'], HelpModal opens via help_requested with
tab switching working (Controls → Tips verified visually).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds an AudioManager autoload with three buses (Master, Music routed to
Master, SFX routed to Master), a small catalog of looping music + one-shot
SFX, and a single persistent AudioStreamPlayer for the music director.
Music
* Day and night loops swap on Clock.phase_changed (night during the night
phase, day everywhere else). Tracks pulled from Retro Farming Music 1
(day) and Cozy Melodies Pack 1 (night), both loopable OGG.
SFX
* Tree.fell, Rock.mined, BigRock.mined → tree_fell / mine_tick.
* EventBus.pawn_took_damage → combat_hit (Sword Pack 1).
* EventBus.storyteller_event_fired → ui_confirm sting.
* EventBus.alert_added → ui_click.
* play_sfx is rate-limited per key (80ms cooldown) so fast-sim doesn't
saturate the mixer.
Settings + suspend
* SettingsMenu master/music/sfx sliders now live-bind to the bus dB via
Audio.set_*_linear (linear → dB internally, 0 → -80dB silence). The
ambient slider is intentionally unwired; no ambient bus this pass.
* NOTIFICATION_APPLICATION_PAUSED + FOCUS_OUT mute the Master bus to
match the existing "no background sim" rule. Resume + focus restore it.
Bundle housekeeping
* Two zipped packs in the ElvGames bundle (Cozy Melodies Pack 1, Retro
Farming Music 1) extracted in place to keep pack identity intact for
the license/credits string. 8 OGG files curated into audio/ at ~5.3MB.
Verified end-to-end via MCP runtime: buses online, day_loop plays at
boot, manual phase swap day→night→day round-trips, slider linear→dB
mapping correct (0.5 → -6.02dB, 0.0 → -80dB), tree_fell SFX triggers.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Player reported pawns ignoring chop designations. Root cause:
ChopProvider/MineProvider iterated World.trees/World.rocks
unconditionally — paint set a null sentinel and never touched the entity,
so designation was cosmetic only. Pawns auto-chopped nearest unfelled tree.
* Added chop_designated: bool to Tree, mine_designated: bool to Rock and
BigRock (footprint-aware: paint on any of the 4 footprint cells flags
the boulder). Save/load round-trips the flag.
* world.gd._on_designation_added 'chop'/'mine' cases now find the entity
at the painted tile and flip the flag. _on_designation_cleared inverts.
* Boot seed auto-designates SAMPLE_TREES / SAMPLE_ROCKS / SAMPLE_BIG_ROCKS
so the cabin demo still produces wood + stone end-to-end without
requiring the player to paint first.
Also from the same audit (researcher mapped all 11 WorkProviders):
* DoctorProvider + EatProvider now pre-check reachability with
pathfinder.find_path before issuing a job, mirroring HaulingProvider's
pattern. Previously they handed out doomed walks that JobRunner had to
cancel, busy-spinning at 20 Hz.
Verified end-to-end via MCP runtime: undesignated tree/rock returns null
from provider; paint flips the flag and provider returns a chop/mine job;
un-paint clears the flag; BigRock footprint paint works on any of the 4
cells.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three playtest-reported bugs fixed out-of-phase before Phase 18:
* Furniture build-queue gap: Torch / Bed / Crate / Workbench / CremationPyre
were missing World.register_build_site(self) in _ready, so newly-painted
designations never entered ConstructionProvider's iteration. The seeded
cabin pre-built everything via _spawn_complete_* helpers, masking the gap
until a player painted a fresh furniture designation.
* Wall-trap regression for bystanders + walk-through pawns: Wall._complete
now dislodges any pawn on the tile via new Pathfinder.find_nearest_walkable
BFS helper; Pawn._advance_walk re-checks next tile walkability before
stepping, aborts walk + cancels job + lets Decision reroute. Phase 6's
adjacent-stand fix only protected the BUILDING pawn.
* Floor / Pawn Y-sort ambiguity: Floor was anchored at tile-center
(same Y as Pawn), so Y-sort tiebreak fell to scene-tree order and
Floor (spawned later) drew over Pawn. Moved Floor origin to top-of-tile
so Floor.y < Pawn.y under Y-sort; _draw rect offsets compensate.
All three verified via MCP runtime: torch built end-to-end, all 3 pawns
working on different jobs with no idle traps, pawn renders over floor.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Walls, items, and doors swapped from procedural draws to ElvGames atlas
sprites this session. Notes on tileset survey results (which atlases have
1-tile-wide doors vs castle gates), MCP execute_game_script statement
limit, and the .import-generation step required for new textures.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The 'drama pair' shipped together via 3-agent fan-out.
Phase 9 — Status effects + Medicine:
- Status data class (PERSISTENT/EVENT, severity stacks max=3) + StatusCatalog
(Bleeding ticks HP loss; Downed = incapacitated)
- Pawn HP (100 max, 30 downed threshold, 50 revive threshold), take_damage,
heal, add_status/remove_status_by_id, is_downed/is_incapacitated, downed
visual (body rotated 90° + desaturated)
- DoctorProvider (priority 9, highest) — scans World.pawns for nearest downed
pawn, finds medical bed (or any bed fallback), emits 4-toil job:
walk_to_patient → rescue → walk_to_bed → treat
- Bed.is_medical with red-cross marker draw on pillow; round-trips save
- KIND_RESCUE + KIND_TREAT toils + JobRunner _tick_rescue/_tick_treat
(snap-to-bed on first treat tick, +0.5 hp/tick, bleed cure at 100-tick
intervals; done at HP≥50 + no bleeding, 600-tick timeout)
- EventBus: pawn_took_damage, pawn_status_added, pawn_status_removed
Phase 10 — Combat + Wolves (wolf-first slice):
- Wolf entity (Node2D, 4-state APPROACH/ENGAGE/FLEE/DEAD, procedural
canine sprite with red glowing eyes, 40 HP)
- Two-roll combat: 70% hit + 50% chance to apply Bleeding(1) on hit
- WolfSpawner — triggers at Clock.darkness_factor()≥0.8 with 1-in-game-day
cooldown, packs of 1–2 at random map-edge cluster
- World.wolves registry + register_wolf/unregister_wolf
Integration: world.tscn load_steps 15→17 with DoctorProvider + WolfSpawner
nodes. world.gd registers doctor at top of provider list (priority 9 >
sleep 8 > eat 7 > construction 6 > chop≈plant 5 > mine≈craft 4 > haul 3
> rest 0). Middle bed at (47,24) marked is_medical=true.
MCP runtime verified: Bram took 75 dmg + Bleeding(2) → Downed (hp 25) →
Edda + Cora both volunteered doctor job → walked to patient → carried to
medical bed → treated → Bram healed to 94.2 hp, statuses cleared, back to
work. Wolf raid at day 3 22:00 fired; 4 wolves alive across raid cycles
by day 4 01:51. Screenshots confirm red-cross medical bed and wolf
silhouettes at night.
Phase 10 deliberately partial: wolf-side combat ships, pawn-side
weapons/armor/cover/friendly-fire deferred — full chain
(wolf→bites→pawn→bleeds→doctor) awaits player weapons.
Bleed-out timer at demo value (1200) vs design value (432000 = 6 in-game
hours) — documented in status_catalog.gd for first time-balance pass.
Delegation: Agent A (status + pawn HP), Agent B (doctor + treatment),
Agent C (wolf + spawner) — all Sonnet gdscript-refactor; integration on
Opus.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Researcher (Haiku) scanned all 6 Ventilatore packs (Premium, Castles
and Fortresses, Medieval Interiors, Desert Oasis, Snow Adventures,
Turning of the Seasons). The bundle is character + terrain + decoration
only — no animal/creature sprites at all except player + slimes.
Wolf options now narrowed to: commission, CC0 source, or recolor-a-dog
placeholder until Phase 10. Ventilatore-search sub-option closed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wood walls (early game) custom-authored on top of FG_Houses warm-brown
timber palette to preserve the Stardew-cabin warmth that's the project's
aesthetic anchor. ~½ day of pixel art for corner/T/cap/cross variants.
Stone walls (upgrade material) imported from FG_Fortress autotile-solvable
as-is. Both materials plug into the same WallMaterial enum / construction
pipeline. Phase 5 estimate bumped from 2-3 wks to 2.5-3.5 wks.
Phase 1 wall-rendering test now specified: use FG_Fortress as the
drop-in test material; wood walls land in Phase 5 alongside the
authoring task.
Iconic Homestead $19.99 fallback formally not needed.
memory.md decisions table now includes the wall locks; the original
3-option open question collapsed to a back-reference. art.md got a
new 'Wall-material decision' section replacing the options block.
Wolf-sprite question still open; Ventilatore search dispatched.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Project scaffold:
- project.godot at repo root, GL Compatibility renderer (max mobile reach),
pixel-snap on, texture filter nearest, sensor_landscape orientation
- 7 autoloads: World, Sim, GameState, EventBus, Strings, Audit, SaveSystem
- scenes/main/main.{tscn,gd} smoke-test scene with autoload assertions
- Folder layout matches tavernkeep idiom: autoload/ at root, scripts
co-located with scenes/ (not the scripts/autoloads/ mirror originally
sketched in implementation.md)
- Input map: pause, speed_cycle, speed_normal/fast/ultra, confirm, cancel.
Mobile gestures (pinch/drag/long-press) handled at script level via
Godot's InputEventScreenTouch/Drag/MagnifyGesture.
- SaveSystem skeleton: SAVE_VERSION=1, JSON to user://save_slot.json,
version-mismatch warning. Phase 3 expands to real entity state.
- icon.svg placeholder (cabin silhouette on dark green field)
- README.md points at memory.md / implementation.md / docs/
Headless verification: 'godot --headless --path . --quit' exits 0,
'[main] Phase 0 smoke test online.' prints, no errors. Editor-side
green-dot check still pending — needs human launch of editor.
Asset audit (researcher Haiku, 2026-05-10):
- FG_Houses.png NOT autotile-solvable — pre-built decorative house
compositions, 4 distinct roof palettes, no modular wall family.
~½–1 day per material to author terrain bits on top.
- FG_Fortress.png IS autotile-solvable — ~20–30 modular tan-stone
pieces. Wang-style Godot 4 terrain works with minimal extra art.
Iconic Homestead $19.99 fallback not needed.
- No wolf sprite anywhere in the bundle. EvoMonster packs all
cute/fantasy. Need commission, CC0 source, or Ventilatore check.
- Retro Graveyard 16x16 [Kingdom Explorer] confirmed in Tier 3 with
full graveyard suite — direct use in Phase 14.
New open questions surfaced in memory.md:
- Player-built wall material strategy (3 options laid out)
- Wolf sprite acquisition path (Phase 10 blocker)
Project move:
- Repo physical location moved from ~/claude/projects/rimlike to
/mnt/d/godot/rimlike (D: drive, fast for Windows-side editor).
- Symlink at the original WSL path preserves the home-CLAUDE.md
layout convention. Mirrors tavernkeep's pattern.
- Set core.filemode=false to silence DrvFs's everything-is-0777
false-positive on git diff.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
21 phases from clean-slate to MVP, dependency-ordered with each
phase ending in a runnable demo state. Includes:
- Pre-implementation audit (the 75-min asset checks from memory.md)
- Phases 0–20 with checklist + acceptance criteria + spec-doc refs
- Two DECIDE points (Phase 13 big-room UX, Phase 19 onboarding)
- Out-of-scope list (procgen, biomes, butchering, surgery, etc.)
- Scope-cut levers ranked by gameplay-cost-per-week-saved
- De-risking spikes per phase
- Wired into memory.md index + session log; current Status =
Phase 0 (gated by the 75-min audit)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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>
Promoted from ~/claude/ideas/rimlike after a single multi-hour brainstorm
session. memory.md distilled from plan.md; companion design / architecture /
ui / art docs preserved under docs/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>