Files
geograsim/App/docs/klimawaechter-dev-log.html
Adminator fecd8bb9c9 Textsystem: Bis-Strich mit Leerzeichen (Zahl – Zahl) per Agent-Sweep
562 Ersetzungen in 50 Dateien: Halbgeviertstrich zwischen zwei Ziffern (=
"bis"-Bereich) bekommt Leerzeichen davor/danach (3–4 -> 3 – 4). Regex
/([0-9])\s*–\s*(?=[0-9])/ auf Rohtext (format-erhaltend, CRLF/Einrueckung
unveraendert), Bindestriche in Woertern und Minuszeichen unangetastet, alle
JSON weiter gueltig. Energiemanager-Zeitbloecke sind Display-Labels (kein
Logik-Key) -> safe.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-22 12:38:19 +02:00

486 lines
26 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Klimawächter — Entwicklungs-Log</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap" rel="stylesheet">
<style>
*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
:root {
--bg: #f7f6f3; --bg2: #efeee9; --white: #fff;
--text: #1a1a1a; --text2: #4a4a4a; --text3: #8a8a8a;
--fjord: #4a7c8a; --fjord-l: #dae8ec; --fjord-d: #3a6470;
--moss: #5a8a5e; --moss-l: #dceadd;
--sand: #c4a35a; --sand-l: #f2eacc;
--coral: #c07a6b; --coral-l: #f2ddd8;
--danger: #b04a3a;
}
body {
font-family:'Inter',system-ui,sans-serif; background:var(--bg);
color:var(--text); line-height:1.6; padding:2rem 1rem;
}
.w { max-width: 880px; margin: 0 auto; }
header {
border-bottom: 3px solid var(--fjord); padding-bottom: 1.2rem; margin-bottom: 2rem;
}
h1 { font-size: 2rem; font-weight: 900; color: var(--fjord); margin-bottom: .3rem; }
header .sub { font-size: .9rem; color: var(--text3); font-weight: 500; }
h2 {
font-size: 1.4rem; font-weight: 800; color: var(--fjord-d);
margin: 2.2rem 0 .8rem; padding-top: 1rem;
border-top: 1px solid rgba(0,0,0,.08);
}
h3 { font-size: 1.05rem; font-weight: 700; color: var(--text); margin: 1.2rem 0 .5rem; }
p { font-size: .95rem; color: var(--text2); margin-bottom: .8rem; }
ul, ol { margin: .5rem 0 1rem 1.4rem; }
li { font-size: .93rem; color: var(--text2); margin-bottom: .35rem; }
code {
background: var(--bg2); padding: 1px 6px; border-radius: 4px;
font-size: .85em; font-family: "SF Mono", Menlo, monospace;
color: var(--fjord-d);
}
pre {
background: #1a1a1a; color: #e8e6de; padding: 1rem 1.2rem;
border-radius: 10px; font-size: .82rem; overflow-x: auto;
font-family: "SF Mono", Menlo, monospace; margin: .8rem 0 1.2rem;
}
.card {
background: var(--white); border: 1px solid rgba(0,0,0,.06);
border-radius: 12px; padding: 1.1rem 1.3rem; margin: .8rem 0;
box-shadow: 0 2px 8px rgba(0,0,0,.03);
}
.card.green { border-left: 4px solid var(--moss); }
.card.sand { border-left: 4px solid var(--sand); }
.card.coral { border-left: 4px solid var(--coral); }
.card.fjord { border-left: 4px solid var(--fjord); }
.card h3 { margin-top: 0; }
.tag {
display: inline-block; font-size: .68rem; font-weight: 700;
padding: 2px 8px; border-radius: 6px;
background: var(--fjord-l); color: var(--fjord-d);
text-transform: uppercase; letter-spacing: .05em;
margin-right: .3rem;
}
.tag.done { background: var(--moss-l); color: var(--moss); }
.tag.todo { background: var(--sand-l); color: var(--sand); }
.tag.idea { background: var(--coral-l); color: var(--danger); }
table {
width: 100%; border-collapse: collapse; margin: .8rem 0 1.2rem;
font-size: .85rem;
}
th, td {
text-align: left; padding: .55rem .7rem;
border-bottom: 1px solid rgba(0,0,0,.08);
}
th { background: var(--bg2); font-weight: 700; color: var(--text); }
.quote {
border-left: 3px solid var(--fjord);
background: var(--fjord-l);
padding: .6rem .9rem;
border-radius: 0 8px 8px 0;
font-style: italic;
color: var(--fjord-d);
margin: .5rem 0 1rem;
font-size: .9rem;
}
nav.toc {
background: var(--bg2); border-radius: 10px; padding: 1rem 1.3rem; margin-bottom: 2rem;
}
nav.toc h4 {
font-size: .7rem; font-weight: 800; color: var(--fjord); text-transform: uppercase;
letter-spacing: .06em; margin-bottom: .5rem;
}
nav.toc ol { margin-left: 1.2rem; }
nav.toc a {
color: var(--text2); text-decoration: none; font-size: .88rem;
}
nav.toc a:hover { color: var(--fjord); }
footer {
margin-top: 3rem; padding-top: 1.5rem;
border-top: 1px solid rgba(0,0,0,.08);
font-size: .8rem; color: var(--text3); text-align: center;
}
</style>
</head>
<body>
<div class="w">
<header>
<h1>Klimawächter — Entwicklungs-Log</h1>
<div class="sub">Erkenntnisse, offene Punkte und nächste Schritte · Stand 2026-04-11 (3 Schwierigkeitsgrade + Bilanz + Steg-Rampe)</div>
</header>
<nav class="toc">
<h4>Inhalt</h4>
<ol>
<li><a href="#ziel">Didaktisches Ziel und Zielgruppe</a></li>
<li><a href="#architektur">Architektur-Überblick</a></li>
<li><a href="#mechanik">Mechanik-Erkenntnisse aus Trace-Tests</a></li>
<li><a href="#ui">UI / Interaktion</a></li>
<li><a href="#visual">Visualisierung (2D / 3D)</a></li>
<li><a href="#erklaerungen">Erklärungen für Kinder 10 14</a></li>
<li><a href="#folgen">Weitere Folgen des Klimawandels</a></li>
<li><a href="#offen">Offene Punkte & nächste Schritte</a></li>
</ol>
</nav>
<!-- ====================================================== -->
<section id="ziel">
<h2>1. Didaktisches Ziel und Zielgruppe</h2>
<p>Der <strong>Klimawächter</strong> ist kein Spiel um einen high score. Er soll Schülerinnen und Schülern der 1.4. Klasse Sekundarstufe I (ca. <strong>10 14 Jahre</strong>) vermitteln, dass:</p>
<ul>
<li>der Klimawandel träge ist — Folgen kommen verzögert, Entscheidungen wirken erst in Jahren</li>
<li>es keine Wunderlösung gibt — man muss mehrere Strategien kombinieren</li>
<li>reine Anpassung (Deiche, Strandaufschüttung) die Ursache nicht löst</li>
<li>Klimaschutz kein isoliertes Naturthema ist — gesellschaftliche Konflikte gehören dazu</li>
<li>eine Insel stellvertretend für den Planeten stehen kann</li>
</ul>
<div class="quote">
Kinder haben typischerweise Fehlkonzepte wie „Ozonloch = Klimawandel" oder „Wenn ich hier einen Baum pflanze, ist alles gut". Das Spiel arbeitet dezent dagegen an.
</div>
</section>
<!-- ====================================================== -->
<section id="architektur">
<h2>2. Architektur-Überblick</h2>
<div class="card fjord">
<h3>Frontend-Stack</h3>
<ul>
<li><code>TypeScript + Vite</code> (keine Framework-Schicht)</li>
<li><code>Three.js</code> für die 3D-Version</li>
<li>2D-Version nutzt Canvas-API direkt</li>
<li>Multi-Page HTML (<code>game.html</code>, <code>game-3d.html</code>, <code>erdbeben.html</code>, <code>energiemix.html</code>)</li>
</ul>
</div>
<div class="card fjord">
<h3>Kernklassen</h3>
<table>
<tr><th>Datei</th><th>Rolle</th></tr>
<tr><td><code>src/core/game-engine.ts</code></td><td>Abstract base: Ticks, Resources, Goals, Save/Load, Subscribe-Pattern, Citizen-Events</td></tr>
<tr><td><code>src/ui/game-ui.ts</code></td><td>Wiederverwendbare UI-Komponente mit Panels, Graphen, Auto-Save, End-Screen</td></tr>
<tr><td><code>src/ui/info-overlay.ts</code></td><td>Kindgerechte Begriffserklärungen (Info-Buttons öffnen Overlay)</td></tr>
<tr><td><code>src/sims/sim-05-treibhaus/game.ts</code></td><td>Klimawächter-Spiellogik</td></tr>
<tr><td><code>src/sims/sim-05-treibhaus/game-renderer.ts</code></td><td>2D-Canvas-Renderer</td></tr>
<tr><td><code>src/sims/sim-05-treibhaus-3d/game-renderer-3d.ts</code></td><td>Three.js 3D-Renderer</td></tr>
</table>
</div>
<div class="card fjord">
<h3>Save-System</h3>
<p>Alle Spielstände werden pro Spiel-ID in <code>localStorage</code> persistiert. Version-Bump (v2) verhindert, dass alte inkonsistente Saves geladen werden. Ein <code>resetting</code>-Flag verhindert, dass der <code>beforeunload</code>-Handler beim Reset sofort wieder speichert.</p>
</div>
</section>
<!-- ====================================================== -->
<section id="mechanik">
<h2>3. Mechanik-Erkenntnisse aus Trace-Tests</h2>
<p>Es existiert ein automatischer Test unter <code>tests/unit/sim-05-trace.test.ts</code>, der das Spiel rein rechnerisch über 75 Jahre für verschiedene Strategien durchspielt und die Werte tabellarisch ausdruckt. Starten mit:</p>
<pre>npx vitest run sim-05-trace --reporter=verbose</pre>
<h3>Balance-Status (aktuell kalibriert)</h3>
<table>
<tr><th>Strategie</th><th>Ergebnis 2100</th><th>Status</th></tr>
<tr><td>Nichts tun</td><td>Temp 17.9°C, Flut 52%</td><td></td></tr>
<tr><td>Nur Wälder</td><td>Temp 17.1°C</td><td>❌ (knapp)</td></tr>
<tr><td>Nur Solar</td><td>Temp 15.5°C, Budget knapp</td><td></td></tr>
<tr><td>Nur Wind</td><td>Temp 15.5°C, Budget ok</td><td></td></tr>
<tr><td>Nur Deiche</td><td>Temp 17.9°C — Klima läuft durch</td><td></td></tr>
<tr><td>Wälder + Solar</td><td>grenzwertig — meist verloren</td><td>⚠️</td></tr>
<tr><td>Solar + Wind + 1 Deich</td><td>alle Goals ✅</td><td></td></tr>
</table>
<div class="card sand">
<h3>Didaktische Aussagen, die aus dem Trace sichtbar werden</h3>
<ul>
<li>Einzelmaßnahme = zu wenig. Man muss kombinieren.</li>
<li>Deiche allein retten kurzfristig Häuser, aber nicht das Klima.</li>
<li>Aufforsten ist wichtig, aber als Einzelmaßnahme zu langsam.</li>
<li>Wind ist stärker als Solar, aber wegen Wartungskosten nicht immer die beste Wahl.</li>
<li>Das Klima hat eine Trägheit von ca. 8 %/Jahr für Temperatur und 6 8 %/Jahr für Meeresspiegel.</li>
</ul>
</div>
<h3>Bug-Historie (chronologisch)</h3>
<ol>
<li><strong>Subclass-Felder nicht im Save</strong> → Werte driften zwischen UI und Rechnung. <em>Fix: <code>serializeSubclass()</code> Hook.</em></li>
<li><strong>Wasser stand still im 3D-Renderer</strong> → Protection wurde von waterY abgezogen. <em>Fix: Wasser steigt jetzt absolut, Protection wirkt nur auf Submerge-Check der Häuser.</em></li>
<li><strong>Solar überpowered</strong> → CO₂ fiel unter vorindustriell. <em>Fix: Maßnahmen-Reduktion halbiert, CO₂-Floor 350 ppm.</em></li>
<li><strong>Reset-Button ohne Wirkung</strong> → beforeunload schrieb Stand wieder ins localStorage. <em>Fix: <code>resetting</code>-Flag.</em></li>
</ol>
</section>
<!-- ====================================================== -->
<section id="ui">
<h2>4. UI / Interaktion</h2>
<div class="card green">
<h3><span class="tag done">done</span> Auto-Save</h3>
<p>Jede Aktion → debounced Save nach 1.5 s. Sofortiges Save bei Tab-Wechsel oder Page-Verlassen. Auto-Load beim erneuten Öffnen.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Bürger-Beschwerden mit Choices</h3>
<p>Modaler Dialog mit Avatar, Message und 2 3 Choice-Karten. Jede Wahl hat echte Konsequenzen. Spiel pausiert automatisch bis der Spieler entscheidet. Bibliothek: 7 Events über die 75 Jahre verteilt (Fischerin, Forscherin, Bauer, Hotel, Jugend-Streik, Industrie, Bergdorf).</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Reset-Button</h3>
<p>Im Header oben rechts (🔄). Löscht den Save-Slot und lädt die Seite neu.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Header-Refactor</h3>
<p>Save/Load/Finish/Reset/Home sind jetzt reine Symbole mit Tooltips. Speed-Buttons mit Zahlen (×1, ×2, ×4) und Kamera-Controls (, , ⊙) sind in den Header gewandert. Das spart Platz unten und macht die Graphen größer.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Guided / Free Mode</h3>
<p>GameUI unterstützt <code>mode: 'guided'</code> mit <code>totalDurationSec</code>. Im Guided-Mode wird <code>msPerTick</code> automatisch so gesetzt, dass das Spiel genau die vorgegebene Zeit dauert, und Speed-Buttons &gt; 1 sind unsichtbar. Bereit für späteres Lehrer-Backend.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Strom-System (Phase A der SimCity-Erweiterung)</h3>
<p>Neue Ressource <code>⚡ Strom</code>, Anzeige als „Bedarf/Kapazität MW" in der Status-Box. Bedarf = 1 MW pro 1.000 Einwohner. Kapazität ergibt sich aus den gebauten Kraftwerken:</p>
<ul>
<li><strong>☀️ Solar</strong> = +1 MW (klein, sauber)</li>
<li><strong>🌬️ Wind</strong> = +3 MW (mittel, sauber, teuer)</li>
<li><strong>🏭 Kohle</strong> = +8 MW (sofort viel Strom — aber +1.5 ppm CO₂/Jahr)</li>
</ul>
<p>Bei Stromausfall (Bedarf &gt; Kapazität): siehe nächste Karte.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> „Bäume verheizen" bei Stromausfall</h3>
<p>Wenn der Strom ausfällt, fällen die Bewohner pro Jahr 2 Bäume und verheizen das Holz. Konsequenzen:</p>
<ul>
<li>+0.6 ppm CO₂ pro Jahr (Holzfeuer)</li>
<li>Bäume gehen sichtbar ins „dead"-Stadium über (schwarzer Strunk, Totenkopf-Sprite)</li>
<li>Tote Bäume binden kein CO₂ mehr → langfristig schlimmer</li>
<li>Ab 3. Stromausfall-Jahr in Folge: Bevölkerung wandert ab</li>
</ul>
<p>Game führt einen Counter <code>treesChoppedForHeat</code>; Renderer liest ihn pro Frame und tötet die Differenz an lebendigen Bäumen.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Maßnahme abreißen (50 % Rückzahlung)</h3>
<p>Neue Methode <code>game.demolishMeasure(id)</code>. UI: 🗑-Button auf jeder Karte mit count&gt;0. Renderer entfernt das zuletzt platzierte Mesh, gibt Geometrie/Material frei. Erlaubt Reparatur falscher Frühentscheidungen (z.B. Kohlekraftwerk wieder loswerden, sobald Wind genug liefert).</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Lina Fischerin nach hinten verschoben</h3>
<p>Citizen-Event „Lina, die Fischerin" war auf Tick 4 — viel zu früh. Ist jetzt auf Tick 15 (≈ 1 Minute Spielzeit). Spieler kann zuerst seine Strom-Versorgung in den Griff bekommen, bevor das erste Bürger-Dilemma kommt.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Drei Schwierigkeitsgrade (Lernen / Üben / Profi)</h3>
<p>Ein <code>DifficultyConfig</code>-System mit 3 Levels (🟢/🟡/🔴) bestimmt Startbudget, Steuern, Stromausfall-Schonfrist und die Härte der Klima-Folgen. Spieler wählt beim ersten Start in einem Selector-Overlay; danach klickt er das Level-Badge oben in der Topbar, um zu wechseln (mit Bestätigung, weil das Spiel neu startet).</p>
<ul>
<li><strong>🟢 Lernen:</strong> 750 Mio € Start, 220 €/10k, 3 Jahre Schonfrist, halbe Klima-Folgen — sehr viel Puffer</li>
<li><strong>🟡 Üben:</strong> 550 Mio €, 175 €/10k, 1 Jahr Schonfrist — Standard, Strategie nötig</li>
<li><strong>🔴 Profi:</strong> 400 Mio €, 145 €/10k, 0 Schonfrist, 1.5× Klima-Folgen — kein Spielraum</li>
</ul>
<p>URL-Parameter <code>?level=N</code> erzwingt ein Level (für späteren Lehrer-Override). Save-File enthält das Level für Resume.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Maßnahmen halbiert (zweite Runde) + Wald-Wartung-Fix</h3>
<p>Alle Maßnahmen-Werte (Cost, Upkeep, CO₂-Wirkung, Schutz) erneut halbiert — gleicher Effekt pro Mio €, aber doppelt so viele individuelle Bauschritte. Mehr Streuung, mehr Spielmöglichkeiten.</p>
<p>Wald-Upkeep zusätzlich auf <strong>0.5 Mio €/Jahr</strong> reduziert (statt 1) — damit ist Wald jetzt die <strong>günstigste Option pro CO₂-Reduktion</strong> (12.5 Mio €/ppm vs Wind 15, Solar 17.9). Das passt zur didaktischen Erwartung „Bäume sind die Naturlösung".</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Jahres-Bilanz unter Budget</h3>
<p>Kleine Tabelle direkt unter dem Budget-Wert in der Status-Box zeigt: + Steuern, (+ Tourismus), Wartung, ( Klima-Schaden), = Netto pro Jahr. Tourism- und Klima-Zeilen sind dynamisch sichtbar. Netto wird grün/rot gefärbt. Lebt mit der gedämpften Display-Animation.</p>
<p>Hat in der ersten Spielanalyse sofort sichtbar gemacht, dass eine Bilanz von 9 Mio €/Jahr auf Dauer nicht überleben kann.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Steg mit Rampe ans Land</h3>
<p>Der Holzsteg am vorderen Strand hat jetzt eine schräge <strong>Holz-Rampe</strong>, die vom Inland-Niveau (auf der Insel selbst) hochsteigt zur Plankenkante (Y=0.85). Damit bleibt der Steg auch bei steigendem Meeresspiegel über die Rampe erreichbar. Die Rampe sitzt physisch auf dem Inselhang und wird vom Wasser nicht überspült.</p>
</div>
<div class="card sand">
<h3><span class="tag idea">idee</span> Mitigation vs. Adaptation — didaktische Diskussion</h3>
<p>Aktuell könnte ein Spieler theoretisch nur Deiche/Hochwasserschutz bauen und ignorieren, dass CO₂ die Ursache ist — solange Temperatur knapp unter 17 °C bleibt. Das vermittelt die falsche Lektion „Mauern reichen". Ideen zum Adressieren:</p>
<ul>
<li><strong>Kipppunkt:</strong> Ab Sealevel &gt; 80 cm sind Deiche nicht mehr genug — sie reißen bei Sturmflut</li>
<li><strong>Wartung steigt mit Sealevel:</strong> Erosion macht Deiche teurer im Unterhalt</li>
<li><strong>Trace-Test:</strong> „Nur-Deich-Strategie" muss langfristig verlieren</li>
</ul>
<p>Wichtig für die nächste Iteration — adressiert die Kernfrage „Sind Deiche wirklich eine gute Lösung?" (Antwort: nur als Pflaster, nicht als Heilung).</p>
</div>
<div class="card sand">
<h3><span class="tag todo">todo</span> Drag-and-Drop Platzierung — Phase B (kurzfristig!)</h3>
<p>Option A aus dem ursprünglichen Interaktions-Konzept. Maßnahmen werden aus dem Shop auf die 3D-Insel gezogen, statt automatisch platziert. Standortabhängige Wirkung: Solar im Vulkan-Schatten = 20% Effizienz, Wind am Hang = +20% etc.</p>
<p><strong>Voraussetzung für Phase C (Wohnungsbau):</strong> Sobald Schüler Häuser kauft, muss er sie auch SETZEN können — sonst frustrierend.</p>
</div>
<div class="card sand">
<h3><span class="tag todo">todo</span> Wohnungsbau + Neuankömmlinge — Phase C</h3>
<p>SimCity-artige Bevölkerungsdynamik:</p>
<ul>
<li>Start mit ~10 Häusern statt 18 (heute schon 6.000 Einwohner statt 10.000)</li>
<li>Neue Maßnahme <strong>🏘 Wohnhäuser</strong> (cost 120, +1.000 Kapazität, +1 MW Bedarf)</li>
<li>Neuankömmlinge-Queue: pro Tick wollen X Familien zuziehen — kommen nur, wenn freie Wohnungen UND Strom da sind</li>
<li>Visuell: 2-3 wandernde Sprite-Figuren am Strand (Billboards wie das Boot)</li>
<li>Tutorial gestaffelt: erst Strom (Phase A), dann Bauen (Phase B), dann Wohnen (Phase C)</li>
</ul>
</div>
<div class="card sand">
<h3><span class="tag todo">todo</span> Krisen-Mini-Spiele</h3>
<p>Bei Sturmflut, Hitzewelle, Murenabgang ein kurzes (10 20 s) Klick-Mini-Spiel. Erfolg mildert den Schaden.</p>
</div>
</section>
<!-- ====================================================== -->
<section id="visual">
<h2>5. Visualisierung (2D / 3D)</h2>
<div class="card green">
<h3><span class="tag done">done</span> Insel als Keil (schrägansteigend)</h3>
<p>Beide Renderer (2D und 3D) bilden die Insel nicht mehr als Pfannkuchen ab, sondern als geneigtes Plateau. Die vordere (niedrige) Seite taucht absichtlich ins Wasser — so ist schon am Start sichtbar, dass man nicht die ganze Insel retten kann.</p>
<ul>
<li><strong>3D:</strong> Ellipse, per PlaneGeometry aus 80×96 Segmenten, mit Noise-Verformung und Keil-Interpolation von 1.3 (hinten) nach 0.15 (vorne).</li>
<li><strong>2D:</strong> horizontaler Side-View, linke Seite hoch (Vulkan), rechts niedrig ins Meer. <code>landSurface(x)</code>-Helper interpoliert Y-Koordinate für Platzierung von Häusern, Bäumen, Solaranlagen.</li>
</ul>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Vulkan mit Gletscher-Deckel</h3>
<p>Im 3D-Renderer steht ein erloschener Vulkan am hohen Ende der Insel. Sein oberes Drittel ist von einem opaken Gletscher-Deckel bedeckt. Der Deckel schrumpft mit steigender Temperatur:</p>
<ul>
<li>15.0 °C → 100 % Eis</li>
<li>16.5 °C → 50 % Eis</li>
<li>18.0 °C → 0 % Eis (kahler Fels)</li>
</ul>
<p>Im 2D-Renderer wird derselbe Gletscher-Deckel als Trapez mit Alpha-loser Farbverschiebung dargestellt.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Heizwolken über Häusern ohne Solar</h3>
<p>Jedes Starthaus im 3D hat eine kleine graue Sphere-Wolke über dem Dach. Sobald der Spieler Solar oder Gründächer baut, verschwindet pro Anlage eine Wolke. Direkte visuelle Verbindung zwischen Maßnahme und Effekt.</p>
</div>
<div class="card green">
<h3><span class="tag done">done</span> Graphen mit Zonen und Referenzlinien</h3>
<p>Die neue <code>GraphConfig</code> unterstützt:</p>
<ul>
<li><strong>Farbbänder</strong> (z. B. "Klimaziel", "Kritisch", "Gefahr" bei Temperatur)</li>
<li><strong>Horizontale Referenzlinien</strong> (z. B. "Klimaziel 17°C", "Strand", "Häuser")</li>
<li><strong>Sinnvolle Y-Range</strong> pro Graph — ausreizen der Höhe statt Standard 0..1</li>
<li><strong>Live-Wert</strong> als farbiger Badge rechts oben</li>
</ul>
<p>Graphen sind jetzt etwa doppelt so groß wie vorher (90 px statt ca. 36 px Höhe).</p>
</div>
<div class="card sand">
<h3><span class="tag idea">idee</span> Weitere Visualisierungs-Ideen</h3>
<ul>
<li>Strand schrumpft mit steigendem Meer sichtbar</li>
<li>Mangroven-Streifen am Rand, die bei Sealevel&gt;20 cm verfärben/sterben</li>
<li>Verstreute Tote-Pflanzen-Sprites auf überschwemmtem Gebiet</li>
<li>Vulkan kann bei &gt;18°C tatsächlich „Lava" aus dem Krater drücken (Kipppunkt)</li>
</ul>
</div>
</section>
<!-- ====================================================== -->
<section id="erklaerungen">
<h2>6. Erklärungen für Kinder 10 14</h2>
<p>Das neue <code>info-overlay.ts</code>-Modul bietet eine Bibliothek kindgerechter Erklärtexte. Jeder Graph und jedes wichtige Event hat einen (i)-Button, der ein Overlay öffnet. Zielgruppe: 10 14 Jahre, einfache Sätze, max. 3 Absätze plus "Merksatz".</p>
<h3>Bisher erklärte Begriffe</h3>
<ul>
<li><strong>CO₂</strong> — Was es ist, wie es wirkt, warum 420 ppm gefährlich sind</li>
<li><strong>Temperatur</strong> — Durchschnittstemperatur, Pariser Ziel, was 2°C bedeuten</li>
<li><strong>Meeresspiegel</strong> — Warum er steigt (Wärmeausdehnung + Eis), Inselstaaten</li>
<li><strong>Budget</strong> — Wie Einnahmen/Wartung funktionieren</li>
<li><strong>Gletscher</strong> — Was sie sind, wie sie schmelzen, warum das Trinkwasser fehlt</li>
<li><strong>Insel-Keilform</strong> — Warum echte Inseln nicht flach sind</li>
<li><strong>Deich</strong> — Wie er funktioniert, Niederlande, "Anpassung" vs. Ursachenbekämpfung</li>
<li><strong>Solar / Wind / Wald</strong> — Jeweils wie sie wirken und warum alleine nicht reichen</li>
<li><strong>Vegetation stirbt durch Salzwasser</strong> — Versalzung, konkretes Beispiel Kenia</li>
<li><strong>Trinkwasser</strong> — Süßwasser-Brunnen auf Inseln, salzige Vermischung</li>
</ul>
<div class="quote">
Alle Texte sind in <code>src/ui/info-overlay.ts</code> als <code>INFO_TOPICS</code>-Objekt zentralisiert und können leicht ergänzt werden. Aufruf: <code>openInfoOverlay(INFO_TOPICS.co2)</code>
</div>
</section>
<!-- ====================================================== -->
<section id="folgen">
<h2>7. Weitere Folgen des Klimawandels</h2>
<p>Bisher hat das Spiel folgende Folgen von Temperatur- und Meeresspiegelanstieg modelliert:</p>
<table>
<tr><th>Folge</th><th>Auslöser</th><th>Wirkung</th></tr>
<tr><td>Häuser werden überflutet</td><td>Sealevel > 35 cm (nach Protection)</td><td>Bevölkerungsrückgang</td></tr>
<tr><td>Vegetation stirbt (Mangroven, Felder)</td><td>Sealevel > 20 cm</td><td>Warn-Event mit Info-Overlay</td></tr>
<tr><td>Trinkwasser versalzt</td><td>Sealevel > 35 cm</td><td>Budget-Abzug pro Jahr + Bevölkerungsrückgang</td></tr>
<tr><td>Gletscher schmilzt</td><td>Temp > 16.8 °C</td><td>Warn-Event, visueller Schrumpf</td></tr>
<tr><td>Bergdorf gefährdet</td><td>Temp > 16.5 °C (Tick 50)</td><td>Citizen-Event (Anna vom Bergdorf)</td></tr>
</table>
<div class="card sand">
<h3><span class="tag idea">idee</span> Noch fehlende Folgen</h3>
<ul>
<li><strong>Korallenbleiche</strong> — Meereswärme &gt; +1.5°C → Fisch-Ertrag sinkt → Budget</li>
<li><strong>Tropenstürme häufiger</strong> — Kleine Schadensereignisse mit kurzem Mini-Spiel</li>
<li><strong>Waldbrände</strong> — Wenn zu viele Wälder + zu hohe Temperatur → ein Wald brennt ab</li>
<li><strong>Klima-Migration</strong> — Bevölkerung wandert zur nächsten Insel ab (negativer Trend)</li>
<li><strong>Kipppunkte</strong> — Ab bestimmten Schwellwerten unumkehrbare Verschlechterung</li>
</ul>
</div>
</section>
<!-- ====================================================== -->
<section id="offen">
<h2>8. Offene Punkte & nächste Schritte</h2>
<h3>Kurzfristig</h3>
<ul>
<li><strong>Phase B: Drag-and-Drop-Platzierung (Baueditor)</strong> — Voraussetzung für Phase C</li>
<li>2D-Renderer: Zeitleiste und Housing-Logik auf <code>landSurface(x)</code> prüfen (Häuser auf dem Keil, nicht auf dem alten groundY)</li>
<li>2D-Renderer: Strom-System aus 3D-Version übernehmen</li>
<li>Graph-Info-Buttons auch in die anderen HTML-Pages (<code>game.html</code>, <code>erdbeben.html</code>, <code>energiemix.html</code>) einbauen</li>
<li>Citizen-Events mit <code>infoKey</code> versehen (mehr Kontext für Kinder)</li>
</ul>
<h3>Mittelfristig</h3>
<ul>
<li><strong>Phase C: Wohnungsbau + Neuankömmlinge</strong> (siehe Karte oben)</li>
<li>Krisen-Mini-Spiele (Option D)</li>
<li>Trace-Test um Citizen-Events und Stromausfall erweitern</li>
<li>Strom-Tooltip ausführlich machen + Bilder/Diagramm</li>
</ul>
<h3>Langfristig</h3>
<ul>
<li>Login/Account-System mit Node + Express + SQLite (pausiert)</li>
<li>Lehrer-Dashboard mit Klassenverwaltung</li>
<li>Forschungs-Export von <code>game_runs</code> als CSV</li>
<li>Weitere Simulationen im selben Framework (Bevölkerungsdynamik, Raumplanung, Planetary Boundaries)</li>
</ul>
</section>
<footer>
GeoGraSim · Klimawächter Entwicklungs-Log ·
automatisch generiert aus Chat-Dialog mit Claude ·
letzte Aktualisierung: 2026-04-11
</footer>
</div>
</body>
</html>