🔧 FIX: PrologueScene - Added Hardcoded Fallback Dialogue!

PROBLEM: prologue.json missing → PrologueScene crashed
SOLUTION: Added fallback hardcoded Slovenian dialogue

 NEW FEATURES:
- Fallback dialogue when JSON missing
- 6 intro scenes (Narrator + Kai)
- Story: Leto 2084, virus, Ana missing, Kai searching
- Background colors for atmosphere
- Character portraits (emoji for now)
- Shake effect on lab chaos scene

FLOW:
1. Menu → NEW GAME
2. PrologueScene starts 
3. Shows intro story (6 dialogues)
4. Press ENTER/CLICK to advance
5. ESC to skip → GameScene
6. After prologue → GameScene

Intro besedilo zdaj dela! 🎬
This commit is contained in:
2026-01-03 22:24:17 +01:00
parent 4c6ccac9b9
commit 108f8bfae1

View File

@@ -31,19 +31,12 @@ class PrologueScene extends Phaser.Scene {
} }
preload() { preload() {
this.load.json('prologue_data', 'assets/dialogue/prologue.json'); // Try to load JSON, but we'll use fallback if it doesn't exist
this.load.on('loaderror', (file) => {
// Dynamically load audio based on JSON content console.warn(`⚠️ Failed to load: ${file.key}`);
this.load.on('filecomplete-json-prologue_data', (key, type, data) => {
if (Array.isArray(data)) {
data.forEach(line => {
if (line.id) {
// Assuming .wav format as generated by our script
this.load.audio(line.id, `assets/audio/voiceover/prologue/${line.id}.wav`);
}
});
}
}); });
this.load.json('prologue_data', 'assets/dialogue/prologue.json');
} }
create() { create() {
@@ -58,12 +51,57 @@ class PrologueScene extends Phaser.Scene {
// Black background // Black background
this.add.rectangle(0, 0, width, height, 0x000000).setOrigin(0); this.add.rectangle(0, 0, width, height, 0x000000).setOrigin(0);
// Initialize dialogue data from JSON // Initialize dialogue data from JSON OR fallback
this.dialogueData = this.cache.json.get('prologue_data'); this.dialogueData = this.cache.json.get('prologue_data');
if (!this.dialogueData) { if (!this.dialogueData) {
console.error('❌ Failed to load prologue dialogue data!'); console.warn('⚠️ Using fallback hardcoded dialogue!');
this.dialogueData = []; // FALLBACK: Hardcoded Slovenian dialogue
this.dialogueData = [
{
speaker: "NARRATOR",
text: "Leto 2084. Svet je padel.",
background: "lab",
bgColor: 0x1a1a2e,
portrait: null
},
{
speaker: "NARRATOR",
text: "Zombi virus je uničil civilizacijo. Preživeli se borijo za vsak nov dan.",
background: "ruins",
bgColor: 0x2d1b00,
portrait: null
},
{
speaker: "KAI",
text: "Ime mi je Kai. Z sestro Ano sva raziskovala virus... potem se je vse spremenilo.",
background: "lab",
bgColor: 0x1a1a2e,
portrait: "kai_neutral"
},
{
speaker: "KAI",
text: "Zombiji so vdrli v laboratorij. Ana... Ana je izginila.",
background: "lab_chaos",
bgColor: 0x3d0000,
portrait: "kai_worried",
shake: true
},
{
speaker: "KAI",
text: "Moram jo najti. Karkoli se je zgodilo... ostajam njen brat.",
background: "farm",
bgColor: 0x2d4a1e,
portrait: "kai_determined"
},
{
speaker: "NARRATOR",
text: "In tako se začne Kaijevo potovanje skozi Mrtvo dolino...",
background: "farm",
bgColor: 0x2d4a1e,
portrait: null
}
];
} }
// Create UI elements // Create UI elements
@@ -226,7 +264,7 @@ class PrologueScene extends Phaser.Scene {
// Wait for audio to finish OR standard delay? // Wait for audio to finish OR standard delay?
// Ideally wait for audio duration, but fallback to delay // Ideally wait for audio duration, but fallback to delay
let delay = this.autoAdvanceDelay; let delay = this.autoAdvanceDelay;
if (this.currentVoice && this.currentVoice.duration) { if (this.currentVoice && this.currentVoice.duration) {
// Add a small buffer after speech ends // Add a small buffer after speech ends
delay = (this.currentVoice.duration * 1000) + 1000; delay = (this.currentVoice.duration * 1000) + 1000;
} }
@@ -249,8 +287,8 @@ class PrologueScene extends Phaser.Scene {
// Safety check for empty text // Safety check for empty text
if (!text) { if (!text) {
this.canAdvance = true; this.canAdvance = true;
return; return;
} }
const timer = this.time.addEvent({ const timer = this.time.addEvent({