Who? · Devlog

Tag 2 · Mittwoch, 29. April 2026

Tag 2 — Saves, Skill-Karten, Stealth in Konstanz

Aus einem Raum wird ein Spiel

questsavescantinaarchonboarding

Spieler-Sicht

Heute hat das Spiel ein Skelett bekommen. Was gestern nur ein einzelner Raum war, kriegt einen Körper: Saves, Skill-Karten, eine spielbare Stealth-Quest, und eine Pinnwand, die das Erlebte erinnert.

Erinnerungen

Die Cantina hat jetzt einen Erinnerungs-Spiegel im eigenen Zimmer. Jeder Spielstand ist ein Slot mit Vorschau-Bild. Du kannst zurück­spulen, verzweigen, vergleichen — zwei Erinnerungen Side-by-Side, oder eine verteilbare URL für eine Welt, die du jemandem zeigen willst.

Konstanz, 1414

Erste echte Reise: durch eine Tür der Cantina trittst du ins Konstanzer Marktplatz-Pflaster und bist Lukas, Gardist im Dienst Sigismunds. Du schleichst, redest, entscheidest. Das Spiel friert ein, sobald ein Dialog-Modal aufgeht — niemand stirbt, während du nachdenkst.

Skyrim-Moment

Wenn du etwas Neues entdeckst, fährt eine Skill-Karte mit Glockenschlag hoch. Inspiriert von dem einen Moment, den jeder kennt.

Kleinkram

Mini-Game „Laternen" mit Boss-Welle und Daily-Mode. Pinnwand in der Cantina, die LLM-generierte Tagebuch-Einträge sammelt. Hund + Spatzen streunen jetzt durch den Raum. Bodensee-Karte als Pergament-Hub für zukünftige Reisen.

Macher-Sicht

Was heute gebaut wurde

Modes-Architektur in drei Schichten extrahiert (docs/MODES_ARCHITECTURE.md):

  • Schicht 1 — Engine-Core (audio, ink, tilemap, entities, character, modes-registry). Das ist Phaser-Wrapper + Lifecycle.
  • Schicht 2 — Capability-Library. Stealth-Vision, Choice-Modal, Compass — als wiederverwendbare ECS-Komponenten.
  • Schicht 3 — StealthMode, der die Caps zu einem Spielmodus komponiert. Konstanz wurde noch heute auf StealthMode migriert.

Save-System in Wochen-Iteration:

  1. Woche 1: event-sourced foundation — reducer, audit-log, snapshot.
  2. Woche 2: server + sync — Saves leben jetzt in der DB.
  3. Woche 3.1–3.3: MemoryMirror UI, Branch-Slider mit State-Vorschau, Tutorial + Avatar-Shortcut + Audit-Log-Viewer.
  4. Woche 4: Replay + Export/Import + Schema-Migration; Multiverse als Save-URLs.

Diff-Modus. Zwei Snapshots Side-by-Side. Reducer-Output als struktureller Diff (nicht textuell), wir zeigen entry-level Unterschiede wie „NPC X freigespielt", „Tier 2 erreicht".

Tradeoffs

Event-sourced statt naked-state-snapshot. Mehr Code im Reducer, aber Branches und Replay sind quasi gratis — und Multiverse-URLs sind nur ein Cursor in den Event-Stream + ein Hash.

Konstanz als Migrations-Ziel. Die Quest war bereits hand-gepinselt; sie auf StealthMode zu portieren war der Lackmustest, ob die Capability-Schicht wirklich generisch ist. Test bestanden — bis auf das Choice-Modal-Freeze (1.5s Grace beim Resume), was eine echte Anforderung exposed hat: World-Pause-on-UI-Modal als ECS-Lifecycle, nicht als Dialog-Sonderfall.

Diff-Stats

145 Commits, +68 708 / -6 010, 2 172 Files. Sprite-Pipeline + Audio-Generierung machen 71 % der Datei-Bewegungen aus; der eigentliche Code-Anteil ist ~150 KB Source-Code.

Stats

145
Commits
+68708/-6010
Zeilen
2172
Files
13.7 h
Aktiv
Erster Commit
06:01 (Mittwoch)
Letzter Commit
05:37
Spannweite
23.6 Stunden
Aktiv (ohne Pausen > 30min)
13.7 Stunden
Pausen
4
Längster Fokus
10.4 Stunden

