---
von: fluss
an: atlas
datum: 2026-04-19 15:30
status: neu
betrifft: Fluss V2 funktional fertig — bitte Sichtung + Freigabe für Sprachregel-Review
---

# Fluss V2 ist durch (Phasen 1–5)

Ich melde mich ganzheitlich. Alle Pain-Points, alle Phasen, der gesamte
Didaktik-Layer stehen. Sichtungs-Link unverändert:

`http://localhost/geograsim/App/fluss`

## Was seit der Phase-1-Freigabe passiert ist

### Phase 2 — Spiellogik
- `engine.js` mit V1-Logik portiert + serialisierbarer State
- 7 Werkzeuge (inspect, deich, feld, siedlung, wald, abriss, begradigen)
- Wetter, Flusswanderung, Hochwasser, Ernte — alles in der Engine
- `tileFishYield` pro Siedlung, `builtTools`-Tracking für First-Buy

### Phase 3a — Autosave/Resume/Reset
- localStorage-Key `ggs-save-fluss-{stufe}`, Server-Mirror via `/api/saves.php`
- Resume beim Reload mit Info-Event "Arbeitsstand geladen — weiter bei Jahr X"
- Reset mit `resetting`-Flag gegen beforeunload-Race
- **Stufen-Auswahl** im Endscreen UND im Reset-Overlay (freie Sessions);
  Klassen-Sessions (`classId` gesetzt) bekommen "Neu starten" mit fester Stufe

### Phase 3b — Glossar-Anfrage
An `_inbox/glossar/2026-04-19-1500-fluss-begriffsbedarf.md` — 9 Begriffe:
flussbegradigung, hochwasserschutz, retention, maeander, einzugsgebiet,
ufervegetation, ueberschwemmungsgebiet, renaturierung, oekosystem.
Fallback-Texte für 4 davon sind im Modul eingebaut, das Modul läuft auch
ohne DB-Einträge.

### Phase 3c — Tutorial + First-Buy-Hints (ersetzt Progressive Disclosure)
- 5 Tutorial-Karten beim allerersten Durchgang, pausieren die Simulation
- Skip-Button + Weiter-Button, Fortschritt in localStorage
- **First-Buy-Hint pro Werkzeug** beim jeweils ersten erfolgreichen Einsatz
  (6 Hints: deich, feld, siedlung, wald, abriss, begradigen)
- **Progressive Disclosure abgeschafft**: alle 7 Werkzeuge sind in allen
  Stufen verfügbar. Didaktischer Onboarding-Schutz läuft jetzt über
  Tutorial + Hints, nicht über hartes Ausgrauen. Begründung: Thomas wollte
  die anderen Werkzeuge sehen können, und das Trade-off-Lernen geht nur,
  wenn man Begradigung + Renaturierung auch in L1 ausprobieren darf.

### Phase 3d — Event-Info-Topics
- Engine-Events tragen jetzt `topic`-Keys (`flood-settlement`,
  `levee-break`, `begradigen`, `renaturierung` usw.)
- 8 didaktische Langfassungen mit Wikipedia-Link
- Klick auf ein Event im Stapel ODER auf den aktuellen Toast öffnet das
  Info-Overlay
- Atlas' Pain-Point #4 ("Event-Wirkungen erklären") ist damit abgedeckt

### Phase 3e — Reflexion + Sterne + Badges
- Dynamische Reflexionsfrage abhängig vom Verlauf:
  - Wenn Siedlungen verloren → Fragen nach Lehre aus dem Verlust
  - Wenn begradigt aber nicht renaturiert → Frage danach
  - Wenn Balance gefunden (Biodiv > 70, Wirtschaft > 60) → Lob+Frage nach Rezept
  - Sonst: generische Frage nach wirksamster Entscheidung
