🎬🔥 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:
2026-01-10 15:00:28 +01:00
parent 4b6d67ed89
commit ebd3e9cee6

View File

@@ -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;