// Spieldaten: Gebäude, Szenarien, Meilensteine, Entscheidungen, Aufträge, // Event-Karten. Alle drei Szenen sind data-driven über SCENARIOS definiert. export const BUILDINGS = { lift: { name: 'Sessellift', emoji: '🚡', cost: 12000, upkeep: 120, zone: 'mid', staff: 4, cap: 200, pisteLen: 5, desc: 'Bringt bis zu 200 Gäste pro Tag auf die Piste. Nur am Hang baubar.', }, gondola: { name: 'Gondelbahn', emoji: '🚠', cost: 22000, upkeep: 220, zone: 'mid', staff: 5, cap: 300, pisteLen: 8, desc: 'Bis in die Hochlagen: 300 Gäste pro Tag und eine lange Abfahrt.', }, hotel: { name: 'Hotel', emoji: '🏨', cost: 9000, upkeep: 90, zone: 'valley', staff: 5, beds: 60, desc: '60 Betten – Übernachtungsgäste bringen mehr Einnahmen.', }, restaurant: { name: 'Gasthaus', emoji: '🍽️', cost: 4500, upkeep: 45, zone: 'any', staff: 3, spendBonus: 7, desc: 'Gäste geben mehr aus und sind zufriedener.', }, snow: { name: 'Beschneiung', emoji: '❄️', cost: 6000, upkeep: 15, zone: 'mid', staff: 1, snowPower: 2.5, desc: 'Erzeugt Schnee in warmen Wintern. Braucht Wasser: nahe am Fluss bauen! Betrieb kostet 45 €/Tag.', }, rescue: { name: 'Rettungsstation', emoji: '⛑️', cost: 7000, upkeep: 50, zone: 'valley', staff: 2, satBonus: 3, desc: 'Bergrettung mit Notarzthubschrauber: verunglückte Ski-Gäste werden automatisch geborgen – und alle fühlen sich sicherer.', }, access: { name: 'Bushaltestelle', emoji: '🚌', cost: 3000, upkeep: 30, zone: 'valley', staff: 1, access: 150, desc: '150 weitere Gäste pro Tag. Muss direkt an der Talstraße stehen.', }, staffhouse: { name: 'Personalhaus', emoji: '🏠', cost: 5000, upkeep: 25, zone: 'valley', staff: 0, housing: 12, desc: 'Wohnraum für 12 Mitarbeiter/innen – ohne Wohnung kein Personal.', }, badesee: { name: 'Badesee', emoji: '🏖️', cost: 8000, upkeep: 60, zone: 'valley', staff: 2, summerCap: 100, satBonus: 4, desc: 'Badespaß für 100 Sommergäste. Braucht Wasser: nahe am Fluss bauen!', }, sled: { name: 'Sommerrodelbahn', emoji: '🛷', cost: 9000, upkeep: 70, zone: 'mid', staff: 2, summerCap: 140, satBonus: 3, desc: 'Rasant den Hang hinunter – 140 Sommergäste, ganz ohne Schnee.', }, trail: { name: 'Panoramaweg', emoji: '🥾', cost: 7000, upkeep: 40, zone: 'mid', staff: 1, summerCap: 120, desc: 'Wander- und Bikeweg am Hang – bis zu 120 Sommergäste, unabhängig vom Schnee.', scenes: ['klimawandel'], }, bikepark: { name: 'Bikepark', emoji: '🚵', cost: 10000, upkeep: 80, zone: 'mid', staff: 2, summerCap: 160, trailLen: 5, desc: 'Flowtrail-Strecke den Hang hinunter: bis 160 Sommergäste. Braucht 5 freie Felder talwärts für die Strecke – und eine Bahn in der Nähe (max. 4 Felder).', }, ropes: { name: 'Hochseilgarten', emoji: '🧗', cost: 6500, upkeep: 45, zone: 'mid', staff: 2, summerCap: 90, satBonus: 2, desc: 'Klettern in Baumwipfel-Höhe – 90 Sommergäste, besonders schonend für die Natur.', }, bikerental: { name: 'Fahrradverleih', emoji: '🚲', cost: 3500, upkeep: 25, zone: 'valley', staff: 1, boost: 0.25, desc: 'Räder & E-Bikes: Bikepark und Panoramaweg im Umkreis (4 Felder) bekommen +25 % Gäste.', }, platform: { name: 'Aussichtsplattform', emoji: '🌉', cost: 8000, upkeep: 30, zone: 'any', staff: 1, summerCap: 130, satBonus: 2, desc: 'Skywalk mit Panorama: 130 Ausflugsgäste. Hoch am Berg bauen, nahe der Tal- oder Bergstation einer Bahn.', }, playground: { name: 'Erlebnisspielplatz', emoji: '🎠', cost: 5500, upkeep: 35, zone: 'valley', staff: 2, summerCap: 80, satBonus: 4, desc: 'Wasserspiele & Kletterburg für Familien – 80 Sommergäste und viel Zufriedenheit.', }, forest: { name: 'Aufforsten', emoji: '🌲', cost: 1500, upkeep: 0, zone: 'any', staff: 0, action: 'plant', desc: 'Pflanzt Wald auf eine freie Wiese: +3 Naturwert. Beliebig oft wiederholbar – so gestaltest du Natur aktiv.', }, }; // Start im Sommer: ruhige Aufbauphase, der erste Winter wird zur Bewährungsprobe export const SEASONS = ['Sommer', 'Herbst', 'Winter', 'Frühling']; export const DAYS_PER_SEASON = 30; // ---------- Aufträge je Szene ---------- const QUESTS_PIONIER = [ { id: 'q1', icon: '🥾', title: 'Die ersten Gäste', desc: '40 Gäste an einem Tag', reward: 2000, check: s => s.guestsToday >= 40 }, { id: 'q2', icon: '🎿', title: 'Ski-Opening', desc: '100 Gäste an einem Wintertag', reward: 4000, check: s => s.season === 'Winter' && s.guestsToday >= 100 }, { id: 'q3', icon: '😊', title: 'Gern gesehen', desc: 'Zufriedenheit über 80 %', reward: 3000, check: s => s.satisfaction >= 80 }, { id: 'q4', icon: '🛏️', title: 'Volles Haus', desc: '50 Übernachtungsgäste an einem Tag', reward: 5000, check: s => s.overnightToday >= 50 }, { id: 'q5', icon: '🌲', title: 'Grünes Tal', desc: 'Naturwert über 80 % mit mind. 5 Betrieben', reward: 4000, check: s => s.nature >= 80 && s.buildings.length >= 5 }, { id: 'q6', icon: '🏆', title: 'Ausgebucht', desc: '250 Gäste an einem Tag', reward: 8000, check: s => s.guestsToday >= 250 }, ]; const QUESTS_BOOM = [ { id: 'b1', icon: '📈', title: 'Boom nutzen', desc: '350 Gäste an einem Tag', reward: 6000, check: s => s.guestsToday >= 350 }, { id: 'b2', icon: '👷', title: 'Gut besetzt', desc: 'Alle Stellen besetzt bei mind. 15 Beschäftigten', reward: 5000, check: s => s.staffNeeded >= 15 && s.staffAvailable >= s.staffNeeded }, { id: 'b3', icon: '🌲', title: 'Gegensteuern', desc: 'Naturwert wieder über 70 %', reward: 6000, check: s => s.nature >= 70 }, { id: 'b4', icon: '😊', title: 'Qualität statt Masse', desc: 'Zufriedenheit über 78 % bei 300+ Gästen', reward: 8000, check: s => s.satisfaction >= 78 && s.guestsToday >= 300 }, ]; const QUESTS_KLIMA = [ { id: 'k1', icon: '🥾', title: 'Neue Wege', desc: 'Baue einen Panoramaweg', reward: 4000, check: s => s.buildings.some(b => b.type === 'trail') }, { id: 'k2', icon: '☀️', title: 'Sommerfrische', desc: '150 Gäste an einem Sommertag', reward: 5000, check: s => s.season === 'Sommer' && s.guestsToday >= 150 }, { id: 'k3', icon: '❄️', title: 'Schneesicher', desc: '60 cm Schnee dank Beschneiung', reward: 5000, check: s => s.snow >= 60 && s.buildings.some(b => b.type === 'snow') }, { id: 'k4', icon: '🌍', title: 'Ganzjahresziel', desc: '200 Gäste an einem Sommertag', reward: 8000, check: s => s.season === 'Sommer' && s.guestsToday >= 200 }, ]; // ---------- Szenarien ---------- export const SCENARIOS = { pionierzeit: { id: 'pionierzeit', name: '– Pionierzeit 1975', startYear: 1975, startMoney: 30000, startAwareness: 0.35, startNature: 88, baseAccess: 120, baseStaffHousing: 8, demand: { Winter: 290, 'Frühling': 60, Sommer: 140, Herbst: 85 }, summerSpend: 12, overnightSpend: 30, wage: 24, snowCannonRun: 45, warmWinterChance: 0.3, deadlineDay: 600, goalsTitle: 'Ziele bis Ende 1979', prebuilt: [], startUnlocked: ['restaurant', 'forest'], // kleine Schritte! stageRow: 8, // Hochlagen anfangs wolkenverhangen quests: QUESTS_PIONIER, goals: [ { id: 'guests', label: '220 Gäste an einem Tag', check: s => s.stats.maxGuests >= 220 }, { id: 'money', label: '200.000 € auf dem Konto', check: s => s.money >= 200000 }, { id: 'sat', label: 'Zufriedenheit mind. 70 %', check: s => s.satisfaction >= 70 }, { id: 'nature', label: 'Naturwert mind. 55 %', check: s => s.nature >= 55 }, ], intro: { id: 'intro-pionierzeit', icon: '👋', title: 'Willkommen im Tal!', text: 'Sommer 1975. Du übernimmst die Entwicklung eines kleinen, stillen ' + 'Alpentals.\n\nFang klein an: Baue zuerst ein Gasthaus im Tal, in der ' + 'Nähe des Dorfes. Dann kommen die ersten Wanderer – und alles Weitere ' + 'ergibt sich Schritt für Schritt.', }, }, boom: { id: 'boom', name: '– Boom 2000', startYear: 2000, startMoney: 45000, startAwareness: 0.9, // das Tal ist längst bekannt startNature: 68, // und trägt schon Spuren baseAccess: 200, baseStaffHousing: 10, demand: { Winter: 500, 'Frühling': 100, Sommer: 240, Herbst: 150 }, summerSpend: 16, overnightSpend: 38, wage: 28, snowCannonRun: 55, warmWinterChance: 0.35, deadlineDay: 480, goalsTitle: 'Ziele bis Ende 2003', prebuilt: ['restaurant', 'lift', 'access', 'hotel'], startUnlocked: 'all', stageRow: 0, quests: QUESTS_BOOM, goals: [ { id: 'guests', label: '450 Gäste an einem Tag', check: s => s.stats.maxGuests >= 450 }, { id: 'money', label: '500.000 € auf dem Konto', check: s => s.money >= 500000 }, { id: 'sat', label: 'Zufriedenheit mind. 75 %', check: s => s.satisfaction >= 75 }, { id: 'nature', label: 'Naturwert mind. 60 %', check: s => s.nature >= 60 }, ], intro: { id: 'intro-boom', icon: '📈', title: 'Der Boom ist da!', text: 'Sommer 2000. Das Tal ist längst kein Geheimtipp mehr – die Gäste ' + 'strömen, und alle wollen ausbauen.\n\nAber die Natur trägt schon ' + 'Spuren, und die Einheimischen murren. Schaffst du Wachstum, OHNE ' + 'das Tal zu verkaufen? Qualität und Naturwert entscheiden.', }, }, klimawandel: { id: 'klimawandel', name: '– Schneegrenze 2035', startYear: 2035, startMoney: 40000, startAwareness: 0.8, startNature: 75, baseAccess: 180, baseStaffHousing: 10, demand: { Winter: 360, 'Frühling': 110, Sommer: 220, Herbst: 160 }, summerSpend: 18, overnightSpend: 40, wage: 30, snowCannonRun: 60, warmWinterChance: 0.5, // warme Winter sind die neue Normalität … warmWinterGrow: 0.06, // … und werden jedes Jahr häufiger meltExtra: 1.2, // Schnee schmilzt schneller summerTrend: 0.07, // Sommernachfrage +7 %/Jahr bei gutem Angebot (Serfaus-Effekt) deadlineDay: 600, goalsTitle: 'Ziele bis Ende 2039', prebuilt: ['restaurant', 'lift', 'access'], startUnlocked: 'all', stageRow: 0, quests: QUESTS_KLIMA, goals: [ { id: 'summer', label: '200 Gäste an einem Sommertag', check: s => s.stats.maxSummerGuests >= 200 }, { id: 'money', label: '400.000 € auf dem Konto', check: s => s.money >= 400000 }, { id: 'sat', label: 'Zufriedenheit mind. 70 %', check: s => s.satisfaction >= 70 }, { id: 'nature', label: 'Naturwert mind. 65 %', check: s => s.nature >= 65 }, ], intro: { id: 'intro-klimawandel', icon: '🌡️', title: 'Die Schneegrenze steigt', text: 'Sommer 2035. Die Winter werden wärmer, Schnee ist keine ' + 'Selbstverständlichkeit mehr. Messdaten zeigen: In den Alpen ' + 'schmilzt der Schnee 5–9 Tage pro Jahrzehnt früher – seit 1970 ist ' + 'die Schneesaison rund einen Monat kürzer geworden.\n\n' + 'Dein Tal muss sich neu erfinden: Ganzjahrestourismus! Wer sein ' + 'Sommerangebot konsequent ausbaut, dessen Sommernachfrage wächst ' + 'Jahr für Jahr (wie in echten Vorbild-Orten). Beschneiung ' + 'überbrückt – aber sie kostet. Findest du die Balance?', }, }, }; // Meilensteine: schalten Gebäude Schritt für Schritt frei (nur Szene 1 – // in den anderen Szenen ist bereits alles freigeschaltet) export const MILESTONES = [ { id: 'm-lift', unlock: 'lift', when: s => s.buildings.some(b => b.type === 'restaurant') && s.day >= 13, icon: '🚡', title: 'Neu: Sessellift!', text: 'Dein Gasthaus spricht sich herum – die ersten Gäste sind da!\n\n' + 'Sie fragen schon: „Kommt man hier auch auf den Berg?"\n\n' + 'Du kannst jetzt einen Sessellift bauen. Er gehört an den Hang ' + '(weiter oben) – die Piste entsteht automatisch darüber.', }, { id: 'm-access', unlock: 'access', when: s => s.buildings.some(b => b.type === 'lift'), icon: '🚌', title: 'Neu: Bushaltestelle!', text: 'Der Lift läuft! Aber viele Gäste kommen gar nicht erst ins Tal – ' + 'es gibt zu wenige Anreisemöglichkeiten.\n\n' + 'Baue eine Bushaltestelle direkt an der Talstraße – dann bringt der ' + 'Bus bis zu 150 zusätzliche Gäste pro Tag.', }, { id: 'm-hotel', unlock: 'hotel', when: s => s.stats.maxGuests >= 90, icon: '🏨', title: 'Neu: Hotel!', text: 'Fast 100 Gäste an einem Tag! Viele würden gern länger bleiben – ' + 'Übernachtungsgäste geben deutlich mehr Geld aus als Tagesgäste.\n\n' + 'Du kannst jetzt ein Hotel im Tal bauen (60 Betten).', }, { id: 'm-staff', unlock: 'staffhouse', when: s => s.staffNeeded > s.staffAvailable, icon: '👷', title: 'Neu: Personalhaus!', text: 'Deine Betriebe finden nicht genug Mitarbeiter/innen – im Tal gibt ' + 'es zu wenig Wohnraum!\n\nOhne Personal laufen Lift und Hotel nur mit ' + 'halber Kraft. Ein Personalhaus schafft Wohnraum für 12 Beschäftigte.', }, { id: 'm-summer', unlock: ['badesee', 'sled'], when: s => s.stats.maxSummerGuests >= 70, icon: '☀️', title: 'Neu: Sommer-Attraktionen!', text: 'Immer mehr Gäste kommen auch im Sommer ins Tal – sie wollen mehr ' + 'erleben als nur wandern.\n\n' + 'Du kannst jetzt einen Badesee anlegen (nahe am Fluss!) und eine ' + 'Sommerrodelbahn an den Hang bauen. Beide machen das Tal unabhängiger ' + 'vom Schnee.', }, { id: 'm-expand', unlock: 'gondola', when: s => s.stats.maxGuests >= 140, apply: s => { s.stageRow = 0; }, icon: '🏔️', title: 'Die Hochlagen sind erschlossen!', text: 'Dein Tal brummt – die Gemeinde gibt die Hochlagen frei!\n\n' + 'Der Nebel über dem oberen Berg lichtet sich: Dort gibt es Almen zum ' + 'Bebauen (auch ein Berg-Gasthaus lohnt sich!) – und du kannst jetzt ' + 'eine Gondelbahn bis in die Hochlagen bauen: 300 Gäste pro Tag und ' + 'eine herrlich lange Abfahrt.', }, { id: 'm-snow', unlock: 'snow', when: s => s.season === 'Winter' && s.weather.warmWinter && s.buildings.some(b => b.type === 'lift'), icon: '❄️', title: 'Neu: Beschneiung!', text: 'Dieser Winter ist ungewöhnlich warm – es fällt kaum Schnee, und ' + 'ohne Schnee bleiben die Skigäste aus.\n\n' + 'Beschneiungsanlagen können helfen. Sie brauchen aber Wasser (nahe am ' + 'Fluss bauen!) und kosten im Betrieb 45 € pro Tag.', }, { id: 'm-summer2', unlock: ['bikepark', 'ropes', 'bikerental', 'platform', 'playground'], when: s => s.stats.maxSummerGuests >= 110, icon: '🚵', title: 'Neu: Der Sommer boomt!', text: 'Über 100 Sommergäste an einem Tag – dein Tal spricht sich als ' + 'Sommerziel herum!\n\nJetzt baubar: Bikepark (braucht eine Bahn in der ' + 'Nähe), Hochseilgarten, Fahrradverleih, Erlebnisspielplatz – und in den ' + 'Hochlagen eine Aussichtsplattform.\n\nEchte Vorbilder zeigen: Wer das ' + 'Sommerangebot konsequent ausbaut, verdoppelt seine Sommergäste in ' + 'zehn Jahren (Serfaus-Fiss-Ladis: +95 %).', }, { id: 'm-rescue', unlock: 'rescue', when: s => s.buildings.some(b => b.type === 'lift') && s.stats.maxGuests >= 120, icon: '⛑️', title: 'Neu: Rettungsstation!', text: 'Immer mehr Gäste sind auf den Pisten – und ab und zu verfährt sich ' + 'jemand weit abseits und stürzt.\n\nEine Rettungsstation mit ' + 'Notarzthubschrauber birgt Verunglückte automatisch. Sicherheit ist ' + 'auch ein Standortfaktor – und die Gäste danken es dir.', }, ]; // Berater: wiederkehrende Hinweise (Toast) bei erkennbaren Problemen – // beantworten „warum läuft es schlecht?", mit Cooldown in Spieltagen export const ADVISOR = [ { id: 'a-loss', cooldown: 25, when: s => s.lossStreak >= 5, text: '💸 Du machst seit Tagen Verlust: Instandhaltung & Löhne laufen weiter, auch wenn kaum Gäste da sind. Details: 📋 Tagesbericht.', }, { id: 'a-reserve', cooldown: 45, when: s => s.money >= 0 && s.money < 4000 && s.buildings.length >= 2, text: '💰 Kaum Rücklagen! Halte etwa 5.000 € zurück – für einmalige Chancen (Skirennen, Sommerfest) und schlechte Tage.', }, { id: 'a-debt', cooldown: 20, when: s => s.money < -5000, text: '🏦 Hohe Schulden! Reiß ungenutzte Gebäude ab (30 % zurück) – ab 15.000 € Schulden verkauft die Bank von selbst!', }, { id: 'a-snow', cooldown: 20, when: s => s.season === 'Winter' && s.snow < 12 && s.buildings.some(b => b.type === 'lift' || b.type === 'gondola') && !s.buildings.some(b => b.type === 'snow'), text: '❄️ Wenig Schnee = wenig Skigäste! Eine Beschneiungsanlage hilft (braucht Fluss und Kälte).', }, { id: 'a-access', cooldown: 25, when: s => s.bottleneckStreak >= 3 && s.bottleneck === 'Anreise (Bus)', text: '🚌 Mehr Gäste wollten kommen, als anreisen können – Bushaltestelle bauen oder ausbauen ⬆️!', }, { id: 'a-cap', cooldown: 25, when: s => s.bottleneckStreak >= 3 && (s.bottleneck === 'Liftplätze' || s.bottleneck === 'Wege & Attraktionen'), text: '🚡 Dein Angebot ist voll ausgelastet – eine weitere Bahn/Attraktion oder ein Ausbau ⬆️ schafft Platz.', }, { id: 'a-staff', cooldown: 25, when: s => s.bottleneck === 'Personal fehlt' && s.bottleneckStreak >= 3, text: '👷 Personalmangel bremst alle Betriebe – ein Personalhaus schafft Wohnraum für 12 Angestellte.', }, ]; // Erklär-Karte beim ERSTEN Bau jedes Gebäudetyps: was bringt es, was // kostet es, worauf achten? (Lernprogramm: jede Wirkung wird vorgestellt) export const BUILD_INFO = { restaurant: { icon: '🍽️', title: 'Dein Gasthaus ist eröffnet!', text: 'Gäste kehren jetzt ein (Symbol 🍽️ überm Kopf) und geben dabei ' + 'mehr Geld aus – schau auf die grünen 🥨 +12 €. Außerdem steigt die ' + 'Zufriedenheit.\n\nLaufende Kosten: 45 €/Tag + 3 Angestellte.\n\n' + '📍 LAGE ZÄHLT: Steht das Gasthaus im Einflusskreis (3 Felder) von ' + 'Lift, Badesee, Rodelbahn oder Hotel, kehren deren Gäste gleich mit ' + 'ein (+2 €/Gast je Nachbarschaft). Der Kreis wird beim Bauen angezeigt. ' + 'Und: Jede Figur im Tal steht für etwa 10 echte Gäste.', }, lift: { icon: '🚡', title: 'Der Sessellift läuft!', text: 'Im Winter bringt er bis zu 200 Skigäste auf die Piste – den ' + 'Skipass-Preis bestimmst du links mit dem Regler. Im Sommer kaufen ' + 'Wanderer Bergfahrten (🎫 8 €).\n\nKosten: 120 €/Tag Instandhaltung ' + '+ 4 Angestellte. Ohne Schnee (links: ❄️-Anzeige) bleiben Skigäste aus!\n\n' + '📍 LAGE ZÄHLT: Weiter OBEN gebaut ist der Lift schneesicherer ' + '(längere Skisaison), weiter UNTEN konsumieren die Gäste mehr ' + '(+2 €/Gast). Zwei Bahnen nahe beieinander bilden einen Skiverbund ' + 'und locken zusätzliche Gäste an.', }, gondola: { icon: '🚠', title: 'Die Gondelbahn schwebt!', text: 'Bis zu 300 Gäste pro Tag und eine herrlich lange Abfahrt aus den ' + 'Hochlagen.\n\nKosten: 220 €/Tag + 5 Angestellte – die teuerste, ' + 'aber stärkste Bahn im Tal.\n\n📍 LAGE ZÄHLT: Auch hier gilt – hoch ' + 'gebaut = schneesicher, tief gebaut = konsumfreundlich; nahe Bahnen ' + 'bilden einen Skiverbund.', }, access: { icon: '🚌', title: 'Der Bus hält jetzt im Tal!', text: 'Bis zu 150 zusätzliche Gäste können pro Tag anreisen – beobachte, ' + 'wie Gruppen an der Haltestelle aussteigen.\n\nWenn unter der ' + 'Gäste-Zahl „Engpass: Anreise" steht, lohnt sich ein Ausbau ⬆️.', }, hotel: { icon: '🏨', title: 'Das Hotel empfängt Gäste!', text: '60 Betten: Die Hälfte deiner Tagesgäste würde gern übernachten – ' + 'jede Übernachtung bringt 30 € extra.\n\nKosten: 90 €/Tag + 5 ' + 'Angestellte. Denk an Personal-Wohnraum!', }, staffhouse: { icon: '🏠', title: 'Wohnraum für dein Personal!', text: '12 Angestellte finden hier ein Zuhause. Betriebe ohne Personal ' + 'laufen nur mit halber Kraft – die Personal-Zeile links zeigt, ob ' + 'alle Stellen besetzt sind.\n\n🤝 SOZIALE VERANTWORTUNG: Baust du das ' + 'Personalhaus später aus, wohnt dein Personal besser – zufriedene ' + 'Mitarbeiter:innen sind freundlicher, und das merken die Gäste.\n\n' + '📍 LAGE ZÄHLT: Baue es nahe bei den Betrieben (max. 4 Felder, Kreis ' + 'beim Bauen) – liegt es weiter weg, wirkt es nur zu zwei Dritteln.', }, snow: { icon: '❄️', title: 'Die Beschneiung steht bereit!', text: 'Sobald es kälter als 2 °C ist und Schnee fehlt, springt sie an ' + '(+2,5 cm/Tag) – Betrieb kostet dann 45 €/Tag.\n\nIst es zu warm, ' + 'kann auch sie nicht schneien (Wettervorhersage links!).', }, badesee: { icon: '🏖️', title: 'Der Badesee glitzert!', text: 'Bis zu 100 Sommergäste planschen hier (🏖️ überm Kopf) und zahlen ' + 'Eintritt (🎫 +5 €). Dazu steigt die Zufriedenheit.\n\nIm Winter ' + 'ruht der Betrieb – die Kosten (60 €/Tag) laufen weiter.', }, sled: { icon: '🛷', title: 'Die Sommerrodelbahn saust!', text: 'Bis zu 140 Sommergäste, ganz ohne Schnee (🛷 überm Kopf, 🎫 +7 €). ' + 'Mit Ausbau ⬆️ wird die Bahn länger und schafft +50 %.\n\n' + 'Kosten: 70 €/Tag + 2 Angestellte.', }, trail: { icon: '🥾', title: 'Der Panoramaweg ist markiert!', text: 'Bis zu 120 Sommergäste wandern hier – völlig schneeunabhängig. ' + 'Genau das braucht das Tal, wenn die Winter wärmer werden.\n\n' + 'Kosten: 40 €/Tag + 1 Angestellte/r.', }, bikepark: { icon: '🚵', title: 'Der Bikepark ist eröffnet!', text: 'Die Flowtrails schlängeln sich den Hang hinunter – bis zu 160 ' + 'Sommergäste (🚵 überm Kopf, 🎫 +9 €).\n\nKosten: 80 €/Tag + 2 ' + 'Angestellte. Die Trails kosten Naturwert – Aufforstung gleicht aus.\n\n' + '📍 LAGE ZÄHLT: Die Bahn daneben bringt die Bikes hinauf – genau so ' + 'nutzen echte Skigebiete (Saalbach, Serfaus) ihre Lifte im Sommer. ' + 'Ein Fahrradverleih im Umkreis bringt +25 % Gäste.', }, ropes: { icon: '🧗', title: 'Der Hochseilgarten ist gespannt!', text: 'Klettern, Balancieren, Ziplines – 90 Sommergäste (🎫 +8 €), und die ' + 'Bäume bleiben stehen: kaum Naturverbrauch.\n\n' + 'Kosten: 45 €/Tag + 2 Angestellte. Familien lieben ihn – die ' + 'Zufriedenheit steigt.', }, bikerental: { icon: '🚲', title: 'Der Fahrradverleih hat geöffnet!', text: 'Räder und E-Bikes für alle, die keins mitbringen.\n\n' + '📍 LAGE ZÄHLT: Bikepark und Panoramaweg im Umkreis (4 Felder) ' + 'bekommen +25 % Gäste – der Verleih ist ein Verstärker, keine eigene ' + 'Attraktion.\n\nKosten: 25 €/Tag + 1 Angestellte/r.', }, platform: { icon: '🌉', title: 'Die Aussichtsplattform schwebt!', text: 'Der Skywalk zieht bis zu 130 Ausflugsgäste an – sie kommen NUR ' + 'für die Aussicht und fahren mit der Bahn hinauf (🎫 +6 €).\n\n' + 'Das ist Ausflugstourismus: Die Jungfraubahn (Schweiz) macht so nur ' + 'noch ~20 % ihres Umsatzes mit Wintersport – der Rest ist ' + 'Ganzjahres-Ausflugsgeschäft.\n\nKosten: 30 €/Tag + 1 Angestellte/r.', }, playground: { icon: '🎠', title: 'Der Erlebnisspielplatz tobt!', text: 'Wasserspiele, Kletterburg, Riesenrutsche – 80 Sommergäste und ein ' + 'großes Plus bei der Zufriedenheit.\n\nFamilien sind DER ' + 'Sommer-Wachstumsmotor: Serfaus-Fiss-Ladis wurde mit Familienangeboten ' + 'zur Vorzeige-Sommerdestination.\n\nKosten: 35 €/Tag + 2 Angestellte.', }, rescue: { icon: '⛑️', title: 'Die Rettungsstation ist einsatzbereit!', text: 'Fährt ein Ski-Gast weit abseits und stürzt, startet automatisch der ' + 'Notarzthubschrauber, birgt ihn und fliegt zurück zur Station.\n\n' + 'Kosten: 50 €/Tag + 2 Angestellte. Gäste fühlen sich sicherer ' + '(mehr Zufriedenheit).', }, }; // Kurz-Hinweise: dezente Toasts ohne Pause – erzählen, was gerade // passiert (Gäste kommen, konsumieren, es entsteht Bedarf …) export const HINTS = [ { id: 'h-guests', scenes: ['pionierzeit'], when: s => s.buildings.length > 0 && s.guestsToday >= 8, text: '🥾 Die ersten Wanderer sind da – schau, wie sie durchs Tal spazieren!', }, { id: 'h-konsum', scenes: ['pionierzeit'], when: s => s.guestsToday >= 18, text: '💶 Es klingelt in der Kasse: Die Gäste kehren ein und geben Geld aus.', }, { id: 'h-bus', scenes: ['pionierzeit'], when: s => s.day >= 8 && s.buildings.length > 0, text: '🚌 Mancher Gast käme gern – aber ohne Bus ist die Anreise mühsam …', }, { id: 'h-berg', scenes: ['pionierzeit'], when: s => s.day >= 11 && s.buildings.some(b => b.type === 'restaurant'), text: '⛰️ Immer öfter fragen Gäste: „Kommt man hier auch auf den Berg?"', }, ]; // Entscheidungs-Karten: Situationen mit echter A/B-Wahl (Urteils- und // Handlungskompetenz!). Erscheinen einmalig, wenn die Bedingung erfüllt ist. export const DECISIONS = [ { id: 'd-race', icon: '🏁', title: 'Skirennen im Tal?', when: s => s.season === 'Winter' && s.snow > 20 && s.day > 100 && s.buildings.some(b => b.type === 'lift'), text: 'Der Skiverband fragt an: Ein Landesrennen würde das Tal weit über ' + 'die Region hinaus bekannt machen – kostet aber 5.000 € für ' + 'Absperrungen, Helfer und Preisgeld.', yes: { label: 'Ausrichten (5.000 €)', can: s => s.money >= 5000, apply: s => { s.money -= 5000; s.awareness = Math.min(1, s.awareness + 0.15); s.satisfaction = Math.min(100, s.satisfaction + 8); s.race = { until: s.day + 5 }; // sichtbares Rennen auf der Piste! }, toast: '🏁 Renntag! Schau auf die Piste – das Tal ist in aller Munde!', }, no: { label: 'Ablehnen', apply: () => {}, toast: 'Der Verband fragt woanders an.' }, }, { id: 'd-fest', icon: '🎪', title: 'Sommerfest im Dorf?', when: s => s.season === 'Sommer' && s.day > 40, text: 'Das Dorf möchte ein großes Sommerfest mit Musik und Handwerksmarkt ' + 'ausrichten und bittet dich um 3.000 € Unterstützung.', yes: { label: 'Unterstützen (3.000 €)', can: s => s.money >= 3000, apply: s => { s.money -= 3000; s.awareness = Math.min(1, s.awareness + 0.1); s.satisfaction = Math.min(100, s.satisfaction + 6); s.fest = { until: s.day + 5 }; // Marktstände & Wimpel im Dorf! }, toast: '🎪 Das Fest ist im Gange – schau ins Dorf!', }, no: { label: 'Diesmal nicht', apply: s => { s.satisfaction = Math.max(10, s.satisfaction - 3); }, toast: 'Das Dorf ist etwas enttäuscht.', }, }, { id: 'd-forest', icon: '🌱', title: 'Aufforstungs-Projekt?', when: s => s.nature < 65, text: 'Die Bürgerinitiative schlägt vor, gemeinsam Bäume zu pflanzen und ' + 'Almwiesen zu pflegen. Deine Beteiligung: 4.000 €.', yes: { label: 'Mitmachen (4.000 €)', can: s => s.money >= 4000, apply: s => { s.money -= 4000; s.nature = Math.min(100, s.nature + 12); }, toast: '🌱 Das Tal wird sichtbar grüner – und die Gäste danken es.', }, no: { label: 'Ablehnen', apply: s => { s.satisfaction = Math.max(10, s.satisfaction - 5); }, toast: 'Die Initiative ist verärgert.', }, }, { id: 'd-tourbus', icon: '🚍', title: 'Reisegruppe mit Rabatt?', when: s => s.buildings.some(b => b.type === 'access') && s.day > 70, text: 'Ein Reiseveranstalter bietet an, regelmäßig Busgruppen zu schicken – ' + 'aber nur mit 30 % Gruppenrabatt. Viele Gäste, weniger Geld pro Kopf, ' + 'und es wird voller.', yes: { label: 'Annehmen', apply: s => { s.money += 2500; s.awareness = Math.min(1, s.awareness + 0.06); s.satisfaction = Math.max(10, s.satisfaction - 5); }, toast: '🚍 Die Gruppen kommen – es klingelt in der Kasse, aber es wird eng.', }, no: { label: 'Ablehnen', apply: () => {}, toast: 'Du setzt weiter auf Individualgäste.' }, }, ]; // Event-Karten: erscheinen einmalig, sobald ihre Bedingung erfüllt ist. // Optional per `scenes` auf einzelne Szenarien beschränkt. export const EVENTS = [ { id: 'first-winter', icon: '⛄', title: 'Der erste Winter naht', scenes: ['pionierzeit'], when: s => s.season === 'Winter', text: 'Es wird kalt im Tal! Im Winter kommen Skigäste – aber nur, wenn es ' + 'einen Lift und genug Schnee gibt.\n\n' + 'Behalte die Schnee-Anzeige links im Blick.', }, { id: 'overtourism', icon: '🚗', title: 'Es wird eng im Tal', scenes: ['boom'], when: s => s.guestsToday > 500, text: 'Über 500 Gäste an einem Tag! Die Straße ist verstopft, die ' + 'Einheimischen finden keinen Parkplatz mehr.\n\n' + 'Mehr ist nicht immer besser: Achte auf Zufriedenheit und Naturwert – ' + 'sonst kommt der Boom ins Kippen.', }, { id: 'no-snow-winter', icon: '🌧️', title: 'Grüner Winter', scenes: ['klimawandel'], when: s => s.season === 'Winter' && s.snow < 10 && s.day > 70, text: 'Mitten im Winter: Regen statt Schnee. So sieht die neue Realität ' + 'aus – und die Skigäste bleiben aus.\n\n' + 'Beschneiung hilft kurzfristig. Langfristig braucht das Tal Angebote, ' + 'die keinen Schnee brauchen.', }, { id: 'sommerloch', icon: '📊', title: 'Das Sommerloch', scenes: ['boom', 'klimawandel'], when: s => s.season === 'Sommer' && s.day > 25 && !s.buildings.some(b => (BUILDINGS[b.type].summerCap || 0) > 0), text: 'Dein Tal lebt fast nur vom Winter – im Sommer bleiben die Betten ' + 'leer. Fachleute nennen das „Sommerloch".\n\n' + 'Echte Zahlen: Lech am Arlberg hat 84 % seiner Übernachtungen im ' + 'Winter und nur 16 % im Sommer. Ganz Österreich zeigt, dass es anders ' + 'geht – dort hat der Sommer den Winter bei den Übernachtungen sogar ' + 'überholt (83 zu 72 Millionen, 2025).\n\n' + 'Badesee, Sommerrodelbahn und Panoramaweg füllen das Loch.', }, { id: 'ganzjahres-daten', icon: '📈', title: 'Was sagen die Daten?', scenes: ['klimawandel'], when: s => s.buildings.filter(b => (BUILDINGS[b.type].summerCap || 0) > 0).length >= 2, text: 'Dein Tal wird zur Ganzjahresdestination – wie echte Vorbilder: ' + 'Serfaus-Fiss-Ladis hat seine Sommer-Übernachtungen in 10 Jahren fast ' + 'verdoppelt, am Wilden Kaiser kommen Sommer und Winter gleich viele ' + 'Gäste.\n\nAber Achtung: Ein Sommergast gibt nur rund 80 % dessen aus, ' + 'was ein Wintergast ausgibt (156 vs. 193 € pro Tag). Und eine Bergbahn ' + 'braucht 1,3 bis 4,2 Sommergäste, um EINEN fehlenden Wintergast zu ' + 'ersetzen.\n\nGleich viele Gäste heißt also nicht gleich viel Geld – ' + 'plane entsprechend!', }, { id: 'low-money', icon: '💸', title: 'Die Kasse ist fast leer', when: s => s.money < 3000, text: 'Achtung: Gebäude kosten auch im Betrieb Geld (Instandhaltung, Löhne). ' + 'Warte, bis Einnahmen hereinkommen, bevor du weiter baust.\n\n' + 'Tipp: Mit dem Abriss-Werkzeug bekommst du 30 % der Baukosten zurück.', }, { id: 'nature-low', icon: '🌲', title: 'Bürgerinitiative besorgt', when: s => s.nature < 45, text: 'Eine Bürgerinitiative protestiert: Zu viel Verbauung schadet Natur ' + 'und Landschaftsbild – und genau deshalb kommen viele Gäste!\n\n' + 'Sinkt der Naturwert weiter, bleiben Gäste aus.', }, { id: 'too-expensive', icon: '🎟️', title: 'Zu teuer!', when: s => s.price >= 38 && s.satisfaction < 55, text: 'Die Gäste beschweren sich über den Skipass-Preis. Ein hoher Preis ' + 'bringt mehr Geld pro Gast – aber weniger Gäste kommen, und die ' + 'Zufriedenheit sinkt.\n\nDas ist Angebot und Nachfrage!', }, { id: 'broke', icon: '🏦', title: 'Das Konto ist überzogen!', when: s => s.money < -1000, text: 'Die Gemeinde streckt dir das Geld vor, aber so kann es nicht ' + 'weitergehen. Reiß ungenutzte Gebäude ab (30 % zurück) oder senke die ' + 'laufenden Kosten, bis wieder Einnahmen kommen.', }, ]; // --------------------------------------------------------------------------- // Lehrplan-Wissen je Gebäude: kurze, verdaubare Bausteine, verankert im // GW-Lehrplan 2023 (Standortfaktoren, Angebot/Nachfrage, Wertschöpfung, // Nachhaltigkeit, Klimaanpassung). Erscheinen im Gebäude-Klick-Dialog. export const KNOWLEDGE = { restaurant: [ { term: 'Wertschöpfung', text: 'Jeder Gast, der einkehrt, lässt Geld im Tal. Diese vor Ort erwirtschafteten Einnahmen nennt man Wertschöpfung.' }, { term: 'Standortfaktor Lage', text: 'Steht das Gasthaus nah bei Lift, Hotel oder Attraktion, kehren deren Gäste gleich mit ein – gute Lage bringt mehr Umsatz.' }, ], lift: [ { term: 'Standortfaktor Höhenlage', text: 'Weiter oben ist es kälter, der Schnee bleibt länger – die Skisaison wird länger. Höhe ist ein Standortfaktor.' }, { term: 'Kapazität', text: 'Ein Lift befördert nur begrenzt viele Gäste pro Tag. Ist er voll, kommen trotz Nachfrage nicht mehr hinauf.' }, { term: 'Sommergeschäft der Bergbahnen', text: 'Real machen Seilbahnen nur 15–25 % ihres Umsatzes im Sommer. Fällt ein Wintergast aus, braucht die Bahn 1,3 bis 4,2 Sommergäste als Ersatz (Seilbahnen Schweiz).' }, ], gondola: [ { term: 'Infrastruktur', text: 'Bahnen sind touristische Infrastruktur – die Grundausstattung, die eine Tourismusregion erst möglich macht.' }, { term: 'Standortfaktor Höhenlage', text: 'Die Gondel erschließt die Hochlagen: mehr Kapazität und schneesicherer als tief gelegene Lifte.' }, ], hotel: [ { term: 'Übernachtungstourismus', text: 'Übernachtungsgäste bringen mehr Wertschöpfung als Tagesgäste – sie bleiben länger, essen und kaufen im Ort ein.' }, { term: 'Tagesausgaben', text: 'Ein Wintergast gibt in Österreich im Schnitt 193 € pro Tag aus, ein Sommergast 156 € – also nur rund 80 %. Gleich viele Gäste heißt darum nicht gleich viel Einnahmen!' }, { term: 'Saisonalität & Auslastung', text: 'Betten kosten auch leer Geld (Personal, Heizung, Kredit). Je gleichmäßiger sich Sommer und Winter füllen, desto wirtschaftlicher arbeitet ein Hotel.' }, ], access: [ { term: 'Erreichbarkeit', text: 'Erreichbarkeit ist ein zentraler Standortfaktor. Ohne gute Anreise kommen viele Gäste gar nicht erst an.' }, { term: 'Nachhaltige Mobilität', text: 'Anreise mit dem Bus statt mit vielen Autos entlastet Straßen und Umwelt – ein Beitrag zu nachhaltigem Tourismus.' }, ], staffhouse: [ { term: 'Saisonarbeit & Wohnraum', text: 'Tourismus braucht viele Arbeitskräfte, oft in Saisonarbeit. Ohne leistbaren Wohnraum finden die Betriebe kein Personal.' }, { term: 'Soziale Verantwortung', text: 'Real wohnen Saisonkräfte oft in engen, schlechten Unterkünften. Wer in gute Personalhäuser investiert, bekommt zufriedenes Personal – und das spüren die Gäste: freundlicher Service, bessere Bewertungen. Ein Win-win.' }, ], snow: [ { term: 'Klimawandel-Anpassung', text: 'Beschneiung sichert die Saison, wenn die Winter wärmer werden – braucht aber viel Wasser und Energie.' }, { term: 'Schneesaison wird kürzer', text: 'Messdaten: In den Alpen schmilzt der Schnee 5–9 Tage pro Jahrzehnt früher; seit 1970 ist die Schneesaison rund einen Monat kürzer (GeoSphere Austria, SLF Schweiz). Unterhalb von ca. 2.000 m trifft es Skigebiete am härtesten.' }, { term: 'Zielkonflikt Nachhaltigkeit', text: 'Kunstschnee kostet Ressourcen. Nachhaltiger Tourismus fragt: Wie lange lohnt sich das noch?' }, ], badesee: [ { term: 'Diversifizierung', text: 'Sommerangebote machen das Tal unabhängiger vom Schnee – mehrere Standbeine nennt man Diversifizierung. Echte Vorbilder: Am Wilden Kaiser (Tirol) kommen heute etwa gleich viele Gäste im Sommer wie im Winter.' }, { term: 'Sommerloch', text: 'In Skiorten heißt die gästearme Zeit „Sommerloch". Lech am Arlberg z. B. hat 84 % seiner Übernachtungen im Winter – nur 16 % im Sommer (Statistik Austria).' }, ], sled: [ { term: 'Ganzjahrestourismus', text: 'Attraktionen ohne Schnee verlängern die Saison. Serfaus-Fiss-Ladis hat seine Sommer-Übernachtungen in 10 Jahren fast verdoppelt (+95 %) – mit Familienangeboten wie Rodelbahnen und Erlebniswegen.' }, ], trail: [ { term: 'Sanfter Tourismus', text: 'Wandern greift wenig in die Natur ein und braucht keinen Schnee – zukunftsfähig, wenn das Klima wärmer wird.' }, { term: 'Nächtigung', text: 'Übernachtungen („Nächtigungen") sind die Maßeinheit der Tourismusstatistik. In ganz Österreich hat der Sommer den Winter dabei schon überholt: 83 zu 72 Millionen (2025).' }, ], rescue: [ { term: 'Naturgefahren', text: 'Im Gebirge drohen Lawinen, Abstürze und Wetterstürze. Tourismusregionen brauchen Rettungsdienste, um Gäste zu schützen.' }, { term: 'Standortfaktor Sicherheit', text: 'Ein gutes Rettungswesen macht eine Region attraktiver – Sicherheit ist ein weicher Standortfaktor.' }, ], bikepark: [ { term: 'Sommernutzung von Winter-Infrastruktur', text: 'Bikeparks nutzen die Lifte im Sommer weiter – so verdienen die teuren Bahnen ganzjährig. Real machen Seilbahnen 15–25 % ihres Umsatzes im Sommer, Tendenz steigend.' }, { term: 'Zielkonflikt', text: 'Trails bedeuten Eingriff in den Hang: Wer den Sommer ausbaut, muss den Naturwert im Blick behalten – wie beim Winterausbau auch.' }, ], ropes: [ { term: 'Sanfter Tourismus', text: 'Ein Hochseilgarten nutzt den Wald, ohne ihn zu roden – Wertschöpfung mit kleinem Fußabdruck.' }, ], bikerental: [ { term: 'Wertschöpfungskette', text: 'Verleih, Bahn, Trail, Einkehr: Ein Gast gibt an vielen Stationen Geld aus. Je mehr Glieder die Kette hat, desto mehr bleibt im Tal.' }, { term: 'Komplementärangebot', text: 'Der Verleih verkauft kein eigenes Erlebnis – er macht andere Angebote zugänglicher. Solche Ergänzungen heißen Komplementärangebote.' }, ], platform: [ { term: 'Ausflugstourismus', text: 'Ausflugsgäste bleiben nur Stunden, kommen aber ganzjährig und wetterunabhängiger. Die Jungfraubahn (CH) lebt zu ~80 % vom Ausflugs- statt vom Wintersportgeschäft.' }, { term: 'Inszenierung der Landschaft', text: 'Plattformen, Hängebrücken, Skywalks machen Aussicht zum Produkt – die Landschaft selbst wird zur Attraktion.' }, ], playground: [ { term: 'Zielgruppe Familien', text: 'Familien sind der Wachstumsmotor des Sommertourismus: Serfaus-Fiss-Ladis hat mit Familienangeboten seine Sommernächtigungen in 10 Jahren fast verdoppelt (+95 %).' }, ], forest: [ { term: 'Renaturierung', text: 'Aufforstung und Almpflege geben der Natur Fläche zurück. Viele Tourismusregionen investieren gezielt – die Landschaft IST ihr Kapital.' }, { term: 'Schutzwald', text: 'Bergwald schützt Täler vor Lawinen und Muren. In Österreich ist rund ein Drittel des Waldes Schutzwald.' }, ], };