Tourismusregion: Umwelt beißt jetzt + Schüler-Erklärung (Balance-Pass 1)

Diagnose per headless-Sim-Harness (.dontDeploy/tools/tr-balance-harness.mjs):
„alles zubauen" senkte die Umwelt nur 75→50 (über der 45-Schwelle) und der
Exit-Umwelt-Malus war TOTER Flag-Code → man konnte der Umwelt kaum schaden.

- model.js: (1) Exit-Umwelt-Malus wirklich angewandt — env<60 zieht bei
  umweltbewussten Gästen Zufriedenheit ab (je tiefer, desto mehr). (2) Über-
  tourismus-Drift im 10-s-Takt: dichte Bebauung (>6 Bauwerke) + Verkehr zehren
  die Umwelt aus. (3) Einmalige Lern-Warnkarte, wenn Umwelt < 50 kippt.
- data.js: Naturschutzgebiet-Beschreibung klar (rettet die Umwelt +20, Natur-
  Attraktionen +15 %, sperrt Bauplätze — Naturschutz vs. Ausbau abwägen).
- main.js: Willkommenskarte erklärt die Umwelt-Mechanik für Schüler.

Messung nachher: „alles zubauen" → Umwelt 75→37 (unter 45), Umweltziel
verfehlt, Ø-Sterne fallen. Feintuning Sterne-Kurve/Ansprüche-Eskalation
bleibt für Thomas' Playtest (Game-Feeling headless nicht bewertbar).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 18:10:42 +02:00
parent 913f161502
commit 5f603cb193
4 changed files with 110 additions and 2 deletions
+32 -1
View File
@@ -119,6 +119,30 @@ export function tick(state, dt) {
cost /= 6; // pro Minute → pro 10 s
state.budget -= cost;
state.opCostTotal += cost;
// Übertourismus (§10 Raumnutzungskonflikt): dichte Bebauung + viel Verkehr
// zehren die Umwelt langsam aus. Ab ~6 fertigen Bauwerken beginnt der Druck.
// „Alles zubauen" drückt die Umwelt so über die Partie klar unter die
// 45er-Schwelle — vorher blieb sie fast konstant. Naturschutzgebiet (+20)
// und maßvolles Bauen sind die Gegenmittel.
const builtCount = state.buildings.reduce((n, b) => n + (b.construction <= 0 ? 1 : 0), 0);
const overbuild = Math.max(0, builtCount - 6);
const envErode = overbuild * 0.06 + state.traffic * 0.012; // pro 10 s
if (envErode > 0) state.env = clampEnv(state.env - envErode);
// Einmalige Lern-Warnung, sobald die Umwelt kippt (didaktischer Hinweis).
if (state.env < 50 && !state.envWarned) {
state.envWarned = true;
state.pendingCards.push({
kind: 'card', icon: '🌲', title: 'Die Umwelt leidet!', sound: 'card',
text: 'Deine Umwelt ist unter 50 gefallen. Umweltbewusste Gäste '
+ 'Wanderer, Naturfreunde, Radgruppen werden unzufrieden, wenn sie '
+ 'unter 45 sinkt, und bleiben irgendwann ganz weg.\n\n'
+ 'Was hilft: maßvoller bauen, auf sanfte Anreise (Bus, Rad, Bahn) '
+ 'setzen oder ein 🌿 Naturschutzgebiet bauen, das die Umwelt sofort '
+ 'um +20 hebt. Naturschutz gegen Ausbau abwägen ist der Kern des Spiels.',
});
}
}
// Verkehr: Parkplätze + aktive Auto-/Busgruppen
@@ -495,7 +519,14 @@ function exitVisitor(state, v) {
const tPen = state.traffic * 0.08 * g.trafficSens;
if (tPen > 4) malus.traffic = true;
sat -= tPen;
if (state.env < 45 && g.envSens >= 0.7) malus.env = true;
// Umwelt-Malus WIRKLICH anwenden (war zuvor nur ein toter Flag ohne Wirkung):
// eine kaputte Landschaft vergrault Gäste — je umweltbewusster, desto stärker,
// und je tiefer die Umwelt fällt, desto heftiger. Ab env<60 spürbar, <40 hart.
// Das ist der Raumnutzungskonflikt: zu viel zubauen → Umwelt kippt → Rating fällt.
if (state.env < 60 && g.envSens >= 0.4) {
sat -= g.envSens * (60 - state.env) * 0.5; // env 40 → ~6, env 20 → ~12 (× envSens)
if (state.env < 45) malus.env = true;
}
if (v.timeIn > g.maxTime) { sat *= 0.92; malus.time = true; }
const ratio = Math.max(0, sat) / g.satTarget;