# Farmer — Status **Stand 2026-05-07 — Pausen-Marker (Instanz wird abgeschaltet):** Modul ist in stabilem `beta`-Zustand. Phase 1 vollständig, alle bisherigen Atlas-Mails beantwortet, Inbox leer. Eine Folge-Instanz kann direkt weitermachen — alles ist persistiert. ### Aktueller Code-Stand (DATA_VERSION = 23) - `App/sims/farmer/game.html` — UI komplett mit KPI-Sparklines, Endbericht, Audio (Mute-Toggle), Fachinfo-Modal, Live-State-Hook (`GGS_LIVE_STATE`) - `App/sims/farmer/engine.js` — Welt-Engine mit Köppen-Zonen (inkl. Cfa), Continent-Transport, Importpreis-Abschlag, Monokultur, Krankheits-Cluster, Markt-Block-Cycle, Regional-Direkt-Lieferung - `App/sims/farmer/assets/data/` — crops.json (10 Sorten), hubs.json (5 Welt-Hubs mit Konsumcity), koeppen-zones.json (9 Zonen), world-countries.json (177 Länder), info-topics.json (15 Fachbegriffe DE+Easy) - `App/sims/farmer/assets/sounds/` — 24 ElevenLabs-SFX + 12 regionale Musik-Loops - `App/sims/farmer/scripts/generate-sounds.php` — idempotenter Sound-Generator ### Offene Punkte für Folge-Instanz 1. **Atlas-Wrapper-Bug `FARMER_API_BASE`** — zeigt auf `/api`, sollte `/php/api`. Mail in `_inbox/zentrale/2026-05-03-2230-farmer-api-base-fix.md`. Workaround in submitAssessment drin (Multi-Pfad-Fallback). 2. **`progress.php` Database-Class-Bug** — Plattform-Bug, gleiche Mail. 3. **Card-Bild für `module_info.card_image`** — bisher kein Bild gesetzt. Vorschlag in der Status-Mail an Atlas (2026-05-05 11:00). 4. **LIVE_PRIMARY_FIELDS** — Atlas soll sie aus meinem Vorschlag in `teacher.html` eintragen (7 Spalten: Jahr, Markt, Geld €, Treffer %, CO₂ kg, Felder, 🦠). 5. **Glossar-Übernahme** — Glossar-Instanz hat 15 Fachbegriffe in der Pipe. Mail vom 2026-05-04 04:00. ### Phase-2-Kandidaten (didaktisch sinnvoll, nicht akut) - **Naturkatastrophen** (Dürre, Frost, Hagel, Hurrikan) als zufällige Events - **Marktpreis-Schwankungen** (Welthandel-Realität) - **Klimawandel-Engine** über Jahrzehnte (Köppen-Zonen verschieben sich) - **Save/Load via DB** (Schüler kann unterbrechen, fortsetzen) - **Lehrplan-Integration** durch Lehrplan-Instanz ### Zugang für Folge-Instanz - Modul-URL: `http://localhost/geograsim/App/farmer` - Workspace: `c:\xampp\htdocs\geograsim\farmer.code-workspace` - ELEVENLABS_API_KEY in `App/.env.local` - Sound-Generator: `php scripts/generate-sounds.php [--force] [--only=name]` - Memory-Pointer: `user_farmer.md`, `project_farmer_state.md` in MEMORY.md ## Vorher Phase 1.17 + Live-State (2026-05-05 11:00) - **GGS_LIVE_STATE in game.html** eingebaut: Plattform-Live-Client erhält alle 4 s Snapshot mit year, market, cash, hit_rate, co2_kg, fields, diseases, crops_used, countries. ~250 Bytes pro Tick. - **Atlas-Crash-Recovery-Mail** (2026-05-04 09:00) und **Live-State-Mail** (2026-05-05 02:50) beantwortet: `_inbox/zentrale/2026-05-05-1100-farmer-status-und-live-state.md`. Inkl. LIVE_PRIMARY_FIELDS-Vorschlag (7 Spalten: Jahr, Markt, Geld, Treffer-%, CO2, Felder, Krankheiten). ## Vorher Phase 1.17 (04:00) Fachinfo-Modal mit 15 Begriffen zweisprachig (DE + Leichte Sprache). Plus Glossar-Inbox-Mail. - **Fachinfo-Modal** im Spiel via ℹ️-Button in Topbar: - 15 Begriffe als Card-Grid (Klimazone, Köppen-Geiger, FAO Eignung, Monokultur, Bodenmüdigkeit, Überweidung, Krankheits-Ausbruch, Welt-Hafen, Reefer-Container, CO₂-Fußabdruck, Importpreis-Abschlag, Aquakultur, Subtropisch, Permafrost, Verderblich) - Klick auf Card → Detail-Ansicht mit Standard-DE-Text + grüner Leicht-Sprache-Box (A1-A2-Niveau) - Quelle: `assets/data/info-topics.json` - **Glossar-Mail** an Glossar-Instanz: 10 plattformweit relevante Begriffe (Klimazone, Köppen, Hafen, Reefer, CO₂, Permafrost, Cfa, etc.) zur Übernahme ins zentrale `glossar`-Schema. Inbox: `_inbox/glossar/2026-05-04-0400-farmer-fachbegriffe.md` ## Vorher Phase 1.16 (03:30) Phase 1.16 — Neue Klimazone `subtropisch_feucht` (Cfa) für China-Yangtze, US-Südost, Süd-Brasilien etc. + Undo-Pflanzung + Importpreis-Abschlag. Modul bleibt `beta`. - **Neue Köppen-Zone `subtropisch_feucht` (Cfa)**: Heißfeuchte Sommer, milde Winter. Polygone für China-Süd-Mitte (lat 20–32, lon 100–123), US-Südost (lat 25–38, lon −100 bis −75), Süd-Brasilien (lat −33 bis −20, lon −60 bis −45), Süd-Japan, Ost-Australien, NE-Indien. Wird VOR `gemaessigt_feucht` geprüft (im Polygon-Lookup zuerst gefunden). - **`gemaessigt_feucht` reduziert** auf nur kühle Cfb-Bereiche (Mitteleuropa, US-Pazifik-NW, Nord-China, Nord-Japan, Neuseeland). - **Eignungs-Updates** in jeder Sorte: Reis subtropisch_feucht=S1, Mais=S1, Weizen/Kaffee=S2, Banane=S3, Olive/Datteln=N1, Tiere=N1/N2. Schüler kann jetzt Reis in Schanghai/Yangtze pflanzen → S1. - **defaultZoneByLatitude erweitert**: 23–32° → subtropisch_feucht, 32–38° → mittelmeer (war 23–35), Verschiebung der Übergänge. - **Verifikation**: Schanghai/Guangzhou/Houston/Atlanta/SP-Süd → subtropisch_feucht. Berlin/Wien/Beijing → gemaessigt_feucht (korrekt). - **Plus**: Undo-Pflanzung-Button im Picker. - **DATA_VERSION = 23**. ## Vorher Phase 1.15 (02:30) - **Continent-basierte Modus-Wahl** statt Distanz-Schwelle. Origin und Hub im selben Kontinent → 🚚 LKW, sonst → 🚢 Schiff. Damit gehen Ukraine/Rumänien/ Sibirien → Hamburg per LKW (vorher fälschlich Schiff über 1500 km). Hub-Daten in `hubs.json` haben jetzt continent-Property. - **Importpreis-Abschlag −30 %** auf Brutto bei Cross-Continent-Lieferung. Realistik: lokale Konkurrenz drückt Importpreis. Ergebnis didaktisch: Massengut (Weizen, Mais) wird über See unattraktiv, Hochmargen-Tropen (Banane, Datteln, Kaffee) bleiben profitabel. Genau wie echter Welthandel. Bericht zeigt zusätzliche Zeile „🌍 Importpreis-Abschlag (Europa → Nordamerika, −30 %)" zwischen Brutto und Transport. - **CO₂-Lehre wird stärker**: LKW hat 6× mehr CO₂ als Schiff pro Tonne-km. Sibirien → Hamburg (4400 km LKW) = 394 kg CO₂ vs. Senegal → Hamburg (4900 km Schiff Reefer) = 147 kg CO₂. Schiff über Ozean ist sauberer als LKW über Eurasien. - **DATA_VERSION = 22**. ## Phase 1.13/1.14 (zwischen 01:00 und 02:30) - KPI-Sparklines mit Achsen-Skala (Y auto, X 1..22) - Schiff-/LKW-/Flieger-Volume separat einstellbar (Schiff 0.35) - buildKpiTimeSeries iteriert über alle Reports (nicht nur abgeschlossene Jahre) ## Vorher Phase 1.12 (00:30) - **KPI-Sparklines** statt nur aktueller Zahlenwerte: Einnahmen, Treffer-Quote und CO₂ werden als Mini-SVG-Linien dargestellt. - X-Achse fix 1..22 (volle Spielzeit, „geht sich bis zum Schluss aus") - Y-Achse auto-skaliert mit 10 % Reserve, außer Treffer-Quote (fix 0..100 %) - Gestrichelte vertikale Linie bei Jahr 11 = Endbericht-Trigger zur Orientierung - Aktueller Wert mit Punkt markiert, Y-Max-Label oben rechts - Farben: Einnahmen grün, Treffer-Quote braun, CO₂ rot - **Per-Sound-Volume-Tabelle** (`SOUND_VOLUMES`): vehicle_ship 0.35 (war 0.7), vehicle_plane/truck 0.55. Andere SFX bleiben bei 0.7 default. ## Vorher Phase 1.12 (00:30) - **24 Sound-Effekte via ElevenLabs Sound Generation API** generiert (`scripts/generate-sounds.php`): - 14 Aktions-SFX: harvest_start, vehicle_truck/ship/plane, vehicle_arrive, disease_outbreak, monoculture_warn, year_advance, unlock_crop, negative_balance, end_report_open, reset, report_open/next - 10 Per-Sorten-Sounds (Tiere mit Geräuschen, Pflanzen mit Rascheln): crop_wheat (Halme rascheln) · crop_banana (Tropenblätter) · crop_reindeer (Brunftruf) · crop_camel (Kamelgrunzen) · crop_rice (Wasserplätschern) · crop_coffee (Hochlandbrise) · crop_dates (Palmwedel) · crop_corn (Maisrauschen) · crop_fish (Wasser-Splash) · crop_olive (Mediterran-Cicadas) - **12 Musik-Loops** (vom User geliefert) in `assets/sounds/music/`: hamburg1-2, newyork1-2, shanghai1-2, saopaulo1-2, dubai1-4. Pro Markt zufällige Auswahl, wechselt automatisch beim Markt-Block-Wechsel. - **Audio-System**: - Mute-Toggle 🔊/🔇 in Topbar (persistiert in localStorage) - Sounds preloaded beim Boot - playSound() klont Audio-Element für überlappende Wiedergabe - Browser-Autoplay-Block durch erste User-Interaktion (Welcome-Close) gelöst - Hintergrundmusik bei 20 % Lautstärke (nicht ablenkend) - **API-Key** in `App/.env.local` als `ELEVENLABS_API_KEY=...` gespeichert. - **Generierungs-Skript** idempotent + `--force`/`--only=name` Flags. ## Vorher Phase 1.11 (23:30) - **Endbericht-Trigger** auf Jahr 11 vorgezogen (= 10 abgeschlossene Jahre) → Standard-Spieldauer 10–20 Min wie gewünscht. Schüler*in kann nach Endbericht via „Weiter arbeiten" bis Jahr 22+ (alle 10 Sorten unlocked). - **Audio-System**: - Mute-Toggle 🔊/🔇 in Topbar, persistiert in localStorage - `playSound(name, opts)` respektiert audioEnabled - `startBackgroundMusic()` Stub für Hintergrundmusik - bgMusicAudio wird bei Mute pausiert - **SOUNDS-TODO.md komplett überarbeitet**: - 15 Sound-Effekte (Sound Effects API) - 6 Hintergrundmusik-Loops (Suno/Stable Audio empfohlen) - Stil: ambient-akustisch, optional regional pro Markt - Generierungs-Prompts für jeden Sound ## Vorher Phase 1.10 (23:00) Sterne-Wertung, Plattform-Submit, Reset-Funktion. Modul bleibt `beta`. ## Phase 1.10 — Endbericht (final step) - **Endbericht-Modal** öffnet automatisch nach Erreichen Jahr 16 (= 1 voller Hub-Cycle). Zeigt: - ⭐⭐⭐⭐☆ Sterne (1–5 abhängig vom Score) - Score 0–100 (gewichteter Durchschnitt aus 7 Kategorien) - 6 Stat-Kacheln (Einnahmen, Treffer-Quote, CO₂, Krankheiten, Sortenvielfalt, Länder) - Verbesserungs-Tipps (regelbasiert, je nach schwachen Bereichen) - Submit-Status zur Plattform - **Score-Berechnung** (`computeFinalScore`): - Money 25 % (linear bis 30 000 €) - Hit-Rate 20 % (S1+S2 Anteil) - CO₂ 15 % (invertiert, < 1 000 kg/Jahr → 100, > 5 000 → 0) - Disease-Avoidance 10 % - Crops/Countries/Climates je 10 % - **Plattform-Submit**: `POST /php/api/progress.php` mit `action='submit_assessment'` und vollem `data`-Payload (level, stars, score, duration_ms, results, action_log mit letzten 100 Reports). Mit Multi-Pfad-Fallback wegen Wrapper-Bug (siehe Inbox). - **Reset-Funktion**: kompletter Restart inkl. Marker, Kreise, Counter, Money. Bestätigungs-Dialog vor Löschung. - **Inbox an zentrale**: `2026-05-03-2230-farmer-api-base-fix.md` — Wrapper-Bug `FARMER_API_BASE` zeigt auf `/api` statt `/php/api`. Plus: `progress.php` referenziert unbekannte `Database`-Klasse (Plattform-Bug, nicht Farmer). ## Vorher Phase 1.9 (22:00) - **10 Sorten** mit Unlock-Plan über 22 Jahre: Jahr 1: Weizen / Banane / Rentier · Jahr 4: Kamel · Jahr 7: Reis · Jahr 10: Kaffee · Jahr 13: Datteln · Jahr 16: Mais · Jahr 19: Fisch (aquatic) · Jahr 22: Olive - **🐟 Fisch** ist die erste **aquatic** Sorte: S1 in Wasser, N2 auf Land. Engine unterstützt das via `crop.aquatic` + `crop.suitability.wasser` Lookup. - **KPI-Panel links** mit 4 Live-Kennzahlen: 💰 Einnahmen (kumulativ) · 🎯 Treffer-Quote (S1+S2 % aller Versuche, mit Bar) · 🌫 CO₂-Fußabdruck (kumulativ, Farb-Hinweis bei >5t/Jahr) · 📦 Versuche · 🦠 Krankheiten - **Marker-Schrumpfung** nach RECOVERY_YEARS (4): Symbol schrumpft linear über FADE_YEARS (8) auf min. 32 % der Größe. Banane bleibt erkennbar, alte Felder werden zu kleinen Hinweis-Punkten ohne Wirkung. - **Realistische Frachtraten** (UNCTAD/Eurostat 2023): LKW 0,07 / Schiff 0,015 / Flieger 1,5 €/t·km. Reefer-Aufschlag 1,5× Kosten + 2× CO₂. - **CO₂-Faktoren** (Umweltbundesamt 2022): LKW 90 / Schiff 15 / Flieger 1000 g/t·km. - **OSM-Deutsch-Karte** statt Carto Positron: deutsche Beschriftung + Vegetations-Färbung (Wald grün, Wüste beige, Tundra ocker). - **Welt-Wrap aus** + maxBounds (kein Klick mehr in der „zweiten" Welt). - **DATA_VERSION = 20.** ## Vorher Phase 1.8 (19:30) - **Regionale Lieferung**: für jedes Feld wird die nächste Konsumcity des aktiven Markt-Hubs gesucht. Wenn diese < `REGIONAL_DELIVERY_KM` (2000 km) entfernt ist, fährt das Vehicle direkt dorthin (kein Hub-Umweg). Andernfalls geht es international zum Hub und wird von dort distribuiert. - **Engine** speichert pro Report `destination`, `isRegional`. Bericht zeigt bei Direktlieferung „🚚 LKW → **Paris** (Hamburg-Region) (206 km)". Bei Hub-Lieferung wie bisher „🚢 Schiff → Hamburg (4500 km)". - **Distribution-Animation** vom Hub läuft nur, wenn mindestens eine internationale Lieferung am Hub angekommen ist. Bei rein regionaler Belieferung sind alle Vehicles bereits direkt bei den Konsument*innen. - **fitBounds** zieht jetzt auch die echten Ziele (destination) ein, nicht nur den Hub — Direktlieferungen werden im Welt-View mit eingerahmt. - **DATA_VERSION = 18.** ## Beispiel-Routen mit Hamburg-Markt | Anbau | Distanz Hub | Distanz nächste City | Direkt? | |---|---|---|---| | Frankreich (47°N, 2.5°E) → Paris | 901 km | 206 km | **ja → Paris direkt** | | Lappland → Berlin | 1790 km | 1829 km | ja → Berlin direkt | | Marokko → Paris | 2854 km | 2135 km | nein → über Hamburg | | Senegal → Paris | 4907 km | 4176 km | nein → über Hamburg | ## Vorher Phase 1.7b (18:30) - **Welt-Wrap aus**: `worldCopyJump: false`, `maxBounds: [[-85,-180],[85,180]]`, `maxBoundsViscosity: 1.0`, `noWrap: true` auf Tile-Layer. Klick in der „zweiten" Welt rechts vom Bering-Strait nicht mehr möglich → kein Bug „Land als Wasser". - **Bodenwirkungs-Kreise 20 % kleiner**: `monoculture.radiusKm` 1500 → 1200 km (Kreis-Radius pro Feld 750 → 600 km). Karte wirkt aufgeräumter. - **Markt-Hub blinkt grün**: aktiver Hub bekommt `.active` CSS-Klasse mit `farmer-hub-pulse` Animation (1.4 s Cycle). Wechselt automatisch alle 3 Jahre. - **Distribution-Animation**: nach Vehicle-Ankunft am Hub fahren 3 zufällige LKW vom Hub zu regionalen Konsumcity. Pro Hub 5 vordefinierte Cities in `hubs.json` (Hamburg → Berlin/Paris/Wien/Mailand/Warschau, NY → Toronto/Boston/ Atlanta/Chicago/Miami, Shanghai → Tokyo/Seoul/Hongkong/Taipeh/Manila, São Paulo → Rio/BH/Asunción/BA/Brasília, Dubai → Riyadh/Tehran/Karachi/Mumbai/ Cairo). Pin-Toast mit Stadtname am Zielort. Visuell, kein Geld-Effekt. - **Transport 150 % Zeit**: alle `speedKmPerSec` /1.5 in hubs.json, animateOneTrade Cap auf 2250–12000 ms erhöht. - **DATA_VERSION = 17b.** ## Vorher Phase 1.7a (17:30) - **Markt-Block**: jeder Markt-Hub bleibt 3 Jahre aktiv (war: 1 Jahr) — Schüler*in hat Zeit, Anbau auf die passende Klimazone auszurichten. Anzeige im Chip zeigt Restjahre („🇪🇺 Hamburg (noch 2 Jahre)"). Block-Plan: Jahr 1–3 Hamburg · 4–6 New York · 7–9 Shanghai · 10–12 São Paulo · 13–15 Dubai · ... - **Verschiff-Karte fittet alle Punkte**: vor `animateTrades` wird `flyToBounds` über alle Reports + Hub gemacht (statt fixem Welt-Center) → USA, Asien etc. immer komplett sichtbar während Vehicle-Animation. `maxZoom: 3` hält die Übersicht. - **DATA_VERSION = 17a.** ## Vorher Phase 1.7 (16:00) - **Markt-Auftrag pro Jahr**: zyklisch durch alle 5 Hubs (Jahr 1=Hamburg, 2=New York, 3=Shanghai, 4=São Paulo, 5=Dubai, 6=Hamburg ...). Alle Lieferungen gehen jährlich an den Auftrags-Hub. Anzeige in Year-Bar. Lehrt: Anbau in der Nähe des Marktes ist optimal (klassische Wirtschaftsgeographie). - **Bodenwirkungs-Kreise**: Jedes Feld hat einen 750-km-Radius-Kreis (= halber Monokultur-Radius). Berühren sich zwei Kreise gleicher Sorte → Bodenmüdigkeit greift, ab 3 verbundenen → Krankheits-Risiko. Visuell elegant: Sichtbarkeit = Logik. - **Schrumpfung**: Pro Jahr schrumpft jeder Kreis um 25 %. Nach 4 Jahren (RECOVERY_YEARS) ist der Boden erholt — Kreis verschwindet, Marker bleibt als Lerngeschichte. - **Reefer-Schiff statt Flieger**: Banane wird jetzt realistisch per gekühltem Schiff transportiert (1.5× Standard-Schiff-Preis). Flieger-Trigger raus — entspricht echter Bananenlogistik (Ecuador → Hamburg per Schiff). - **DATA_VERSION = 17.** ## Vorher Modul bleibt `beta`. Vergangene Felder gefüllt eingefärbt (Lerngeschichte sichtbar), Animation halbiert + Welt-Zoom davor. **Monokultur-Mechanik (`monoculture` in crops.json):** - Radius 1500 km, Bodenmüdigkeit −15 % pro nahem Feld gleicher Sorte (max −60 %) - Krankheits-Ausbruch: ab 3 verbundenen Feldern (transitive Cluster) jährlich 25 % Wahrscheinlichkeit für Totalausfall — deterministisch via Cluster-Hash - Diagnose-Pool je Sorte: Schwarzrost (Weizen), Panama-Krankheit / Schwarze Sigatoka (Banane), Hufrehe / Insektenplage (Rentier), MERS / Trypanosomiasis (Kamel) **Unlock-System:** - Jede Sorte hat `unlockYear` in crops.json - Counter pro Sorte: 1–3 Sorten=3, 4=2, 5=2, 6+=1 (Gesamt-Interventionen sinken pro Sorte mit zunehmender Vielfalt) - 🐪 Kamel ab Jahr 4 freigeschaltet (Wüsten-Spezialist, S1 in Wüste + tropisch trocken) - Toast-Hinweis bei Freischaltung **Sound-System (Stub):** - `playSound(name)` in game.html als Stub (Console-Log) - 13 Sound-Hooks an passenden Stellen verdrahtet (plant, harvest, vehicle_*, vehicle_arrive, disease_outbreak, year_advance, unlock_crop, etc.) - Liste mit ElevenLabs-Prompts: `App/sims/farmer/SOUNDS-TODO.md` - Aktivierung sobald `ELEVENLABS_API_KEY` da ist **Vergangene Felder gefüllt:** alte (year < game.year) Marker bekommen Eignungsfarbe als Hintergrund-Füllung (Emoji bleibt sichtbar). Diesjährige Ernte: nur Ring + weißer Hintergrund (frisch-Look). **Animation langsamer + Welt-Zoom:** Geschwindigkeiten halbiert (LKW 750/Schiff 2000/Flieger 3000 km/sec), Animation max 8 sec, Geld-Toast 2.5 sec sichtbar. Vor `animateTrades` zoomt Karte auf Welt-Übersicht (zoom 3, [30,15]). **DATA_VERSION = 16** — JSON-Files cache-bust automatisch. **Country-Lookup:** `world-land.json` ersetzt durch `world-countries.json` (Natural Earth 110m, 178 KB, 177 Länder mit name_de/iso2/continent). Berichte zeigen jetzt „📍 Brasilien (South America) · Tropisch feucht". **Sortenspezifische Einheiten + Preise:** - 🌾 Weizen: 1 Tonne Weizen, S1 = 250 € - 🍌 Banane: 1 Tonne Bananen, S1 = 750 €, verderblich (über 4000 km Flieger nötig) - 🦌 Rentier: 1 Rentier (~80 kg Fleisch), S1 = 1500 € **Transportkosten** in € pro Tonne-km × Sorten-Tonnage. LKW 0.15 / Schiff 0.02 / Flieger 0.50. Rentier (0.08 t pro Tier) ist transport-leicht → fast immer profitabel. Banane in Amazonas → Flieger → massiver Verlust (didaktisch perfekt). **UI-Refactor:** Berichte rechts statt Modal. Eine Card nach der anderen. Karte fliegt zur Pflanzungs-Position, Marker pulsiert (CSS-Animation). Picker versteckt während Bericht-Modus, kommt nach Trade-Animation mit aufgefüllten Countern zurück. **Diagnose-Texte erweitert** — pro Eignungsklasse 2 Texte mit konkretem Wirkmechanismus (Temperaturen, Niederschlagsmengen, Tonnage pro Hektar etc.). **Land-Wasser:** Natural Earth 1:110m Land-Polygone (`world-land.json`, 85 KB, 127 Features, 5143 Punkte). 9/9 Sanity-Tests bestanden: Wien=Land, Hudson Bay=Wasser, Mittelmeer=Wasser, Sahara=Land, etc. **Auto-Switch entfernt:** wenn die gewählte Sorte aufgebraucht ist, zeigt ein Toast die anderen verfügbaren Sorten — User muss aktiv wechseln (verhindert „ich dachte, ich pflanze noch Rentier"). ## Was passiert ist - 2026-05-03 00:30 — Onboarding von Logistik-Instanz erhalten. - 2026-05-03 00:45 — Konzept mit Thomas iteriert + freigegeben. - 2026-05-03 00:50 — Atlas-Auftrag in `_inbox/zentrale/`. - 2026-05-03 01:25 — Logistik liefert Skelett in Atlas-Stellvertretung. - 2026-05-03 02:15 — Phase 1 gebaut + DB-Status auf `beta` gesetzt. ## Phase 1.5 — Re-Design (Polygon-Reveal raus, Trade-Mechanik rein) - **Polygone nicht mehr sichtbar** — Köppen-Lookup bleibt im Hintergrund, aber visuell verschwinden die rechteckigen Reveal-Flächen (waren didaktisch schlecht: verraten Klimazone vor Lernarbeit, optisch überladen). - **3 Versuche pro Sorte pro Jahr** — Counter im Picker (3/3 → 0/3), Refill bei `nextYear`. Pflanzen ist überall erlaubt (auch Wasser). - **Field-Marker mit Ring** — vor Ernte: dezenter brauner Rand. Nach Ernte: farbiger Ring in Eignungs-Farbe (🟢🟩🟡🟠🔴). Ringe **bleiben permanent** — Lernkarte wächst sichtbar mit. Klick auf Marker zeigt Diagnose-Popup. - **5 Welt-Hubs** als permanente Karten-Marker (Hamburg, New York, Shanghai, São Paulo, Dubai). Jede Ernte sucht den nächsten Hub. - **Trade-Animation** nach Erntebericht: 🚚 / 🚢 / ✈️ rutscht von Marker zu Hub. Verkehrsmittel-Wahl: Verderbliches + Distanz > 4000 km → Flieger; < 1500 km → LKW; sonst Schiff. Beim Ankommen: Geld-Toast am Hub. - **Geld-Bilanz** in Topbar — wird grün/rot je nach Vorzeichen. Brutto: 100 € (S1) bis 0 € (N2). Transport: € pro km × Modus-Faktor. Banane mitten im Amazonas → top Eignung, aber langer Schiffstransport → wenig Netto. Banane in Marokko → S2 + kurzer Schiffstransport → bessere Bilanz. ## Was vorher Phase 1 war (nicht mehr aktiv) - Visueller Polygon-Reveal-Layer in Eignungsfarben: ersetzt durch Marker-Ringe. - Welcome-Text auf neue Mechanik aktualisiert. - **`assets/data/koeppen-zones.json`** — vereinfachte Köppen-Geiger-Zonen (8 Großzonen, 36 Polygone insgesamt) als GeoJSON. - **`assets/data/crops.json`** — 3 L1-Sorten (🌾 🍌 🦌) mit FAO-GAEZ- Eignungsmatrix (3 × 8 = 24 Lookup-Werte) und Diagnose-Texten (5 Eignungsstufen × 2-3 Narrative). - **`engine.js`** — Stubs implementiert: `loadData`, `getZoneAt` (Point-in- Polygon), `getSuitability`, `plant` (mit Zone-Reveal), `harvestYear` (mit deterministischem Diagnose-Pick via Mulberry32), `nextYear`. - **`game.html`** — Welt-Karte mit Picker rechts, Reveal-Layer (eingefärbt nach aktuell gewählter Sorte), Welcome- und Erntebericht-Modal, iPad-Pattern (dvh, safe-area, sticky-actions, Float-✕), Easy-Sprache via `pickText()`. ## Verifikation lokal - `curl localhost/geograsim/App/farmer` → HTTP 200, 16.8 KB - `engine.js`, `crops.json`, `koeppen-zones.json` → alle HTTP 200 - Wrapper-Injection korrekt: `FARMER_BASE='/geograsim/App/sims/farmer/'`, `FARMER_TILE_PROXY='/geograsim/App/php/tile-proxy.php'`, `engine.js` mit absolutem Pfad. - DB: `module_info.status='beta'`, Title `Landwirtschaft`, Icon `🌾`. ## Was nicht in Phase 1 ist (kommt Phase 2 / 3) - Naturkatastrophen (Dürre, Hagel, Frost) — Phase 2 - Budget / Ökonomie — Phase 2 - Mehr Sorten (Mais, Reis, Kartoffel, Kaffee, Rind, Schaf, Kamel) — Phase 2 - Klimawandel-Engine, Schnellvorlauf, Marktpreise — Phase 3 ## Test am iPad URL: (nach Deploy) bzw. lokal: . Erwartetes Verhalten: - Welcome-Modal öffnet sich, schließt mit „Los arbeiten" oder Float-✕. - Karte zeigt Welt im Carto-Positron-Stil. - Picker rechts mit 3 Sorten, eine ist aktiv (🌾 default). - Klick auf Land → Crop-Marker, Köppen-Zone wird in Eignungs-Farbe eingefärbt, „Erntejahr starten" wird klickbar. - Klick auf Wasser → Toast „🌊 Hier ist Wasser". - Klick auf andere Sorte im Picker → Reveal-Layer wechselt Farben. - „Erntejahr starten" → Bericht-Modal mit Diagnose pro Feld. - „Weiter zum nächsten Jahr" → Year-Counter zählt hoch, Felder werden zu „fallow", Marker bleiben sichtbar.