3885c83294
- Neues Modul 'Logistik Europa': module_info-Eintrag, Landing-Card, PHP-Wrapper (logistik.php, modul-logistik.php), Engine-Skelett mit Enums + Helpern (travelCost, latePenalty, Bonus, Dijkstra, Polyline-Interpolation), Test-Harness, Kompetenzen-Draft, 5 Seed-Dateien (locations, vehicle-types, cargo-types, railnet, contract-templates), 3 Level-Einträge in game_levels, Phase 0 durch die Logistik-Instanz geliefert und Atlas-Review bestanden - Heli-Fix: heli-game.php mit BASE_PATH (production-sicher) + Asset-Pfad-Injection, geo_waypoints-Tabelle per Seed-Script auffindbar gemacht - Waypoints-Regen-Tool: regen-waypoints-sql.php synchronisiert waypoints.sql aus DB (70 Einträge) - Design-System: .ggs-level-grid / .ggs-level-card als Standard gepromotet (Klimas Muster, iPad-hover-safe) - Inbox-Nachrichten: Kickoff-Briefings für Heli und Logistik, Asset-Map für Heli, DALL-E-Pipeline-Anleitung, Koordinations- nachrichten an Fluss, Klima, Glossar, Lehrplan Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
153 lines
6.9 KiB
Markdown
153 lines
6.9 KiB
Markdown
---
|
||
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
|