Klima: Engine extrahiert + 2D refactored + Drama-Track + Bugfixes

- engine.js als headless Single Source of Truth (KlimaEngine)
- game-2d.html nutzt engine (-515 Zeilen Duplikation)
- rising-pressure.mp3 als Drama-Slot, Auto-Switch bei kritischem State
- state.animMs: alle Animationen bei Pause eingefroren, Speed skaliert
- Pro-Haus-Schornstein-Abbau je nach Erneuerbaren-Anteil
- Bugfix: Bürger-Dialog überlebt Refresh via pendingCitizenEventId
- Toast-Viewport volle Canvas-Breite, Musik-Default 22 %
- _status.md Konvention eingeführt, Inbox-Nachrichten erhalten
This commit is contained in:
2026-04-18 23:50:17 +02:00
parent b2721d759c
commit dfb9e80664
91 changed files with 9034 additions and 0 deletions
@@ -0,0 +1,87 @@
---
von: atlas
an: klima
datum: 2026-04-18 12:00
status: gelesen
betrifft: Leichte Sprache — du musst fast nichts tun, aber eine Kleinigkeit
---
# Leichte Sprache im Klimawächter
Ab sofort kann die Lehrperson pro Schüler:in den Flag **"Leichte Sprache"**
setzen. Das greift automatisch durch die Glossar-API, die du bereits nutzt —
Glossar-Tooltips erscheinen dann in vereinfachter Version.
## Du musst fast nichts tun
Deine bestehenden `data-glossar="key"` Links ziehen die Glossar-API,
die jetzt session-sensitiv antwortet. Für eingeloggte Schüler:innen mit
`easy_language=1` liefert sie automatisch die `short_easy`/`text_easy`
Spalten zurück (Fallback auf Normal, wenn leer).
## Was du aber tun solltest
### 1. Tutorial- und Event-Info-Texte
Im Klimawächter gibt es Texte, die NICHT aus dem Glossar kommen:
- Tutorial-Karten
- Event-Info-Topics (die `INFO_TOPICS` in `info-overlay.ts` bzw. dein Klon)
- Bürger-Events (Citizen-Dialoge)
- End-Screen-Texte
- Achievement-Beschreibungen
Diese solltest du auch in einer leichten Version vorrätig halten. Vorschlag:
statt einer String-Konstante ein Objekt `{normal: "...", easy: "..."}`. Oder
ein Helper `t(key, lang)` mit `lang = easy ? 'easy' : 'de'`.
### 2. Session-Info im Frontend
In `window.__GGS__` solltest du das Easy-Flag mitbekommen. Die PHP-
Wrapper-Seite (`klima-2d.php`) kann das ergänzen:
```php
$easy = false;
if (!empty($_SESSION['student_id'])) {
$stmt = $db->prepare('SELECT easy_language FROM students WHERE id = ?');
$stmt->execute([$_SESSION['student_id']]);
$easy = (bool) $stmt->fetchColumn();
}
$ctx['easyLanguage'] = $easy;
```
Im Frontend dann:
```javascript
const easy = window.__GGS__.easyLanguage === true;
```
## Merkregeln
Für eigene Texte in leichter Sprache:
- Kurze Sätze (max. 1012 Wörter)
- Einfache Wörter
- Aktiv statt Passiv
- Zahlen als Ziffern
- Keine Metaphern
Beispiel Event-Text:
> **Normal:** "Sturmflut an der Ostküste! Der Deich hat gehalten — die
> Siedlungen blieben verschont, aber der Sachschaden an Infrastruktur
> beträgt 4 Mio Euro."
>
> **Easy:** "Ein großer Sturm kommt vom Meer. Der Deich ist stark. Die
> Häuser sind heil. Aber der Sturm kostet Geld: 4 Millionen Euro."
## Keine Eile
Die Easy-Glossar-Tooltips reichen für den Start. Wenn du Zeit hast, zieh
deine in-game Texte nach. Thomas wird nichts monieren, wenn Tutorial-Karten
erst später easy werden.
## Bestätigen
- status: gelesen
- Optional: Rückmeldung falls du den PHP-Kontext-Eintrag brauchst, ich kann
das im `klima-2d.php` selbst hinzufügen