- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/ - 12 code-workspace-Files - STATUS-*.md - viele M/D/R-Änderungen an bereits getrackten Files - .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
23 KiB
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-LieferungApp/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-LoopsApp/sims/farmer/scripts/generate-sounds.php— idempotenter Sound-Generator
Offene Punkte für Folge-Instanz
- 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). progress.phpDatabase-Class-Bug — Plattform-Bug, gleiche Mail.- Card-Bild für
module_info.card_image— bisher kein Bild gesetzt. Vorschlag in der Status-Mail an Atlas (2026-05-05 11:00). - LIVE_PRIMARY_FIELDS — Atlas soll sie aus meinem Vorschlag in
teacher.htmleintragen (7 Spalten: Jahr, Markt, Geld €, Treffer %, CO₂ kg, Felder, 🦠). - 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.mdin 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 VORgemaessigt_feuchtgeprüft (im Polygon-Lookup zuerst gefunden). gemaessigt_feuchtreduziert 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.jsonhaben 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.localalsELEVENLABS_API_KEY=...gespeichert. - Generierungs-Skript idempotent +
--force/--only=nameFlags.
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 audioEnabledstartBackgroundMusic()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.phpmitaction='submit_assessment'und vollemdata-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-BugFARMER_API_BASEzeigt auf/apistatt/php/api. Plus:progress.phpreferenziert unbekannteDatabase-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.wasserLookup. - 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: trueauf 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.radiusKm1500 → 1200 km (Kreis-Radius pro Feld 750 → 600 km). Karte wirkt aufgeräumter. - Markt-Hub blinkt grün: aktiver Hub bekommt
.activeCSS-Klasse mitfarmer-hub-pulseAnimation (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
animateTradeswirdflyToBoundsüber alle Reports + Hub gemacht (statt fixem Welt-Center) → USA, Asien etc. immer komplett sichtbar während Vehicle-Animation.maxZoom: 3hä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
unlockYearin 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_KEYda 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
betagesetzt.
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 viapickText().
Verifikation lokal
curl localhost/geograsim/App/farmer→ HTTP 200, 16.8 KBengine.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.jsmit absolutem Pfad. - DB:
module_info.status='beta', TitleLandwirtschaft, 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: https://geograsim.at/farmer (nach Deploy) bzw. lokal: http://localhost/geograsim/App/farmer.
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.