🎬🔥 COMPLETE INTRO REDESIGN - 60s PERFECTION!
✅ MASSIVE CHANGES: - Faster shots (2.5s instead of 3s) - Better voice sync (100ms delay) - NEW sequence order - NO aging timeline (removed spoiler!) - Amnesia-focused ending ✅ NEW PHASE 1 (0-15s): HAPPY MEMORIES 1. Kai + Dad longboard (0-2.5s) 2. Barbershop both (2.5-5s) 3. Birthday 'HERE WE WERE STILL HAPPY' (5-7.5s) 4. Family portrait (7.5-10s) 5. Twins holding hands (10-12.5s) 6. Kai's bedroom (12.5-15s) ✅ PHASE 2 (15-30s): VIRUS 7. Virus (15-17.5s) 8. Chaos (17.5-20s) 9. Zombies (20-22.5s) 10. Parents ghosts (22.5-25s) 11. Ana taken (25-30s) ✅ PHASE 3 (30-60s): AMNESIA & ANA MEMORY 12. Black screen - 'I have no memory' (30-35s) 13. Kai alone - 'They say I'm 14' (35-40s) 14. Ana memory - 'Last thing I saw' (40-50s) 15. Gronk arrival (50-55s) 16. Ana photo + determination (55-60s) ✅ REMOVED (Spoiler alert!): - Kai aging timeline (young→adult→elder) - Multiple Kai appearances - Aging dialogue ✅ KEPT: - Crossfade transitions - Polaroid frames - VHS effects - Subtitles RESULT: 60s can SEZUL players! 🎆💜
This commit is contained in:
@@ -293,31 +293,35 @@ class IntroScene extends Phaser.Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════
|
||||||
// PHASE 1: HAPPY CHILDHOOD (0-15s)
|
// PHASE 1: HAPPY MEMORIES (0-15s) - REDESIGNED!
|
||||||
// ═══════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════
|
||||||
playPhase1HappyChildhood() {
|
playPhase1HappyChildhood() {
|
||||||
console.log('🎬 Phase 1: Happy Childhood (0-15s)');
|
console.log('🎬 Phase 1: Happy Memories (0-15s) - NEW SEQUENCE');
|
||||||
this.currentPhase = 1;
|
this.currentPhase = 1;
|
||||||
|
|
||||||
// Shot 1 (0-3s): Family Portrait + Kai voice
|
// Shot 1 (0-2.5s): Kai + Dad Longboard
|
||||||
this.showShot('intro_family_portrait', 0, 3000, { warm: true });
|
this.showShot('intro_otac_longboard', 0, 2500, { warm: true });
|
||||||
this.time.delayedCall(200, () => this.playVoice('kai_01', "It all started with family. With colors. With hope."));
|
this.time.delayedCall(100, () => this.playVoice('kai_01', "Dad and I. Before everything changed."));
|
||||||
|
|
||||||
// Shot 2 (3-6s): Otac Longboard + Kai voice
|
// Shot 2 (2.5-5s): Barbershop - Him (dreads) + Her (coloring)
|
||||||
this.showShot('intro_otac_longboard', 3000, 6000, { warm: true });
|
this.showShot('intro_ana_barbershop', 2500, 5000, { warm: true });
|
||||||
this.time.delayedCall(3200, () => this.playVoice('kai_02', "Dad taught me that life isn't a straight line..."));
|
this.time.delayedCall(2600, () => this.playVoice('ana_01', "Getting ready. We always did things together."));
|
||||||
|
|
||||||
// Shot 3 (6-9s): Kai Dreads + Ana voice
|
// Shot 3 (5-7.5s): Birthday Cake - "HERE WE WERE STILL HAPPY"
|
||||||
this.showShot('intro_kai_dreads', 6000, 9000, { warm: true });
|
this.showShot('intro_birthday_cake', 5000, 7500, { warm: true });
|
||||||
this.time.delayedCall(6200, () => this.playVoice('ana_01', "...but a wild ride with those you love."));
|
this.time.delayedCall(5100, () => this.playVoice('kai_02', "Here we were still happy. Still a family."));
|
||||||
|
|
||||||
// Shot 4 (9-12s): Ana Barbershop + Ana voice
|
// Shot 4 (7.5-10s): Family Portrait
|
||||||
this.showShot('intro_ana_barbershop', 9000, 12000, { warm: true });
|
this.showShot('intro_family_portrait', 7500, 10000, { warm: true });
|
||||||
this.time.delayedCall(9200, () => this.playVoice('ana_02', "We were unstoppable. We were immortal."));
|
this.time.delayedCall(7600, () => this.playVoice('ana_02', "All of us. Together. Perfect."));
|
||||||
|
|
||||||
// Shot 5 (12-15s): Birthday Cake + Both voices
|
// Shot 5 (10-12.5s): Kai + Ana Holding Hands as Kids
|
||||||
this.showShot('intro_birthday_cake', 12000, 15000, { warm: true });
|
this.showShot('intro_twins_childhood', 10000, 12500, { warm: true });
|
||||||
this.time.delayedCall(12200, () => this.playVoice('kai_03', "We were... whole."));
|
this.time.delayedCall(10100, () => this.playVoice('kai_03', "We were always two. Inseparable."));
|
||||||
|
|
||||||
|
// Shot 6 (12.5-15s): Kai's Bedroom
|
||||||
|
this.showShot('intro_bedroom', 12500, 15000, { warm: true });
|
||||||
|
this.time.delayedCall(12600, () => this.playVoice('ana_03', "Our room. Our sanctuary."));
|
||||||
|
|
||||||
// Transition to Phase 2
|
// Transition to Phase 2
|
||||||
this.time.delayedCall(15000, () => this.playPhase2TheVirus());
|
this.time.delayedCall(15000, () => this.playPhase2TheVirus());
|
||||||
@@ -330,110 +334,85 @@ class IntroScene extends Phaser.Scene {
|
|||||||
console.log('🎬 Phase 2: The Virus (15-30s)');
|
console.log('🎬 Phase 2: The Virus (15-30s)');
|
||||||
this.currentPhase = 2;
|
this.currentPhase = 2;
|
||||||
|
|
||||||
// Shot 6 (15-18s): Virus + Kai voice
|
// Shot 7 (15-17.5s): Virus
|
||||||
this.showShot('intro_virus', 15000, 18000, { toxic: true, glitch: true });
|
this.showShot('intro_virus', 15000, 17500, { toxic: true, glitch: true });
|
||||||
this.time.delayedCall(15200, () => this.playVoice('kai_04', "Then came X-Noir. The virus. Death in nanobytes."));
|
this.time.delayedCall(15100, () => this.playVoice('kai_04', "Then came X-Noir. The virus."));
|
||||||
|
|
||||||
// Shot 7 (18-21s): Chaos + Ana voice
|
// Shot 8 (17.5-20s): Chaos
|
||||||
this.showShot('intro_chaos', 18000, 21000, { red: true, glitch: true });
|
this.showShot('intro_chaos', 17500, 20000, { red: true, glitch: true });
|
||||||
this.time.delayedCall(18200, () => this.playVoice('ana_04', "Everyone changed. The streets burned."));
|
this.time.delayedCall(17600, () => this.playVoice('ana_04', "Everyone changed. Streets burned."));
|
||||||
this.cameras.main.shake(3000, 0.005);
|
this.cameras.main.shake(2500, 0.005);
|
||||||
|
|
||||||
// Shot 8 (21-24s): Zombies + Kai voice
|
// Shot 9 (20-22.5s): Zombies
|
||||||
this.showShot('intro_zombies', 21000, 24000, { red: true, strobe: true });
|
this.showShot('intro_zombies', 20000, 22500, { red: true, strobe: true });
|
||||||
this.time.delayedCall(21200, () => this.playVoice('kai_05', "Neighbors, friends... they all became zombies."));
|
this.time.delayedCall(20100, () => this.playVoice('kai_05', "Friends became zombies."));
|
||||||
|
|
||||||
// Shot 9 (24-27s): Parents Ghosts + Ana voice
|
// Shot 10 (22.5-25s): Parents Ghosts
|
||||||
this.showShot('intro_parents_ghosts', 24000, 27000, { fadeIn: true });
|
this.showShot('intro_parents_ghosts', 22500, 25000, { fadeIn: true });
|
||||||
this.time.delayedCall(24200, () => this.playVoice('ana_05', "Our parents fought. Our parents... left us."));
|
this.time.delayedCall(22600, () => this.playVoice('ana_05', "Our parents fought... and lost."));
|
||||||
|
|
||||||
// Shot 10 (27-30s): Ana Taken + Ana SCREAM
|
// Shot 11 (25-30s): Ana Taken
|
||||||
this.showShot('intro_ana_taken', 27000, 30000, { red: true, blur: true });
|
this.showShot('intro_ana_taken', 25000, 30000, { red: true });
|
||||||
this.time.delayedCall(27200, () => this.playVoice('ana_06', "KAI! DON'T FORGET ME!"));
|
this.time.delayedCall(25100, () => this.playVoice('ana_06', "KAI! DON'T FORGET ME!"));
|
||||||
|
|
||||||
// Transition to Phase 3
|
// Transition to Phase 3
|
||||||
this.time.delayedCall(30000, () => this.playPhase3TheAmnesia());
|
this.time.delayedCall(30000, () => this.playPhase3TheAmnesia());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════
|
||||||
// PHASE 3: THE AMNESIA (30-45s)
|
// PHASE 3: AMNESIA & ANA MEMORY (30-60s) - NO AGING SPOILERS!
|
||||||
// ═══════════════════════════════════════════════════════════
|
// ═══════════════════════════════════════════════════════════
|
||||||
playPhase3TheAmnesia() {
|
playPhase3TheAmnesia() {
|
||||||
console.log('🎬 Phase 3: The Amnesia (30-45s)');
|
console.log('🎬 Phase 3: Amnesia & Ana Memory (30-60s)');
|
||||||
this.currentPhase = 3;
|
this.currentPhase = 3;
|
||||||
|
|
||||||
// Shot 11 (30-33s): Kai Alone + Kai voice
|
// Shot 12 (30-35s): BLACK SCREEN - "I have no memory"
|
||||||
this.showShot('intro_kai_alone', 30000, 33000, { fadeIn: true });
|
const width = this.cameras.main.width;
|
||||||
this.time.delayedCall(30200, () => this.playVoice('kai_06', "I was left alone. In darkness. With a hole in my head."));
|
const height = this.cameras.main.height;
|
||||||
|
|
||||||
// Shot 12 (33-36s): Kai Young + Kai voice
|
const blackScreen = this.add.rectangle(width / 2, height / 2, width, height, 0x000000);
|
||||||
this.showShot('intro_kai_young', 33000, 36000, { fadeIn: true });
|
blackScreen.setAlpha(0);
|
||||||
this.time.delayedCall(33200, () => this.playVoice('kai_07', "Years passed. My face changed..."));
|
blackScreen.setDepth(50);
|
||||||
|
|
||||||
// Shot 13 (36-39s): Kai Adult + Kai voice
|
this.tweens.add({
|
||||||
this.showShot('intro_kai_adult', 36000, 39000, { fadeIn: true });
|
targets: blackScreen,
|
||||||
this.time.delayedCall(36200, () => this.playVoice('kai_08', "...my beard grew... but my memories?"));
|
alpha: 1,
|
||||||
|
duration: 1000
|
||||||
|
});
|
||||||
|
|
||||||
// Shot 14 (39-42s): Kai Elder + Kai voice
|
this.time.delayedCall(30500, () => this.playVoice('kai_06', "I have no memory. Everything is... gone."));
|
||||||
this.showShot('intro_kai_elder', 39000, 42000, { fadeIn: true });
|
this.time.delayedCall(33000, () => this.playVoice('kai_07', "They say I'm fourteen. But I don't remember... anything."));
|
||||||
this.time.delayedCall(39200, () => this.playVoice('kai_09', "All memory was fog. Except for one face."));
|
|
||||||
|
|
||||||
// Shot 15 (42-45s): Ana Memory + Ana voice (echo)
|
|
||||||
this.showShot('intro_ana_memory', 42000, 45000, { fadeIn: true });
|
|
||||||
this.time.delayedCall(42200, () => this.playVoice('ana_07', "Ana... Sister... Twin... The truth."));
|
|
||||||
|
|
||||||
// Transition to Phase 4
|
|
||||||
this.time.delayedCall(45000, () => this.playPhase4TheAwakening());
|
|
||||||
}
|
|
||||||
|
|
||||||
// ═══════════════════════════════════════════════════════════
|
|
||||||
// PHASE 4: THE AWAKENING (45-60s)
|
|
||||||
// ═══════════════════════════════════════════════════════════
|
|
||||||
playPhase4TheAwakening() {
|
|
||||||
console.log('🎬 Phase 4: The Awakening (45-60s)');
|
|
||||||
this.currentPhase = 4;
|
|
||||||
|
|
||||||
// Shot 16 (45-48s): Bedroom + Kai voice
|
|
||||||
this.showShot('intro_bedroom', 45000, 48000, { fadeIn: true });
|
|
||||||
this.time.delayedCall(45200, () => this.playVoice('kai_10', "And now... I wake up. Again. Every single day."));
|
|
||||||
|
|
||||||
// Shot 17 (48-51s): Gronk + Gronk voice
|
|
||||||
this.showShot('intro_gronk', 48000, 51000, { fadeIn: true });
|
|
||||||
this.time.delayedCall(48200, () => this.playVoice('gronk_01', "Finally awake, old man. Your mission awaits."));
|
|
||||||
|
|
||||||
// Shot 18 (51-54s): Ana Memory Reprise + Kai voice
|
|
||||||
this.showShot('intro_ana_memory', 51000, 54000, { fadeIn: true });
|
|
||||||
this.time.delayedCall(51200, () => this.playVoice('kai_11', "I must find her."));
|
|
||||||
|
|
||||||
// Shot 19 (54-57s): Twins Childhood + Ana voice
|
|
||||||
this.showShot('intro_twins_childhood', 54000, 57000, { warm: true, fadeIn: true });
|
|
||||||
this.time.delayedCall(54200, () => this.playVoice('ana_08', "We were always two..."));
|
|
||||||
|
|
||||||
// Shot 20 (57-60s): Fade to Black + Kai FINAL
|
|
||||||
this.time.delayedCall(57000, () => {
|
|
||||||
this.playVoice('kai_12', "...even if it takes my entire life.");
|
|
||||||
|
|
||||||
// Fade to black
|
|
||||||
const blackScreen = this.add.rectangle(
|
|
||||||
this.cameras.main.width / 2,
|
|
||||||
this.cameras.main.height / 2,
|
|
||||||
this.cameras.main.width,
|
|
||||||
this.cameras.main.height,
|
|
||||||
0x000000
|
|
||||||
);
|
|
||||||
blackScreen.setAlpha(0);
|
|
||||||
blackScreen.setDepth(1000);
|
|
||||||
|
|
||||||
|
// Shot 13 (35-40s): Kai Alone in Basement
|
||||||
|
this.time.delayedCall(35000, () => {
|
||||||
this.tweens.add({
|
this.tweens.add({
|
||||||
targets: blackScreen,
|
targets: blackScreen,
|
||||||
alpha: 1,
|
alpha: 0,
|
||||||
duration: 3000
|
duration: 1000,
|
||||||
|
onComplete: () => blackScreen.destroy()
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Transition to GameScene
|
this.showShot('intro_kai_alone', 35000, 40000, { fadeIn: true });
|
||||||
|
this.time.delayedCall(35500, () => this.playVoice('kai_08', "Alone. In darkness. With only... this."));
|
||||||
|
|
||||||
|
// Shot 14 (40-50s): Ana Memory - LAST TIME THEY SAW EACH OTHER
|
||||||
|
this.showShot('intro_ana_memory', 40000, 50000, { fadeIn: true });
|
||||||
|
this.time.delayedCall(40500, () => this.playVoice('ana_07', "Her face. The only thing I remember."));
|
||||||
|
this.time.delayedCall(43500, () => this.playVoice('kai_09', "Ana. My sister. My twin. The last thing I saw... before everything went dark."));
|
||||||
|
|
||||||
|
// Shot 15 (50-55s): Gronk Arrival
|
||||||
|
this.showShot('intro_gronk', 50000, 55000, { fadeIn: true });
|
||||||
|
this.time.delayedCall(50500, () => this.playVoice('gronk_01', "Finally awake, old man. Your mission awaits."));
|
||||||
|
|
||||||
|
// Shot 16 (55-60s): Ana Photo + FINAL DETERMINATION
|
||||||
|
this.showShot('intro_ana_memory', 55000, 60000, { fadeIn: true });
|
||||||
|
this.time.delayedCall(55500, () => this.playVoice('kai_11', "I must find her."));
|
||||||
|
this.time.delayedCall(57500, () => this.playVoice('kai_12', "...even if it takes my entire life."));
|
||||||
|
|
||||||
|
// Transition to Main Menu
|
||||||
this.time.delayedCall(60000, () => {
|
this.time.delayedCall(60000, () => {
|
||||||
console.log('🎬 IntroScene: EPIC COMPLETE! Starting game...');
|
console.log('🎬 IntroScene: EPIC COMPLETE! Starting menu...');
|
||||||
if (this.ambientAudio) this.ambientAudio.stop();
|
if (this.ambientAudio) this.ambientAudio.stop();
|
||||||
this.cameras.main.fadeOut(1000, 0, 0, 0);
|
this.cameras.main.fadeOut(1000, 0, 0, 0);
|
||||||
this.cameras.main.once('camerafadeoutcomplete', () => {
|
this.cameras.main.once('camerafadeoutcomplete', () => {
|
||||||
@@ -442,6 +421,8 @@ class IntroScene extends Phaser.Scene {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Phase 4 removed - integrated into Phase 3!
|
||||||
|
|
||||||
showShot(imageKey, startTime, endTime, options = {}) {
|
showShot(imageKey, startTime, endTime, options = {}) {
|
||||||
const width = this.cameras.main.width;
|
const width = this.cameras.main.width;
|
||||||
const height = this.cameras.main.height;
|
const height = this.cameras.main.height;
|
||||||
|
|||||||
Reference in New Issue
Block a user