feat(sasch40): add Nebenraum, Marktplatz minigame & trapdoor to Hinterzimmer
- Split GameBoy chassis brand header: 'AKT III' on clean dedicated second line
- Add 5-room tavern architecture: Schankraum, Nebenraum, Marktplatz, Hinterland, Hinterzimmer
- Introduce Nebenraum (Kemenate/Atelier) with Amy at her easel painting the neon banner and Zuluman magic mirror
- Update Marktplatz scene with Mario juggling chainsaws/hops and NAT on the festival stage
- Implement Wildschwein-Schnick-Schnack-Schnuck minigame against NAT (Best of 3, Keiler > Dickicht > Lanze > Keiler)
- Replace secret tap with cellar floor trapdoor ('Luke zum Hinterraum') initially invisible
- Update automated playtest covering all 25 screens with zero console/network errors
- Document all architectural decisions in projects/sasch40/AGENTS.md
This commit is contained in:
@@ -115,16 +115,29 @@ This document records the foundational design decisions, their rationale ("Why")
|
||||
|
||||
---
|
||||
|
||||
### 9. Easter Egg Invisibility Pattern (`TavernView.vue`)
|
||||
* **The Decision**: Secret hotspots (e.g. `secret-tap-hotspot` in the Schankraum) must be 100% invisible initially.
|
||||
### 9. Cellar Trapdoor & Easter Egg Invisibility Pattern (`TavernView.vue`)
|
||||
* **The Decision**: Secret hotspots (the cellar trapdoor `.trapdoor-hotspot` in the Schankraum leading to the VIP Hinterzimmer) must be 100% invisible initially.
|
||||
* **Why**: An Easter egg marked with a glowing button or text badge is not a secret; it invites immediate trivial clicking.
|
||||
* **The Rule**:
|
||||
* The button must render with transparent background, no border, no outline, no box shadow, no hover change, and no tooltip (`:title="undefined"`).
|
||||
* Only upon the user's first click does it reveal the gold key icon, play a celebratory fanfare, unlock the Easter egg in the game store (+500 points), and transition to the secret room.
|
||||
* Only upon the user's first click does it reveal the door icon, label itself *„Luke zum Hinterraum“*, play a celebratory fanfare, unlock the Easter egg in the game store (+500 points), and transition to the secret room.
|
||||
|
||||
---
|
||||
|
||||
### 10. LocalStorage Persistence & Clean Game Reset (`gameStore.ts`)
|
||||
### 10. Multi-Room World Architecture & Tavern Minigames (`TavernView.vue`)
|
||||
* **The Decision**: Act III is structured as a spatial, interconnected five-room village hub rather than a cramped single screen:
|
||||
1. **Gaststube (Schankraum)**: King Sascha's table, Queen Verena on the balcony, Armend at the forge, Lutz (ZTUL) at the fireplace, door to Nebenraum, door to Marktplatz, and the secret *„Luke zum Hinterraum“* in the floor.
|
||||
2. **Königlicher Nebenraum (Kemenate & Atelier)**: Amy painting the royal *„Rave the Kingdom!“* banner at her easel in overalls, and the golden Zuluman magic mirror on the wall.
|
||||
3. **Haumdaucher Marktplatz**: Mario acrobatically juggling chainsaws and hops on the cobblestones; NAT (Josef) on the wooden festival stage with wild boar banners telling stories of his girls and heroic deeds.
|
||||
4. **Alpines Hinterland**: Mane (Ramona) hiking the alpine trail with walking stick; Hansi on the panoramic bench.
|
||||
5. **Geheimes VIP-Hinterzimmer**: Secret rave with disco chandelier, stroboscope, Pü's crystal staff, DJ Flo Maier, and Viktor the night-guard.
|
||||
* **Minigames & Exit Safety**:
|
||||
* **Bayerisches Gstanzl-Fechten**: Multi-round insult rhyming duel. Must always include a visible `[✕]` close button so players are never trapped.
|
||||
* **Wildschwein-Schnick-Schnack-Schnuck**: Best-of-3 tactical duel against NAT. Rules: 🐗 Keiler bricht 🌿 Dickicht, 🌿 Dickicht fängt 🏹 Lanze, 🏹 Lanze erlegt 🐗 Keiler. First to 2 points wins (+10 Korken, 1 Helles, `wildschwein_meister` achievement). Includes `[✕]` close button.
|
||||
|
||||
---
|
||||
|
||||
### 11. LocalStorage Persistence & Clean Game Reset (`gameStore.ts`)
|
||||
* **The Decision**: Game state automatically synchronizes to `localStorage` (`sasch40_game_save_v1`) on every mutation and is cleanly wiped when clicking *„🔄 NOCHMAL SPIELEN“*.
|
||||
* **Why**: Mobile users frequently refresh or switch apps to snap photos. Without persistence, a browser reload resets their progress back to Act I.
|
||||
* **The Rule**:
|
||||
@@ -151,7 +164,7 @@ make all
|
||||
|
||||
The `Makefile` targets:
|
||||
* `compile`: Runs `npm run build` (`vue-tsc -b && vite build`).
|
||||
* `build`: Runs `docker build --platform linux/amd64 -t sasch40:latest .` (copies `dist/` directly into `nginx:alpine`).
|
||||
* `build`: Runs `docker build --no-cache --platform linux/amd64 -t sasch40:latest .` (copies `dist/` directly into `nginx:alpine`).
|
||||
* `tag`: Tags as `registry.haumdaucher.de/sasch40:latest`.
|
||||
* `push`: Pushes to the Haumdaucher registry.
|
||||
* `deploy`: Executes `kubectl rollout restart deployment/sasch40 -n web` and monitors rollout status.
|
||||
@@ -171,7 +184,9 @@ This script:
|
||||
2. Verifies the Intro Screen and clicks Start.
|
||||
3. Simulates dialogue options on the Castle Balcony (Prologue).
|
||||
4. Tests movement and jump controls in Act II (Hopfen-Pfade).
|
||||
5. Interacts with hotspots, dialogue modals, and the Gstanzl duel in Act III (Taverne).
|
||||
6. Advances through the Party Express and reaches the Royal Certificate.
|
||||
7. Captures 10 screenshots to verify zero visual regressions.
|
||||
8. Asserts zero console errors, zero failed HTTP requests, and zero broken images.
|
||||
5. Interacts with all 5 rooms, hotspots, dialogue modals, Zuluman mirror, Luke zum Hinterraum, Gstanzl duel, and the Wildschwein duel in Act III (Taverne).
|
||||
6. Tests reload persistence in `localStorage`.
|
||||
7. Advances through the Party Express (Act IV) and reaches the Royal Certificate (Act V).
|
||||
8. Tests the `🔄 NOCHMAL SPIELEN` button and verifies return to Intro.
|
||||
9. Captures 25 screenshots to verify zero visual regressions.
|
||||
10. Asserts zero console errors, zero failed HTTP requests, and zero broken images.
|
||||
|
||||
Reference in New Issue
Block a user