memory.md: log tooltip + bed sprite + designation cleanup + crops session

This commit is contained in:
megaproxy 2026-05-15 19:52:06 +01:00
parent c93f889ff1
commit 840db55b44

View file

@ -284,6 +284,15 @@ Same scope as locked in `~/claude/ideas/rimlike/plan.md`. Realistic timeline 3
- **Pattern recorded — "rate-limit per-key SFX or the mixer chokes at fast sim speed".** First instinct was per-chop-tick SFX from `Tree.on_chop_tick`; at ULTRA (12× speed, ~12 chop ticks/sec/pawn × 3 pawns) that would saturate the audio mixer. Moved to completion-only SFX (Tree.fell, Rock.mined) plus an 80ms per-key cooldown in `play_sfx`. Future ambient/tick-based SFX should reuse this throttle.
- **Pattern recorded — "extract zipped asset packs into their own named folder, in place".** The bundle ships some packs as zips (Cozy Melodies Pack 1, Retro Farming Music 1) and others as already-extracted folders. Each zip's top-level entry was a folder matching its name, so `unzip -q` in-place created the expected `Cozy Melodies Pack 1/` directory alongside the .zip without flattening. Don't extract to a generic name like `audio_extracted/` — preserve the pack identity so licensing/credits stay traceable.
- **Hover-inspect tooltip shipped** in the same out-of-phase polish sprint as the audio + designation-gate work. New `scenes/ui/inspect_tooltip.gd` CanvasLayer at z=50, `PROCESS_MODE_ALWAYS` so it works during pause. Priority order is: pawn → wolf → corpse → grave marker → crop (exact tile) → tree (4-tile canopy) → big rock / rock → furniture at exact tile → furniture sprite-canopy (bed +1 tile up) → item → stockpile region → floor. Iterated three times against player feedback: trees not showing (needed canopy box), beds covered by floor (needed sprite-canopy fallback because bed sprite spans 16×32), crops not showing on the exact-tile pass.
- **Pattern recorded — "tall sprites need sprite-canopy fallback in pickers".** Bed sits 32px tall but its `tile` is only the foot row; hovering the headboard row hit the floor first because exact-tile match prefers furniture-on-this-tile. Fix: after the exact-tile pass fails, retry with `tile + Vector2i(0, 1)` for sprite-tall entities. Same trick will be needed for any future 2-tile-tall furniture (wardrobe, double bed, statue).
- **Bed sprite rebuilt procedural after atlas misidentification.** The 2026-05-12 visual pass used FG_Interior atlas coords for "beds" — those coords were actually chairs-with-cushions. User caught it as "not good and confusing where the bed is". Replaced with a procedural top-down draw: wood frame + striped blanket + pillow + foot board, 16×32, three deterministic colour variants seeded by tile coord. The cabin was 8×6 = beds slipped into the north wall; bumped to 8×7 at origin (44, 22) so the headboard row is interior floor.
- **Pattern recorded — "visually verify atlas coords during survey, not just by filename hint".** FG_Interior has a band of chair sprites at the same atlas band where beds would naturally live; previous pass logged them as beds without zooming in. Future atlas surveys should ALWAYS render a `_zoom.png` with red gridlines and visually confirm before committing to a coord constant.
- **Designation tile-highlight leaked across job completion.** Painting chop / mine / build left the orange/blue overlay on the tile forever, even after the job finished. Root cause: nothing called `designation_ctl.clear_cell()` from entity completion handlers. Fix: added `World.designation_ctl` field + `clear_designation_at(tile)` helper, wired into completion handlers of Wall, Floor, Door, Bed, Torch, Workbench, Crate, Tree, Rock, BigRock (iterates footprint), GraveSlot. Commit `f67c12c`. World boot wires the controller (`World.designation_ctl = designation_ctl`).
- **Crop sprites rebuilt with ElvGames atlas + four growable kinds.** Replaced procedural stem-and-circle draw with per-kind 16×32 Sprite2D anchored bottom-of-tile (matches tree pattern). Four kinds wired: wheat, potato, corn, strawberry — first two from 4-stage sheets, last two from 5-stage sheets (we slice the first 4 cols; the 5th is a post-harvest regrow frame we ignore). Stage-to-sprite mapping: TILLED=no plant, SOWN→col 0, G1→col 1, G2→col 2, G3 + READY both→col 3 (harvest highlight is the cue, not the sprite). Boot demo plants one column per kind east of the cabin. Harvest outputs: wheat/corn → grain, potato/strawberry → vegetable. Commit `c93f889`.
- **Pattern recorded — ".import auto-generation via `godot --headless --import`".** Writing `*.png.import` companion files by hand with placeholder paths works but Godot rewrites them with proper UIDs on the first import scan. Reliable workflow: copy PNG into `art/`, write minimal .import (UID will be ignored), then run `/mnt/d/godot/Godot_v4.6.2-stable_win64_console.exe --headless --import` once to generate the .ctex binaries. Headless boot fails until the import scan runs. Same pattern from 2026-05-12 confirmed.
- Delegation report (whole-day 05-15 polish sprint): **No delegation — all on Opus.** Sprite-atlas surveys, MCP runtime verification (camera positioning, dialog dismissal, stage forcing), and the iterative play→fix→play loop kept the same files hot in context; Haiku/Sonnet handoffs would have re-read every time. The `researcher` (Haiku) dispatch from earlier in the day for the job-system audit is the only delegated work.
## External references
- **Forgejo repo:** https://git.rdx4.com/megaproxy/rimlike (private)