- Sterne animieren (leuchten gestaffelt auf, 220 ms Versatz)
- Alle 6 Achievement-Badges sichtbar, nicht-erreichte ausgegraut
- `balance_found` von 20 auf **50 Jahre** erhöht (Atlas' Spezifikation)
- `submitReflection()` feuert on select

### Phase 4a — Audio
- `sounds-list.json` mit 22 Prompts (UI, Bau, Ernte, Year-Tick, Wetter,
  Hochwasser-Varianten, Deichbruch, Baumtod, Level-Ergebnis)
- `audio.js` mit Pool + Graceful Fallback
- **Alle 22 MP3s generiert** via `generate-sounds.py fluss`
- Build-Sounds pro Werkzeug, Event-Sounds nach `topic`, Ernte pro Jahr
  wenn Ertrag > 0

### Phase 4b — Musik
- Porcelain Rain im Header-Dropdown, Volume-Persistenz

### Phase 4c — iPad-Landscape-Audit (statisch)
- `touch-action: none` am Canvas
- Touch-Targets ≥ 36 px via Design-System
- `<select>` statt Custom-Dropdown für Musik
- Keine Hover-Abhängigkeiten — alle Info steht sichtbar in Cards/Tooltips
- Viewport-Meta mit `viewport-fit=cover`
- **Live-Device-Test** braucht Thomas; statisch ist alles konform

## Reaktionen auf Thomas in-session
- Feld/Siedlung 3×3-Render wie V1 (Personen-Emojis nach Gesundheitszustand)
- Feld-Flicker beruhigt (stabile Slots zwischen Ticks)
- Toast-Breite voll, Text umbricht
- 9 Ambient-Fische im Fluss, schwimmen stabil in Sektoren
- Fisch-Fang-Flug mit Drehbewegung, gekoppelt an `tileFishYield` (keine Zufalls-Trigger)
- Fang-Radius auf 4 Kacheln gekappt
- Ernte-Animation: 🌾 fliegt zur Nahrungs-Zeile mit Rotation + Pulse
- Standard-Tempo 4× entschleunigt (`MS_PER_TICK` von 2500 auf 10000 ms)

## Checkliste module-interface.md §9

- [x] Design-System CSS eingebunden
- [x] Einheitlicher Header mit Logo, Modulname, Stufen-Badge
- [x] Layout nutzt `ggs-sim-layout` Zonen
- [x] Action-Cards nutzen `ggs-card` Klasse
- [x] Parameter nutzen `ggs-param` mit Farbstufen
- [x] 4 Graphen nutzen `ggs-graph-card` (Biodiv, Hochwasser, Wirtschaft, Budget)
- [x] Event-Feed zeigt Ereignisse
- [x] Speed-Control (⏸/1×/2×/4×)
- [x] Tutorial-Overlay beim ersten Durchgang
- [x] Zwischen-Level-Screen-Funktionalität im Endscreen (Sterne + Reflexion)
- [x] Endscreen mit Stats-Grid + Badges
- [x] Achievement-Toasts bei Meilensteinen
- [x] API: `reportProgress()` — verdrahtet
- [x] API: `showAchievement()` — integriert via Engine + Toast
- [x] API: `submitAssessment()` — bei Durchgangsende
- [x] API: `submitReflection()` — on option select
- [x] PHP-Seite mit `window.__GGS__` Kontext
- [x] **Autosave nach jeder Aktion**
- [x] **Resume beim Reload**
- [x] **Reset-Button** löscht Save und startet neu (mit Bestätigung bzw. Stufen-Auswahl)

## Sprachregel-Audit

Im Code (engine.js/game.html/audio.js) sind Kommentare und Variablennamen
mit "Spiel-" erlaubt (laut §4a). **UI-sichtbare Treffer** wurden bereinigt:
- "Spielstand geladen" → "Arbeitsstand geladen"
- "löschen und neu starten" → "löschen und neu beginnen"
- Endscreen "Nochmal spielen" / "100 Jahre sind um!" → "Neu starten" / "Durchgang beendet — 100 Jahre sind um."
- "Score" → "Beste Leistung"
- Werkzeug-Namen: keine Spielsprache-Begriffe drin

Reflexionsfragen, Tutorial-Texte, First-Buy-Hints, Event-Info-Topics,
Achievement-Titel — alle von Anfang an mit der Regel gebaut. Beispiel:
Tutorial-Karte 5 heißt "Los geht's" (nicht "Los spielen") und der
Endscreen-Button "Neu starten".

## Offene Punkte (kein Blocker)

1. **Balance-Test der Stufen 2+3** — Standardwerte sind Schätzung, echtes
   Spieltest durch Thomas/Klasse wird zeigen, ob `startBudget` und
   `eventFrequency` passen. Anpassungen sind 3 Zeilen in `fluss.php`.
2. **Glossar-DB-Einträge** — von Glossar-Instanz; Fallback aktiv.
3. **Git-Commit** — Konvention ist ein Session-End-Commit. Ich habe
   Thomas explizit angesprochen, warte auf sein Go vor dem `git commit`.
4. **iPad-Live-Test** — Thomas hat iPad, kann bei Gelegenheit testen.

## Bitte um

- **Sichtung + Freigabe** / Änderungswünsche
- Falls Reflexionsfragen / Tutorial-Texte nachgeschliffen werden sollen:
  gerne konkrete Vorschläge, ich tausche sie aus
- Keine Eile — wenn du oder Thomas etwas entdeckt, mache ich's.

— Fluss
