diff --git a/App/sims/farmer/assets/data/crops.json b/App/sims/farmer/assets/data/crops.json index 5a3c46c..81b7821 100644 --- a/App/sims/farmer/assets/data/crops.json +++ b/App/sims/farmer/assets/data/crops.json @@ -217,7 +217,7 @@ ], "N1": [ "Zu feucht ganzjährig — Hufkrankheiten, Parasiten, Pilzbefall im Fell. Die Tiere magern ab. Geringer Ertrag.", - "Kamele in Nordeuropa? Sie überleben kurz, aber die Feuchtigkeit zerstört ihr Wesen. Keine Wirtschaftsbasis." + "Für Kamele viel zu feucht: Sie überleben kurz, aber die ständige Feuchtigkeit zerstört Fell und Hufe. Keine Wirtschaftsbasis." ], "N2": [ "Tropischer Regenwald: Permanente Feuchtigkeit, zu warm, falsches Futter. Die Tiere gehen ein.", diff --git a/App/sims/farmer/engine.js b/App/sims/farmer/engine.js index 48ee0ad..de092bd 100644 --- a/App/sims/farmer/engine.js +++ b/App/sims/farmer/engine.js @@ -368,6 +368,38 @@ window.FarmerEngine = (function () { return pool[idx]; } + // Zone-charakteristische Stichwörter: wählt bei mehrdeutigen Pools den + // KLIMAPASSENDEN Grund-Text statt zufällig einen klimafremden (Bug: Polar-Text + // auf tropischem Feld). Greift zusätzlich zu den spezifischen + // narratives[sui+'_'+zoneId]-Keys. + const ZONE_KEYWORDS = { + tropisch_feucht: ['tropisch', 'regenwald', 'schwül', 'permanente feucht', 'ganzjährig feucht'], + tropisch_trocken: ['savanne', 'tropisch trocken', 'regenzeit', 'trockenzeit'], + wueste: ['wüste', 'aride', 'dürre', 'extrem trocken', 'sand'], + mittelmeer: ['mittelmeer', 'mediterran'], + subtropisch_feucht: ['subtropisch', 'schwül'], + gemaessigt_feucht: ['gemäßigt', 'mitteleurop', 'feuchtes klima'], + kontinental: ['kontinental', 'steppe', 'binnenland'], + boreal: ['boreal', 'taiga', 'kurze sommer', 'frost'], + polar: ['polar', 'permafrost', 'arktis', 'ewiger schnee', 'tundra', 'schnee-tier'], + }; + function pickZoneAware(pool, zoneId, rng) { + if (!pool || pool.length === 0) return '(kein Bericht)'; + if (pool.length === 1) return pool[0]; + const kws = ZONE_KEYWORDS[zoneId]; + if (kws) { + let best = null, bestScore = 0; + for (const t of pool) { + const s = (typeof t === 'string' ? t : (t && t.de) || '').toLowerCase(); + let score = 0; + for (const kw of kws) if (s.indexOf(kw) >= 0) score++; + if (score > bestScore) { bestScore = score; best = t; } + } + if (best) return best; // klar passender Text gefunden + } + return pickFromPool(pool, rng); // sonst wie bisher + } + function harvestYear(game) { if (!CROPS_INDEX) return []; const reports = []; @@ -434,7 +466,7 @@ window.FarmerEngine = (function () { const specificPool = crop.narratives && crop.narratives[specificKey]; const classPool = crop.narratives && crop.narratives[sui]; const pool = (specificPool && specificPool.length > 0) ? specificPool : classPool; - narrative = pickFromPool(pool, rng); + narrative = pickZoneAware(pool, field.zoneId, rng); } // Trade — Markt-Hub des Jahres, ggf. regional direkt zur Konsumcity