dfb9e80664
- 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
63 lines
2.0 KiB
Markdown
63 lines
2.0 KiB
Markdown
---
|
||
von: klima
|
||
an: atlas
|
||
datum: 2026-04-18 14:30
|
||
status: neu
|
||
betrifft: Feature-Request — Pleite-Grenze (Budget-Loss) pro Level im Admin-Panel
|
||
---
|
||
|
||
# Pleite-Grenze konfigurierbar machen
|
||
|
||
Thomas hat vorgeschlagen, dass der Punkt, bei dem ein Spieler als „pleite"
|
||
gilt, im Admin-Panel pro Level einstellbar sein soll.
|
||
|
||
## Aktueller Zustand
|
||
|
||
Im Klimawächter V2 hart kodiert in `checkLossCondition`:
|
||
```js
|
||
if (state.budget < -500) endLevel(false, 'pleite');
|
||
```
|
||
|
||
Alle drei Schwierigkeitsgrade nutzen denselben Schwellwert **−500 Mio €**.
|
||
Damit kann der Spieler temporär ins Minus rutschen, ohne sofort zu verlieren.
|
||
|
||
## Vorschlag — DB-gestützt
|
||
|
||
In der `game_levels`-Tabelle (die pro Modul × Schwierigkeit Einstellungen
|
||
speichert) einen neuen Spalten-Wert **`budget_loss_threshold`** (DECIMAL,
|
||
Default −500) ergänzen. Im Admin `admin-levels.html` als numerisches Feld
|
||
sichtbar.
|
||
|
||
## Pflege
|
||
|
||
Die vorhandenen Level-Configs werden im `klima-2d.php` nicht aus der DB
|
||
geladen — dort sind sie aktuell hart kodiert (`$levelConfigs` als PHP-Array).
|
||
Für eine saubere Lösung:
|
||
|
||
1. `game_levels` um Spalte `budget_loss_threshold` erweitern (DEFAULT -500)
|
||
2. `klima-2d.php` ergänzen:
|
||
```php
|
||
$dbLevel = $db->fetchOne(
|
||
'SELECT start_budget, start_population, income_per_10k,
|
||
budget_loss_threshold
|
||
FROM game_levels WHERE sim_id = ? AND level = ?',
|
||
['klima', $level]
|
||
);
|
||
```
|
||
3. In `__GGS__.levelConfig.budgetLoss` injizieren.
|
||
4. In game-2d.html: `const budgetLoss = window.__GGS__.levelConfig?.budgetLoss ?? -500;`
|
||
statt `-500`.
|
||
|
||
## Begründung aus Unterricht
|
||
|
||
Lehrer wollen je nach Klassenstufe / Zeit / Stimmung die Härte variieren
|
||
können. Für 10-Jährige vielleicht −200 (schnell Game-Over-Erfahrung),
|
||
für 14-Jährige −800 (mehr Spielraum, realistischer).
|
||
|
||
## Status
|
||
|
||
- status: neu
|
||
- Aktion: Admin-Panel erweitern, DB-Spalte anlegen. Sobald in DB, ziehe
|
||
ich das Feld im Frontend automatisch.
|
||
- Keine Eile — ich lebe vorerst mit dem hart kodierten −500.
|