🔧 Jan 8 Fix EnhancedPrologueScene Syntax Error
❌ BUG FIX: - Line 131: Comment and code on same line - Wrong indentation in flyoverVoice.once callback - Caused: SyntaxError: Unexpected token '}' ✅ SOLUTION: - Separated comment to own line - Fixed indentation (4 spaces) - Node syntax check passes ✅ Game now loads without errors!
This commit is contained in:
@@ -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');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user