Wo wurde gearbeitet

  • 67% apps/web/static/sprites
  • 14% apps/web/src/lib
  • 4% apps/web/static/audio
  • 3% apps/web/quests/konstanz
  • 2% apps/web/src/routes

Commits (145)

Volle Liste aufklappen
  • 4f4fbf2 feat: items-first room growth, phase 1 (alcove items)
  • 6e17550 feat: phase 2 mini-rooms — walls grow once 3+ items collected
  • 3979901 feat: phase 3 — separate workshop scene per character
  • b797248 feat: per-deck lamps + flame-flicker animations via pixellab
  • a933bc6 feat: cozier cantina + workshop, leo's room dressed up
  • dfe592e feat: live item drops, mini-room growth animation, sound effects
  • 7064f71 docs: --size 68 workflow warning + 429 auto-retry
  • c1bb3a7 fix: pixellab animate-character requests all 8 directions
  • 7e7dec9 feat: front door in the cantina south wall
  • 3911cc6 feat: register hypatia in cantina, scale 136-canvas sprites to baseline
  • 7404064 feat: openable deck chests with collectible dossier cards
  • a7345e9 feat: front door at top-wall, mystery enters diagonally through it
  • 11c5de8 feat: pixellab sprite + gemini portraits for asset-bearing chars
  • 39d585e feat: respawn a fresh mystery after each reveal
  • 1683bea chore: cleopatra full 8-direction idle (regen)
  • 74528ea feat: 3-thinker panel — confucius, ibn khaldūn, hannah arendt
  • 079668c feat: cinematic reveal — anticipation, aura, mood bubble, npc reactions
  • b327ae2 feat: arendt sprite + portraits for the 3-thinker panel
  • e96470f feat: cantina wall tile + flagstone floor in env generator
  • f7c7adb chore: regenerate cantina floor + add wall tile via PixelLab
  • b279152 chore: re-roll cantina floor to neutral dark walnut
  • d9b83e6 chore: re-roll cantina wall to dark espresso oak paneling
  • 352cc79 feat: panel-discussion mechanic — server route, table zone, dialog
  • d685e7a chore: re-add panel files dropped during parallel rebases
  • 6843e6c feat: cantina wall variety — accent tiles + mounted wall props
  • 1516e97 docs: lighting research report — phased rollout plan
  • 8e67c35 feat: cantina lighting — darkness mask, mood tint, time-of-day, sunbeams
  • d8ac5a0 fix: load root .env in dev/start, switch gemini to 2.5-flash w/o thinking
  • b5fa325 feat: wire cantina lighting + discussion polish + env-wall tilesprite
  • fcfbc81 feat: daily challenge — one mystery per UTC day, leaderboard, anti-spoiler
  • 11859e4 chore: add 'pnpm test' script for server bun tests
  • b081aea feat: lighting tuning — softer sunbeams, larger character pools, glow behind sprites
  • 2e2a304 perf: cantina lighting — batch erase + drop redundant lights
  • 1730d70 chore(pixellab): default new sprites to 96×96 canvas
  • 5920038 chore(sprites): re-generate 38/39/40 at 96×96 canvas
  • 8f8b4b7 feat: FPS HUD + LLM round-trip telemetry
  • db456f9 feat: player-wide inventory dashboard (cards · items · stats)
  • 05c26a3 feat: pixel avatar pipeline + mirror room handle + dev test-user
  • 192bbc1 feat: cantina NPCs follow hotspot routines instead of random wander
  • 662535a feat: diogenes (id 41) — bouncer character + onboarding plan
  • eaab157 feat: foyer scene + hooded player + onboarding routing guards
  • 02636bb feat: add Diogenes von Sinope dossier (id 41)
  • 4c51463 fix: drop hotspots an NPC can't reach without moonwalking
  • 82693aa feat: bouncer dialog — diogenes question tree + words-only path
  • 9819650 feat: bouncer dialog photo path — upload + vision-extracted appearance
  • 8d3d3c2 feat: portraits for Diogenes von Sinope (id 41)
  • 4643cc8 feat: foyer reveal animation + 3-state door
  • 8f58bc7 feat: regenerate Marie Curie sprite with idle + walk animations (id 3)
  • 2b4ec72 feat: foyer routing polish — failed-status recovery + auto-open
  • 9f6fe13 feat: mirror reopens bouncer dialog for re-onboarding
  • ee14821 feat: cantina south foyer-door — permanent re-onboarding entrance
  • af9fee6 feat: renommee module — five-tier reputation counter with localStorage
  • 65fb8d3 feat: skill-lock layer — gate run/jump/punch/slide behind unlocks
  • 3a3409e feat: keyboard shortcuts help overlay
  • b811ae4 fix(dev): hoist test-user auto-login into +layout.ts so child loads see the session
  • b884b69 feat: quest engine bootstrap — Ink + Tiled pipeline (Phase 0)
  • 4efd96c feat: jump skill discovered via training stool in workshops
  • 2e29d65 feat: PixelLab quest-tileset generator + demo config
  • 368376e docs: ink + tiled author guides + ink-author Claude skill
  • d2a3c72 feat: daily bearer — second hooded host with patrol + diegetic candle
  • e4183ef feat: bouncer greeting reads renown tier — first feedback loop
  • 53439d1 fix(auth): drop custom /auth basePath, mount on better-auth's vendor default
  • 061d71d feat: espresso at the bar — first temporary buff
  • 5ade53e feat: smalltalk grants renown — first per-character point source
  • e18e256 feat: quest engine MVP runtime — InkBridge + QuestScene + /quest/[slug]
  • 2e7363e feat: items proof-of-concept — top hat in player room wardrobe
  • 8a61bce docs: progression model — four layers, file map, what's missing
  • f61a3bd fix(quest): guard async-create + fullscreen layout for /quest routes
  • 9dcd7e4 feat(quest): stealth Patroller — vision cone, alert FSM, chase, hide-spots
  • e1f521c fix: relocate jump-trainer from workshops to cantina NW corner
  • 9fbce62 feat: drop global top nav — everything fullscreen (game rule #1)
  • fd6af33 feat(quest): Tiled object-layer loader + PixelLab guard sprite
  • eeb5344 feat: erinnerungs-regal — skill trophies + empty slots in player room
  • 070c9b1 feat(quest): tile-layer rendering — pixel art floor + walls from .tmj
  • 1b4e1e1 feat: audio overhaul — sample-based footsteps, multi-track music, NPC voice greetings
  • b930b59 feat(quest): polish — state-change feedback + cantina quest signpost
  • bd4aeff feat(foyer): wire foyer music + bundled avatar-swap in-flight
  • ae2495b feat(quest): multi-patroller + WebAudio sfx (detection / caught / footstep)
  • 9b3a4bb feat(onboarding): credits + guest-migration data layer
  • a1ebec9 feat(onboarding): server endpoints for three-path foyer
  • d3e1a99 feat(onboarding): three-path foyer dialog + Wanderer preset assets
  • c28a0dd feat(quest): 8-direction guard sprite + facing-driven texture swap
  • c8c6bc2 feat(foyer): hooded player swaps anim keys on reveal
  • 5d14918 feat(quest): Konstanz quest skeleton — Akt 1 marketplace prototype
  • 1f42e62 feat(quest): NPC dialog interaction + divert-action triggers (Step A)
  • bdc98ea feat(audio): per-bus volume sliders, smalltalk acks, ambient SFX layer
  • 17cf256 feat(quest): Konstanz tavern building + eavesdrop trigger (Step B)
  • 8509d54 feat(quest): Akt 2 Tägermoos + cross-act transition (Step C)
  • 46ddbf6 feat(controls): click-to-walk + click-to-talk
  • 244f159 feat(quest): Akt 3 Gottlieben — full three-ending finale
  • dc0256a feat(quest): cinematic fade between act transitions
  • c9e036e feat(quest): walk + idle animations for Patroller and NPCs
  • 8dd55b2 feat(quest): cantina pergament map — Bodensee quest hub
  • 85acf20 feat(quest): persist mid-quest progress + Fortsetzen flow
  • 2c4b9b1 feat(stealth): crouch mode (Strg/X) + Patroller visibilityFactor
  • 84c29a0 feat(quest): freeze player movement while dialog modal is open
  • 80c3015 feat(quest): locked stub-pins around the Bodensee — coming-soon teasers
  • 48cb602 feat(player): GroundedEntity z-axis foundation + jump as integrated verb
  • 3b07015 feat(quest): Konstanz tavern back-fence as first jump-gated path
  • 432790f feat(quest): map route animation + tag/nacht tint
  • 582dde8 feat(skills): Skyrim-style unlock ceremony — chime + award card
  • bbee800 feat(cantina): ambient ginger tabby — sleeping + walking near bookcase
  • 4134086 feat(cantina): pixel editor — Staffelei + Werkbank in player room
  • ca8896d feat(cantina): dog + sparrows + crouch-purr — extends ambient critter system
  • 4199d4d docs: consolidate plans + reports under docs/
  • 3b9fed7 feat(saves): event-sourced state foundation (Woche 1)
  • aaf1a19 feat(cantina): multi-pose Critter state machine + spike on quadruped pipeline
  • b3d9ebd feat(saves): finish Woche 1 — PlayerRoom + Quest events, reducer tests
  • 3c2b6bb docs(skills): /critter — end-to-end workflow for new ambient animals
  • a045fdc feat(saves): server + sync — Woche 2
  • 6dc1a49 feat(saves): MemoryMirror — Slot-Picker UI (Woche 3.1)
  • 7a54851 feat(saves): BranchDialog — Timeline-Slider mit State-Vorschau (Woche 3.2)
  • 2c15b74 feat(saves): MemoryMirror polish — Tutorial, Audit-Log, Avatar-Shortcut (Woche 3.3)
  • 6c894c8 chore(tooling): playwright screenshot CLI for dev iteration
  • 17a5900 art(konstanz): regenerate marketplace tileset with explicit urban prompts
  • 2041738 fix(konstanz/act1): move spawn off the south-gate trigger
  • 9158654 feat(quest/dialog): pergament-styled choice modal
  • ac989dc feat(cantina/map): fullscreen pergament map with svg bodensee + pinned-note
  • bdb5956 feat(quest/hud): act-title + objective strip at top
  • e890267 feat(saves): Replay + Export/Import + Schema-Migration (Woche 4)
  • 30335f8 feat(journal): Cantina-Tagebuch — LLM-generierte Chronik-Einträge an einer Pinnwand
  • 5ba3e56 feat(saves): Diff-Modus — zwei Erinnerungen Side-by-Side vergleichen
  • d504010 feat(saves): Multiverse — Save-URLs für teilbare Erinnerungen
  • 1de59ae feat(arch): Schicht-1 Engine-Core — audio, ink, tilemap, entities, character, modes-registry
  • 6a446d7 feat(arch): Schicht-2 Capability-Library
  • 3b192aa feat(arch): Schicht-3 StealthMode + Lab-Routes
  • 4c5aada refactor(arch): Cantina + Quest-Konsumenten auf Engine-Layer umbiegen
  • b845ea8 feat(quest): _demo + konstanz auf StealthMode migriert
  • 7950639 docs(arch): MODES_ARCHITECTURE Migrationsstand + offene Schulden
  • 99db6c9 fix(routes): move /play/[token] → /share/[token] to break SvelteKit conflict
  • aef5bb2 feat(quest): objective compass + parchment back/end + shot --emit
  • d7fa83c docs(saves): Multiverse-Pfad korrigiert + Phase-4-Status auf ✅
  • a55fa28 fix(scenes): Foyer + PlayerRoom zoom-to-fit statt fixed setZoom(2)
  • ec628b0 feat(saves): floating-menu eingang „📜 Erinnerungen" + DiffDialog snippet fix
  • 4a62537 feat(laternen): Boss-Wave + Daily-Mode mit Seed + Mode-Picker
  • 2e24024 chore(server): mount save-routes (+ laternen along for the ride)
  • 7bd3093 fix(stealth): Welt friert während Choice-Modal ein, 1.5s Grace beim Resume
  • 8b7604e fix(saves): MemoryMirror Slot-Aktionen umbrechen statt zu quetschen
  • 19cc000 feat(laternen): leaderboard, boss-survival reward, power-ups
  • abd7260 feat(saves): „+ Neue Erinnerung" — Single-Click mit thematischem Auto-Namen
  • 90a0d7c feat(cantina): Best-of-the-Day pin neben der Laternen-Tür
  • 3f92a34 feat(cantina): Wachstumssystem-Foundation — Char→Bay→Möbel→Tier, Realtime+Sleep
  • 653a8fb feat(cheats): Code-Word-Buffer + DevTools-API mit Server-Flag-Verhalten
  • 30d0208 feat(cantina): /sleep-Action via Z-Taste — Wachstums-Welle-3 manuell triggern
  • 23048dc feat(sprites): Idle 8-dir für Tesla/Gutenberg/Hypatia + /character-sprites Skill
Geschrieben mit Claude Opus 4.7 (1M context) — Hand veredelt