diff --git a/App/sims/tourismustal/assets/audio-info/b1.mp3 b/App/sims/tourismustal/assets/audio-info/b1.mp3 new file mode 100644 index 0000000..d730445 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/b1.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/b2.mp3 b/App/sims/tourismustal/assets/audio-info/b2.mp3 new file mode 100644 index 0000000..462fd4b Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/b2.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/b3.mp3 b/App/sims/tourismustal/assets/audio-info/b3.mp3 new file mode 100644 index 0000000..ae51cc4 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/b3.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/b4.mp3 b/App/sims/tourismustal/assets/audio-info/b4.mp3 new file mode 100644 index 0000000..0f13800 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/b4.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-access.mp3 b/App/sims/tourismustal/assets/audio-info/bi-access.mp3 new file mode 100644 index 0000000..521cbac Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-access.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-badesee.mp3 b/App/sims/tourismustal/assets/audio-info/bi-badesee.mp3 new file mode 100644 index 0000000..0105e57 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-badesee.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-bikepark.mp3 b/App/sims/tourismustal/assets/audio-info/bi-bikepark.mp3 new file mode 100644 index 0000000..e18680c Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-bikepark.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-bikerental.mp3 b/App/sims/tourismustal/assets/audio-info/bi-bikerental.mp3 new file mode 100644 index 0000000..e621ee4 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-bikerental.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-gondola.mp3 b/App/sims/tourismustal/assets/audio-info/bi-gondola.mp3 new file mode 100644 index 0000000..d9df76f Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-gondola.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-hotel.mp3 b/App/sims/tourismustal/assets/audio-info/bi-hotel.mp3 new file mode 100644 index 0000000..5374c1e Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-hotel.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-lift.mp3 b/App/sims/tourismustal/assets/audio-info/bi-lift.mp3 new file mode 100644 index 0000000..cf16ec7 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-lift.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-platform.mp3 b/App/sims/tourismustal/assets/audio-info/bi-platform.mp3 new file mode 100644 index 0000000..f1e6364 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-platform.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-playground.mp3 b/App/sims/tourismustal/assets/audio-info/bi-playground.mp3 new file mode 100644 index 0000000..6b668d1 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-playground.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-rescue.mp3 b/App/sims/tourismustal/assets/audio-info/bi-rescue.mp3 new file mode 100644 index 0000000..ee5a4cc Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-rescue.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-restaurant.mp3 b/App/sims/tourismustal/assets/audio-info/bi-restaurant.mp3 new file mode 100644 index 0000000..487ee49 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-restaurant.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-ropes.mp3 b/App/sims/tourismustal/assets/audio-info/bi-ropes.mp3 new file mode 100644 index 0000000..cb1e108 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-ropes.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-sled.mp3 b/App/sims/tourismustal/assets/audio-info/bi-sled.mp3 new file mode 100644 index 0000000..e94bfb0 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-sled.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-snow.mp3 b/App/sims/tourismustal/assets/audio-info/bi-snow.mp3 new file mode 100644 index 0000000..4e5d3b2 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-snow.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-staffhouse.mp3 b/App/sims/tourismustal/assets/audio-info/bi-staffhouse.mp3 new file mode 100644 index 0000000..07a78c3 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-staffhouse.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/bi-trail.mp3 b/App/sims/tourismustal/assets/audio-info/bi-trail.mp3 new file mode 100644 index 0000000..6e22d74 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/bi-trail.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/broke.mp3 b/App/sims/tourismustal/assets/audio-info/broke.mp3 new file mode 100644 index 0000000..2db489c Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/broke.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/first-winter.mp3 b/App/sims/tourismustal/assets/audio-info/first-winter.mp3 new file mode 100644 index 0000000..6803d9f Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/first-winter.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/ganzjahres-daten.mp3 b/App/sims/tourismustal/assets/audio-info/ganzjahres-daten.mp3 new file mode 100644 index 0000000..0241865 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/ganzjahres-daten.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/intro-boom.mp3 b/App/sims/tourismustal/assets/audio-info/intro-boom.mp3 new file mode 100644 index 0000000..c6380a3 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/intro-boom.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/intro-klimawandel.mp3 b/App/sims/tourismustal/assets/audio-info/intro-klimawandel.mp3 new file mode 100644 index 0000000..64029d3 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/intro-klimawandel.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/intro-pionierzeit.mp3 b/App/sims/tourismustal/assets/audio-info/intro-pionierzeit.mp3 new file mode 100644 index 0000000..b9c0c10 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/intro-pionierzeit.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/k1.mp3 b/App/sims/tourismustal/assets/audio-info/k1.mp3 new file mode 100644 index 0000000..65ea7f0 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/k1.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/k2.mp3 b/App/sims/tourismustal/assets/audio-info/k2.mp3 new file mode 100644 index 0000000..331c474 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/k2.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/k3.mp3 b/App/sims/tourismustal/assets/audio-info/k3.mp3 new file mode 100644 index 0000000..855d0f5 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/k3.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/k4.mp3 b/App/sims/tourismustal/assets/audio-info/k4.mp3 new file mode 100644 index 0000000..765cb7a Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/k4.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/low-money.mp3 b/App/sims/tourismustal/assets/audio-info/low-money.mp3 new file mode 100644 index 0000000..6e08f97 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/low-money.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-access.mp3 b/App/sims/tourismustal/assets/audio-info/m-access.mp3 new file mode 100644 index 0000000..76bf4b1 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-access.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-expand.mp3 b/App/sims/tourismustal/assets/audio-info/m-expand.mp3 new file mode 100644 index 0000000..4f7f0c5 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-expand.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-hotel.mp3 b/App/sims/tourismustal/assets/audio-info/m-hotel.mp3 new file mode 100644 index 0000000..084fadd Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-hotel.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-lift.mp3 b/App/sims/tourismustal/assets/audio-info/m-lift.mp3 new file mode 100644 index 0000000..85df600 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-lift.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-rescue.mp3 b/App/sims/tourismustal/assets/audio-info/m-rescue.mp3 new file mode 100644 index 0000000..421d384 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-rescue.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-snow.mp3 b/App/sims/tourismustal/assets/audio-info/m-snow.mp3 new file mode 100644 index 0000000..33e762c Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-snow.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-staff.mp3 b/App/sims/tourismustal/assets/audio-info/m-staff.mp3 new file mode 100644 index 0000000..8efee8a Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-staff.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-summer.mp3 b/App/sims/tourismustal/assets/audio-info/m-summer.mp3 new file mode 100644 index 0000000..2f4f88f Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-summer.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/m-summer2.mp3 b/App/sims/tourismustal/assets/audio-info/m-summer2.mp3 new file mode 100644 index 0000000..5e212fa Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/m-summer2.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/mega.mp3 b/App/sims/tourismustal/assets/audio-info/mega.mp3 new file mode 100644 index 0000000..c440a13 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/mega.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/nature-low.mp3 b/App/sims/tourismustal/assets/audio-info/nature-low.mp3 new file mode 100644 index 0000000..fb7dfd3 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/nature-low.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/no-snow-winter.mp3 b/App/sims/tourismustal/assets/audio-info/no-snow-winter.mp3 new file mode 100644 index 0000000..a2a4e3c Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/no-snow-winter.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/overtourism.mp3 b/App/sims/tourismustal/assets/audio-info/overtourism.mp3 new file mode 100644 index 0000000..9855c07 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/overtourism.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/q1.mp3 b/App/sims/tourismustal/assets/audio-info/q1.mp3 new file mode 100644 index 0000000..7060b17 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/q1.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/q2.mp3 b/App/sims/tourismustal/assets/audio-info/q2.mp3 new file mode 100644 index 0000000..d51ca16 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/q2.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/q3.mp3 b/App/sims/tourismustal/assets/audio-info/q3.mp3 new file mode 100644 index 0000000..20cc303 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/q3.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/q4.mp3 b/App/sims/tourismustal/assets/audio-info/q4.mp3 new file mode 100644 index 0000000..47c73d3 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/q4.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/q5.mp3 b/App/sims/tourismustal/assets/audio-info/q5.mp3 new file mode 100644 index 0000000..5b27693 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/q5.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/q6.mp3 b/App/sims/tourismustal/assets/audio-info/q6.mp3 new file mode 100644 index 0000000..6012b23 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/q6.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/sommerloch.mp3 b/App/sims/tourismustal/assets/audio-info/sommerloch.mp3 new file mode 100644 index 0000000..2467eb6 Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/sommerloch.mp3 differ diff --git a/App/sims/tourismustal/assets/audio-info/too-expensive.mp3 b/App/sims/tourismustal/assets/audio-info/too-expensive.mp3 new file mode 100644 index 0000000..2edc00e Binary files /dev/null and b/App/sims/tourismustal/assets/audio-info/too-expensive.mp3 differ diff --git a/App/sims/tourismustal/js/data.js b/App/sims/tourismustal/js/data.js index c4ad69b..6dfe0ec 100644 --- a/App/sims/tourismustal/js/data.js +++ b/App/sims/tourismustal/js/data.js @@ -143,7 +143,7 @@ export const SCENARIOS = { { id: 'nature', label: 'Naturwert mind. 55 %', check: s => s.nature >= 55 }, ], intro: { - id: 'intro', icon: '👋', title: 'Willkommen im Tal!', + 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 ' @@ -179,7 +179,7 @@ export const SCENARIOS = { { id: 'nature', label: 'Naturwert mind. 60 %', check: s => s.nature >= 60 }, ], intro: { - id: 'intro', icon: '📈', title: 'Der Boom ist da!', + 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 ' @@ -218,7 +218,7 @@ export const SCENARIOS = { { id: 'nature', label: 'Naturwert mind. 65 %', check: s => s.nature >= 65 }, ], intro: { - id: 'intro', icon: '🌡️', title: 'Die Schneegrenze steigt', + 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 ' diff --git a/App/sims/tourismustal/js/main.js b/App/sims/tourismustal/js/main.js index 455e93e..8384d7e 100644 --- a/App/sims/tourismustal/js/main.js +++ b/App/sims/tourismustal/js/main.js @@ -141,7 +141,7 @@ function onTileTap(c, r) { const first = !state.firedEvents.has('mega-info'); state.firedEvents.add('mega-info'); ui.showCard({ - id: `mega-${res.merged.c}-${res.merged.r}`, icon: '🏛️', sound: 'milestone', + id: `mega-${res.merged.c}-${res.merged.r}`, audio: 'mega', icon: '🏛️', sound: 'milestone', title: `Megabauwerk: ${res.merged.name}!`, text: `Vier gleiche Gebäude im Quadrat sind zu EINEM großen ${res.merged.name} verschmolzen.` + '\n\nDas ist ein Skaleneffekt: Das Megabauwerk leistet so viel wie ' diff --git a/App/sims/tourismustal/js/ui.js b/App/sims/tourismustal/js/ui.js index e1d7503..92c0c5e 100644 --- a/App/sims/tourismustal/js/ui.js +++ b/App/sims/tourismustal/js/ui.js @@ -146,7 +146,7 @@ export class UI { this.infoMode = this.infoMode === 'audio' ? 'read' : 'audio'; localStorage.setItem('tt_infomode', this.infoMode); this._syncInfoModeBtn(e.currentTarget); - this._speak(null); + this._stopVoice(); this.toast(this.infoMode === 'audio' ? '🔊 Audio-Modus: Meldungen werden vorgelesen, das Spiel läuft weiter. Entscheidungen pausieren weiterhin.' : '📖 Lese-Modus: Meldungen öffnen sich als Karte, das Spiel pausiert.', 5000); @@ -486,12 +486,31 @@ export class UI { el.classList.remove('hidden'); el.onclick = () => { el.classList.add('hidden'); - this._speak(null); // Vorlesen stoppen + this._stopVoice(); this.showCard({ ...card, transient: true, forceModal: true }); }; clearTimeout(this._bannerTimer); this._bannerTimer = setTimeout(() => el.classList.add('hidden'), 9000); - this._speak(`${card.title}. ${card.text}`); + this._speakCard(card); + } + + // Vorproduzierte Sprach-Audios (assets/audio-info/.mp3, OpenAI-TTS). + // Browser-TTS nur als Not-Fallback, falls eine Datei fehlt. + _stopVoice() { + if (this._voice) { this._voice.pause(); this._voice = null; } + if ('speechSynthesis' in window) speechSynthesis.cancel(); + } + + _speakCard(card) { + this._stopVoice(); + const id = card.audio || card.id; + if (!id) { this._speak(`${card.title}. ${card.text}`); return; } + const a = new Audio(`assets/audio-info/${id}.mp3`); + a.volume = 0.95; + this._voice = a; + const fallback = () => { if (this._voice === a) this._speak(`${card.title}. ${card.text}`); }; + a.onerror = fallback; + a.play().catch(fallback); } // Sprachausgabe (Browser-TTS, deutsche Stimme). null = stoppen. @@ -686,7 +705,7 @@ export class UI { // ---------- Onboarding ---------- showOnboarding() { this.showCard({ - icon: '🏔️', transient: true, + icon: '🏔️', transient: true, forceModal: true, title: 'Willkommen! (1/3) – So spielst du', text: 'Rechts ein Gebäude wählen, dann auf die Karte tippen – fertig. ' + 'Nach dem Bau legst du das Werkzeug automatisch ab.\n\n' @@ -696,7 +715,7 @@ export class UI { + 'Schritt für Schritt frei.', }); this.showCard({ - icon: '🚶', transient: true, + icon: '🚶', transient: true, forceModal: true, title: 'Die Gäste (2/3) – dein Kreislauf', text: 'Jede Figur steht für etwa 10 Gäste. Sie kommen mit dem Bus, ' + 'wandern, kehren ein und reisen wieder ab.\n\n' @@ -707,7 +726,7 @@ export class UI { + 'Wer konsumiert, bringt Geld – wer nicht kommen kann, keins.', }); this.showCard({ - icon: '🔍', transient: true, + icon: '🔍', transient: true, forceModal: true, title: 'Durchblick (3/3) – warum läuft es (nicht)?', text: 'Links stehen deine Kennzahlen. Kommen weniger Gäste als möglich, ' + 'erscheint dort der GRUND (z.B. „Engpass: Anreise").\n\n'