diff --git a/src/scenes/EnhancedPrologueScene.js b/src/scenes/EnhancedPrologueScene.js index fca9e7cc8..dbc598f4f 100644 --- a/src/scenes/EnhancedPrologueScene.js +++ b/src/scenes/EnhancedPrologueScene.js @@ -128,227 +128,228 @@ class EnhancedPrologueScene extends Phaser.Scene { this.showSubtitle("The Valley of Death is not just a place. It's a memory that no one wants to have anymore."); }); - // After flyover, go to awakening flyoverVoice.once('complete', () => { - this.time.delayedCall(1000, () => this.phase3_Awakening()); - }); -} + // After flyover, go to awakening + flyoverVoice.once('complete', () => { + this.time.delayedCall(1000, () => this.phase3_Awakening()); + }); + } -phase3_Awakening() { - console.log('🎬 Phase 3: Kai Awakens'); + phase3_Awakening() { + console.log('🎬 Phase 3: Kai Awakens'); - // PHASE 3: Awakening (1:00 - 1:30) - this.clearSubtitle(); + // PHASE 3: Awakening (1:00 - 1:30) + this.clearSubtitle(); - // Fade in cellar background (blurred) - const cellar = this.add.image(this.cameras.main.width / 2, this.cameras.main.height / 2, 'intro_cellar'); - cellar.setAlpha(0); - this.backgroundLayer.add(cellar); + // Fade in cellar background (blurred) + const cellar = this.add.image(this.cameras.main.width / 2, this.cameras.main.height / 2, 'intro_cellar'); + cellar.setAlpha(0); + this.backgroundLayer.add(cellar); - // Blur overlay - const blur = this.add.image(this.cameras.main.width / 2, this.cameras.main.height / 2, 'intro_blur'); - blur.setAlpha(0); - this.backgroundLayer.add(blur); + // Blur overlay + const blur = this.add.image(this.cameras.main.width / 2, this.cameras.main.height / 2, 'intro_blur'); + blur.setAlpha(0); + this.backgroundLayer.add(blur); - // Fade out black, fade in cellar + blur - this.tweens.add({ - targets: this.blackScreen, - alpha: 0, - duration: 2000 - }); - - this.tweens.add({ - targets: [cellar, blur], - alpha: 1, - duration: 3000, - ease: 'Sine.easeIn' - }); - - // Play awakening voice - this.time.delayedCall(2000, () => { - const awakeningVoice = this.sound.add('voice_awakening'); - awakeningVoice.play(); - - this.showSubtitle("My head... it hurts. Where am I? Who am I...?"); - - // Clear blur gradually (vision clearing) - this.time.delayedCall(3000, () => { - this.tweens.add({ - targets: blur, - alpha: 0, - duration: 4000, - ease: 'Sine.easeOut' - }); + // Fade out black, fade in cellar + blur + this.tweens.add({ + targets: this.blackScreen, + alpha: 0, + duration: 2000 }); - awakeningVoice.once('complete', () => { - this.time.delayedCall(1500, () => this.phase4_IDCard()); + this.tweens.add({ + targets: [cellar, blur], + alpha: 1, + duration: 3000, + ease: 'Sine.easeIn' }); - }); -} -phase4_IDCard() { - console.log('🎬 Phase 4: ID Card Discovery'); + // Play awakening voice + this.time.delayedCall(2000, () => { + const awakeningVoice = this.sound.add('voice_awakening'); + awakeningVoice.play(); - // PHASE 4: ID Card (1:30 - 2:30) - this.clearSubtitle(); + this.showSubtitle("My head... it hurts. Where am I? Who am I...?"); - // Show ID card (zoom in effect) - const idCard = this.add.image(this.cameras.main.width / 2, this.cameras.main.height / 2, 'intro_id_card'); - idCard.setScale(0.5); - idCard.setAlpha(0); - this.backgroundLayer.add(idCard); - - this.tweens.add({ - targets: idCard, - alpha: 1, - scale: 1, - duration: 2000, - ease: 'Cubic.easeOut' - }); - - // Play truth voice - this.time.delayedCall(1500, () => { - const truthVoice = this.sound.add('voice_truth'); - truthVoice.play(); - - this.showSubtitle("Kai Marković. 14 years old. That's me. But this other girl... why do I feel so empty?"); - - // Show twin photo (cross-fade) - this.time.delayedCall(8000, () => { - this.showSubtitle("Like I'm missing half of my heart."); - - // Cross-fade to twin photo - const twinPhoto = this.add.image( - this.cameras.main.width / 2, - this.cameras.main.height / 2, - 'intro_twin_photo' - ); - twinPhoto.setAlpha(0); - twinPhoto.setScale(1.2); - this.backgroundLayer.add(twinPhoto); - - // Fade out ID, fade in photo - this.tweens.add({ - targets: idCard, - alpha: 0, - duration: 2000 + // Clear blur gradually (vision clearing) + this.time.delayedCall(3000, () => { + this.tweens.add({ + targets: blur, + alpha: 0, + duration: 4000, + ease: 'Sine.easeOut' + }); }); - this.tweens.add({ - targets: twinPhoto, - alpha: 1, - scale: 1, - duration: 3000, - ease: 'Sine.easeInOut' + awakeningVoice.once('complete', () => { + this.time.delayedCall(1500, () => this.phase4_IDCard()); }); }); + } - truthVoice.once('complete', () => { - this.time.delayedCall(1000, () => this.phase5_Determination()); + phase4_IDCard() { + console.log('🎬 Phase 4: ID Card Discovery'); + + // PHASE 4: ID Card (1:30 - 2:30) + this.clearSubtitle(); + + // Show ID card (zoom in effect) + const idCard = this.add.image(this.cameras.main.width / 2, this.cameras.main.height / 2, 'intro_id_card'); + idCard.setScale(0.5); + idCard.setAlpha(0); + this.backgroundLayer.add(idCard); + + this.tweens.add({ + targets: idCard, + alpha: 1, + scale: 1, + duration: 2000, + ease: 'Cubic.easeOut' }); - }); -} - -phase5_Determination() { - console.log('🎬 Phase 5: Determination + Quest'); - - // PHASE 5: Determination (2:30 - 3:00) - this.clearSubtitle(); - - const determinationVoice = this.sound.add('voice_determination'); - determinationVoice.play(); - - this.showSubtitle("Someone is waiting for me out there. I can't remember the face, but I feel the promise."); - - this.time.delayedCall(5000, () => { - this.showSubtitle("I'm coming to find you... Ana."); - - // Quest trigger flash - this.cameras.main.flash(1000, 100, 50, 50); - }); - - determinationVoice.once('complete', () => { - // Show quest notification - this.showQuestNotification(); - - // Fade to game after 3s - this.time.delayedCall(3000, () => this.endIntro()); - }); -} - -showQuestNotification() { - const { width, height } = this.cameras.main; - - // Quest panel - const questPanel = this.add.rectangle(width / 2, height / 2, 600, 200, 0x1a1a1a, 0.95); - questPanel.setStrokeStyle(4, 0xffaa00); - - const questTitle = this.add.text(width / 2, height / 2 - 40, '📜 NEW QUEST', { - fontSize: '32px', - fontFamily: 'Georgia, serif', - color: '#ffaa00', - fontStyle: 'bold' - }); - questTitle.setOrigin(0.5); - - const questText = this.add.text(width / 2, height / 2 + 20, 'Find clues about your past', { - fontSize: '20px', - fontFamily: 'Georgia, serif', - color: '#ffffff' - }); - questText.setOrigin(0.5); - - this.uiLayer.add([questPanel, questTitle, questText]); - - // Pulse animation - this.tweens.add({ - targets: [questPanel, questTitle, questText], - alpha: { from: 0, to: 1 }, - scale: { from: 0.8, to: 1 }, - duration: 800, - ease: 'Back.easeOut' - }); -} - -showSubtitle(text) { - this.subtitleText.setText(text); - this.tweens.add({ - targets: this.subtitleText, - alpha: 1, - duration: 500 - }); -} - -clearSubtitle() { - this.tweens.add({ - targets: this.subtitleText, - alpha: 0, - duration: 500, - onComplete: () => this.subtitleText.setText('') - }); -} - -skipIntro() { - console.log('⏭️ Skipping intro...'); - this.endIntro(); -} - -endIntro() { - console.log('🎬 Intro complete! Launching GameScene...'); - - // Fade out music - this.tweens.add({ - targets: this.noirMusic, - volume: 0, - duration: 2000, - onComplete: () => this.noirMusic.stop() - }); - - // Fade to black - this.cameras.main.fadeOut(2000, 0, 0, 0); - - this.cameras.main.once('camerafadeoutcomplete', () => { - this.scene.start('GameScene'); - }); -} + + // Play truth voice + this.time.delayedCall(1500, () => { + const truthVoice = this.sound.add('voice_truth'); + truthVoice.play(); + + this.showSubtitle("Kai Marković. 14 years old. That's me. But this other girl... why do I feel so empty?"); + + // Show twin photo (cross-fade) + this.time.delayedCall(8000, () => { + this.showSubtitle("Like I'm missing half of my heart."); + + // Cross-fade to twin photo + const twinPhoto = this.add.image( + this.cameras.main.width / 2, + this.cameras.main.height / 2, + 'intro_twin_photo' + ); + twinPhoto.setAlpha(0); + twinPhoto.setScale(1.2); + this.backgroundLayer.add(twinPhoto); + + // Fade out ID, fade in photo + this.tweens.add({ + targets: idCard, + alpha: 0, + duration: 2000 + }); + + this.tweens.add({ + targets: twinPhoto, + alpha: 1, + scale: 1, + duration: 3000, + ease: 'Sine.easeInOut' + }); + }); + + truthVoice.once('complete', () => { + this.time.delayedCall(1000, () => this.phase5_Determination()); + }); + }); + } + + phase5_Determination() { + console.log('🎬 Phase 5: Determination + Quest'); + + // PHASE 5: Determination (2:30 - 3:00) + this.clearSubtitle(); + + const determinationVoice = this.sound.add('voice_determination'); + determinationVoice.play(); + + this.showSubtitle("Someone is waiting for me out there. I can't remember the face, but I feel the promise."); + + this.time.delayedCall(5000, () => { + this.showSubtitle("I'm coming to find you... Ana."); + + // Quest trigger flash + this.cameras.main.flash(1000, 100, 50, 50); + }); + + determinationVoice.once('complete', () => { + // Show quest notification + this.showQuestNotification(); + + // Fade to game after 3s + this.time.delayedCall(3000, () => this.endIntro()); + }); + } + + showQuestNotification() { + const { width, height } = this.cameras.main; + + // Quest panel + const questPanel = this.add.rectangle(width / 2, height / 2, 600, 200, 0x1a1a1a, 0.95); + questPanel.setStrokeStyle(4, 0xffaa00); + + const questTitle = this.add.text(width / 2, height / 2 - 40, '📜 NEW QUEST', { + fontSize: '32px', + fontFamily: 'Georgia, serif', + color: '#ffaa00', + fontStyle: 'bold' + }); + questTitle.setOrigin(0.5); + + const questText = this.add.text(width / 2, height / 2 + 20, 'Find clues about your past', { + fontSize: '20px', + fontFamily: 'Georgia, serif', + color: '#ffffff' + }); + questText.setOrigin(0.5); + + this.uiLayer.add([questPanel, questTitle, questText]); + + // Pulse animation + this.tweens.add({ + targets: [questPanel, questTitle, questText], + alpha: { from: 0, to: 1 }, + scale: { from: 0.8, to: 1 }, + duration: 800, + ease: 'Back.easeOut' + }); + } + + showSubtitle(text) { + this.subtitleText.setText(text); + this.tweens.add({ + targets: this.subtitleText, + alpha: 1, + duration: 500 + }); + } + + clearSubtitle() { + this.tweens.add({ + targets: this.subtitleText, + alpha: 0, + duration: 500, + onComplete: () => this.subtitleText.setText('') + }); + } + + skipIntro() { + console.log('⏭️ Skipping intro...'); + this.endIntro(); + } + + endIntro() { + console.log('🎬 Intro complete! Launching GameScene...'); + + // Fade out music + this.tweens.add({ + targets: this.noirMusic, + volume: 0, + duration: 2000, + onComplete: () => this.noirMusic.stop() + }); + + // Fade to black + this.cameras.main.fadeOut(2000, 0, 0, 0); + + this.cameras.main.once('camerafadeoutcomplete', () => { + this.scene.start('GameScene'); + }); + } }