Compare commits
2 Commits
d9f40d016d
...
0efadb9448
| Author | SHA1 | Date | |
|---|---|---|---|
| 0efadb9448 | |||
| 53c0530ce6 |
180
INTRO_60S_ENGLISH_SCRIPT.md
Normal file
180
INTRO_60S_ENGLISH_SCRIPT.md
Normal file
@@ -0,0 +1,180 @@
|
||||
# 🎬 60-SECOND EPIC INTRO - ENGLISH VERSION
|
||||
## "From Colors to Darkness" - Complete Script
|
||||
|
||||
**Duration:** 60 seconds
|
||||
**Language:** English
|
||||
**Voices:** Kai (US Male) + Ana (US Female) + Gronk (UK Deep)
|
||||
**Subtitles:** Bottom of screen, typewriter style
|
||||
|
||||
---
|
||||
|
||||
## 📝 COMPLETE ENGLISH DIALOGUE
|
||||
|
||||
### **PHASE 1: THE BEGINNING (0-15s) - HAPPY CHILDHOOD**
|
||||
|
||||
**Shot 1 (0-3s): Family Portrait**
|
||||
- **KAI:** "It all started with family. With colors. With hope."
|
||||
- **SUBTITLE:** "It all started with family. With colors. With hope."
|
||||
|
||||
**Shot 2 (3-6s): Otac Longboard**
|
||||
- **KAI:** "Dad taught me that life isn't a straight line..."
|
||||
- **SUBTITLE:** "Dad taught me that life isn't a straight line..."
|
||||
|
||||
**Shot 3 (6-9s): Kai First Dreads**
|
||||
- **ANA:** "...but a wild ride with those you love."
|
||||
- **SUBTITLE:** "...but a wild ride with those you love."
|
||||
|
||||
**Shot 4 (9-12s): Ana Barbershop**
|
||||
- **ANA:** "We were unstoppable. We were immortal."
|
||||
- **SUBTITLE:** "We were unstoppable. We were immortal."
|
||||
|
||||
**Shot 5 (12-15s): Birthday Cake**
|
||||
- **KAI + ANA:** "We were... whole."
|
||||
- **SUBTITLE:** "We were... whole."
|
||||
|
||||
---
|
||||
|
||||
### **PHASE 2: THE VIRUS (15-30s) - COLLAPSE**
|
||||
|
||||
**Shot 6 (15-18s): Virus Microscope**
|
||||
- **KAI:** "Then came X-Noir. The virus. Death in nanobytes."
|
||||
- **SUBTITLE:** "Then came X-Noir. The virus. Death in nanobytes."
|
||||
|
||||
**Shot 7 (18-21s): Chaos Streets**
|
||||
- **ANA:** "Everyone changed. The streets burned."
|
||||
- **SUBTITLE:** "Everyone changed. The streets burned."
|
||||
|
||||
**Shot 8 (21-24s): Zombie Silhouettes**
|
||||
- **KAI:** "Neighbors, friends... they all became zombies."
|
||||
- **SUBTITLE:** "Neighbors, friends... they all became zombies."
|
||||
|
||||
**Shot 9 (24-27s): Parents Ghosts**
|
||||
- **ANA:** "Our parents fought. Our parents... left us."
|
||||
- **SUBTITLE:** "Our parents fought. Our parents... left us."
|
||||
|
||||
**Shot 10 (27-30s): Ana Taken**
|
||||
- **ANA:** "KAI! DON'T FORGET ME!"
|
||||
- **SUBTITLE:** "KAI! DON'T FORGET ME!"
|
||||
|
||||
---
|
||||
|
||||
### **PHASE 3: THE AMNESIA (30-45s) - ALONE & AGE**
|
||||
|
||||
**Shot 11 (30-33s): Kai Alone Basement**
|
||||
- **KAI:** "I was left alone. In darkness. With a hole in my head."
|
||||
- **SUBTITLE:** "I was left alone. In darkness. With a hole in my head."
|
||||
|
||||
**Shot 12 (33-36s): Kai Young Timelapse**
|
||||
- **KAI:** "Years passed. My face changed..."
|
||||
- **SUBTITLE:** "Years passed. My face changed..."
|
||||
|
||||
**Shot 13 (36-39s): Kai Adult 35**
|
||||
- **KAI:** "...my beard grew... but my memories?"
|
||||
- **SUBTITLE:** "...my beard grew... but my memories?"
|
||||
|
||||
**Shot 14 (39-42s): Kai Elder 50**
|
||||
- **KAI:** "All memory was fog. Except for one face."
|
||||
- **SUBTITLE:** "All memory was fog. Except for one face."
|
||||
|
||||
**Shot 15 (42-45s): Ana Memory Flash**
|
||||
- **ANA:** "Ana... Sister... Twin... The truth."
|
||||
- **SUBTITLE:** "Ana... Sister... Twin... The truth."
|
||||
|
||||
---
|
||||
|
||||
### **PHASE 4: THE AWAKENING (45-60s) - PRESENT**
|
||||
|
||||
**Shot 16 (45-48s): Kai Bedroom Wakeup**
|
||||
- **KAI:** "And now... I wake up. Again. Every single day."
|
||||
- **SUBTITLE:** "And now... I wake up. Again. Every single day."
|
||||
|
||||
**Shot 17 (48-51s): Gronk Doorway**
|
||||
- **GRONK:** "Finally awake, old man. Your mission awaits."
|
||||
- **SUBTITLE:** "Finally awake, old man. Your mission awaits."
|
||||
|
||||
**Shot 18 (51-54s): Ana Memory (Reprise)**
|
||||
- **KAI:** "I must find her."
|
||||
- **SUBTITLE:** "I must find her."
|
||||
|
||||
**Shot 19 (54-57s): Twins Childhood (Flashback)**
|
||||
- **ANA:** "We were always two..."
|
||||
- **SUBTITLE:** "We were always two..."
|
||||
|
||||
**Shot 20 (57-60s): Fade to Black**
|
||||
- **KAI:** "...even if it takes my entire life."
|
||||
- **SUBTITLE:** "...even if it takes my entire life."
|
||||
|
||||
---
|
||||
|
||||
## 🎤 EDGE-TTS VOICE COMMANDS (ENGLISH)
|
||||
|
||||
### **KAI LINES (en-US-GuyNeural - Young energetic male):**
|
||||
|
||||
```bash
|
||||
# Generate all Kai voices
|
||||
python3 -m edge_tts --text "It all started with family. With colors. With hope." --voice en-US-GuyNeural --write-media kai_en_01.mp3
|
||||
|
||||
python3 -m edge_tts --text "Dad taught me that life isn't a straight line..." --voice en-US-GuyNeural --write-media kai_en_02.mp3
|
||||
|
||||
python3 -m edge_tts --text "We were... whole." --voice en-US-GuyNeural --write-media kai_en_03.mp3
|
||||
|
||||
python3 -m edge_tts --text "Then came X-Noir. The virus. Death in nanobytes." --voice en-US-GuyNeural --write-media kai_en_04.mp3
|
||||
|
||||
python3 -m edge_tts --text "Neighbors, friends... they all became zombies." --voice en-US-GuyNeural --write-media kai_en_05.mp3
|
||||
|
||||
python3 -m edge_tts --text "I was left alone. In darkness. With a hole in my head." --voice en-US-GuyNeural --write-media kai_en_06.mp3
|
||||
|
||||
python3 -m edge_tts --text "Years passed. My face changed..." --voice en-US-GuyNeural --write-media kai_en_07.mp3
|
||||
|
||||
python3 -m edge_tts --text "...my beard grew... but my memories?" --voice en-US-GuyNeural --write-media kai_en_08.mp3
|
||||
|
||||
python3 -m edge_tts --text "All memory was fog. Except for one face." --voice en-US-GuyNeural --write-media kai_en_09.mp3
|
||||
|
||||
python3 -m edge_tts --text "And now... I wake up. Again. Every single day." --voice en-US-GuyNeural --write-media kai_en_10.mp3
|
||||
|
||||
python3 -m edge_tts --text "I must find her." --voice en-US-GuyNeural --write-media kai_en_11.mp3
|
||||
|
||||
python3 -m edge_tts --text "...even if it takes my entire life." --voice en-US-GuyNeural --write-media kai_en_12.mp3
|
||||
```
|
||||
|
||||
### **ANA LINES (en-US-JennyNeural - Warm female voice):**
|
||||
|
||||
```bash
|
||||
# Generate all Ana voices
|
||||
python3 -m edge_tts --text "...but a wild ride with those you love." --voice en-US-JennyNeural --write-media ana_en_01.mp3
|
||||
|
||||
python3 -m edge_tts --text "We were unstoppable. We were immortal." --voice en-US-JennyNeural --write-media ana_en_02.mp3
|
||||
|
||||
python3 -m edge_tts --text "We were... whole." --voice en-US-JennyNeural --write-media ana_en_03.mp3
|
||||
|
||||
python3 -m edge_tts --text "Everyone changed. The streets burned." --voice en-US-JennyNeural --write-media ana_en_04.mp3
|
||||
|
||||
python3 -m edge_tts --text "Our parents fought. Our parents... left us." --voice en-US-JennyNeural --write-media ana_en_05.mp3
|
||||
|
||||
python3 -m edge_tts --text "KAI! DON'T FORGET ME!" --voice en-US-JennyNeural --write-media ana_en_06.mp3
|
||||
|
||||
python3 -m edge_tts --text "Ana... Sister... Twin... The truth." --voice en-US-JennyNeural --write-media ana_en_07.mp3
|
||||
|
||||
python3 -m edge_tts --text "We were always two..." --voice en-US-JennyNeural --write-media ana_en_08.mp3
|
||||
```
|
||||
|
||||
### **GRONK LINE (en-GB-RyanNeural - Deep UK male):**
|
||||
|
||||
```bash
|
||||
python3 -m edge_tts --text "Finally awake, old man. Your mission awaits." --voice en-GB-RyanNeural --write-media gronk_en_01.mp3
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📐 SUBTITLE POSITIONING
|
||||
|
||||
**Position:** Bottom center, 100px from bottom
|
||||
**Font:** Courier New, 20px
|
||||
**Color:** White with cyan glow
|
||||
**Effect:** Typewriter (instant display for readability)
|
||||
**Duration:** Show for full shot duration
|
||||
**Transitions:** Fade in 500ms, fade out 300ms
|
||||
|
||||
---
|
||||
|
||||
**NEXT:** Generate all English voices and update IntroScene.js!
|
||||
BIN
assets/audio/voiceover/ana_en_01.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_01.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/ana_en_02.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_02.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/ana_en_03.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_03.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/ana_en_04.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_04.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/ana_en_05.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_05.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/ana_en_06.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_06.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/ana_en_07.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_07.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/ana_en_08.mp3
Normal file
BIN
assets/audio/voiceover/ana_en_08.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/gronk_en_01.mp3
Normal file
BIN
assets/audio/voiceover/gronk_en_01.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_01.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_01.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_02.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_02.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_03.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_03.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_04.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_04.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_05.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_05.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_06.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_06.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_07.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_07.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_08.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_08.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_09.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_09.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_10.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_10.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_11.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_11.mp3
Normal file
Binary file not shown.
BIN
assets/audio/voiceover/kai_en_12.mp3
Normal file
BIN
assets/audio/voiceover/kai_en_12.mp3
Normal file
Binary file not shown.
@@ -47,32 +47,32 @@ class IntroScene extends Phaser.Scene {
|
||||
// 🎵 AMBIENT MUSIC
|
||||
this.loadAudioSafe('noir_ambience', 'assets/audio/ambient/noir_ambience.mp3');
|
||||
|
||||
// 🎤 KAI VOICES (12 total)
|
||||
this.loadAudioSafe('kai_01', 'assets/audio/voiceover/kai_01_beginning.mp3');
|
||||
this.loadAudioSafe('kai_02', 'assets/audio/voiceover/kai_02_father.mp3');
|
||||
this.loadAudioSafe('kai_03', 'assets/audio/voiceover/kai_03_whole.mp3');
|
||||
this.loadAudioSafe('kai_04', 'assets/audio/voiceover/kai_04_virus.mp3');
|
||||
this.loadAudioSafe('kai_05', 'assets/audio/voiceover/kai_05_zombies.mp3');
|
||||
this.loadAudioSafe('kai_06', 'assets/audio/voiceover/kai_06_alone.mp3');
|
||||
this.loadAudioSafe('kai_07', 'assets/audio/voiceover/kai_07_years.mp3');
|
||||
this.loadAudioSafe('kai_08', 'assets/audio/voiceover/kai_08_memory.mp3');
|
||||
this.loadAudioSafe('kai_09', 'assets/audio/voiceover/kai_09_fog.mp3');
|
||||
this.loadAudioSafe('kai_10', 'assets/audio/voiceover/kai_10_wake.mp3');
|
||||
this.loadAudioSafe('kai_11', 'assets/audio/voiceover/kai_11_find.mp3');
|
||||
this.loadAudioSafe('kai_12', 'assets/audio/voiceover/kai_12_lifetime.mp3');
|
||||
// 🎤 KAI VOICES (12 total - ENGLISH)
|
||||
this.loadAudioSafe('kai_01', 'assets/audio/voiceover/kai_en_01.mp3');
|
||||
this.loadAudioSafe('kai_02', 'assets/audio/voiceover/kai_en_02.mp3');
|
||||
this.loadAudioSafe('kai_03', 'assets/audio/voiceover/kai_en_03.mp3');
|
||||
this.loadAudioSafe('kai_04', 'assets/audio/voiceover/kai_en_04.mp3');
|
||||
this.loadAudioSafe('kai_05', 'assets/audio/voiceover/kai_en_05.mp3');
|
||||
this.loadAudioSafe('kai_06', 'assets/audio/voiceover/kai_en_06.mp3');
|
||||
this.loadAudioSafe('kai_07', 'assets/audio/voiceover/kai_en_07.mp3');
|
||||
this.loadAudioSafe('kai_08', 'assets/audio/voiceover/kai_en_08.mp3');
|
||||
this.loadAudioSafe('kai_09', 'assets/audio/voiceover/kai_en_09.mp3');
|
||||
this.loadAudioSafe('kai_10', 'assets/audio/voiceover/kai_en_10.mp3');
|
||||
this.loadAudioSafe('kai_11', 'assets/audio/voiceover/kai_en_11.mp3');
|
||||
this.loadAudioSafe('kai_12', 'assets/audio/voiceover/kai_en_12.mp3');
|
||||
|
||||
// 🎤 ANA VOICES (8 total)
|
||||
this.loadAudioSafe('ana_01', 'assets/audio/voiceover/ana_01_ride.mp3');
|
||||
this.loadAudioSafe('ana_02', 'assets/audio/voiceover/ana_02_immortal.mp3');
|
||||
this.loadAudioSafe('ana_03', 'assets/audio/voiceover/ana_03_whole.mp3');
|
||||
this.loadAudioSafe('ana_04', 'assets/audio/voiceover/ana_04_changed.mp3');
|
||||
this.loadAudioSafe('ana_05', 'assets/audio/voiceover/ana_05_parents.mp3');
|
||||
this.loadAudioSafe('ana_06', 'assets/audio/voiceover/ana_06_scream.mp3');
|
||||
this.loadAudioSafe('ana_07', 'assets/audio/voiceover/ana_07_truth.mp3');
|
||||
this.loadAudioSafe('ana_08', 'assets/audio/voiceover/ana_08_two.mp3');
|
||||
// 🎤 ANA VOICES (8 total - ENGLISH)
|
||||
this.loadAudioSafe('ana_01', 'assets/audio/voiceover/ana_en_01.mp3');
|
||||
this.loadAudioSafe('ana_02', 'assets/audio/voiceover/ana_en_02.mp3');
|
||||
this.loadAudioSafe('ana_03', 'assets/audio/voiceover/ana_en_03.mp3');
|
||||
this.loadAudioSafe('ana_04', 'assets/audio/voiceover/ana_en_04.mp3');
|
||||
this.loadAudioSafe('ana_05', 'assets/audio/voiceover/ana_en_05.mp3');
|
||||
this.loadAudioSafe('ana_06', 'assets/audio/voiceover/ana_en_06.mp3');
|
||||
this.loadAudioSafe('ana_07', 'assets/audio/voiceover/ana_en_07.mp3');
|
||||
this.loadAudioSafe('ana_08', 'assets/audio/voiceover/ana_en_08.mp3');
|
||||
|
||||
// 🎤 GRONK VOICE
|
||||
this.loadAudioSafe('gronk_01', 'assets/audio/voiceover/gronk_01_wake.mp3');
|
||||
// 🎤 GRONK VOICE (ENGLISH - Deep UK)
|
||||
this.loadAudioSafe('gronk_01', 'assets/audio/voiceover/gronk_en_01.mp3');
|
||||
}
|
||||
|
||||
loadAudioSafe(key, path) {
|
||||
@@ -216,7 +216,7 @@ class IntroScene extends Phaser.Scene {
|
||||
});
|
||||
}
|
||||
|
||||
playVoice(key) {
|
||||
playVoice(key, subtitleText) {
|
||||
try {
|
||||
if (this.cache.audio.exists(key)) {
|
||||
if (this.currentVoice) this.currentVoice.stop();
|
||||
@@ -226,6 +226,70 @@ class IntroScene extends Phaser.Scene {
|
||||
} catch (e) {
|
||||
console.warn(`⚠️ Voice ${key} not available`);
|
||||
}
|
||||
|
||||
// Show subtitle at bottom
|
||||
if (subtitleText) {
|
||||
this.showSubtitle(subtitleText, 2800); // 2.8s duration (slightly less than 3s shot)
|
||||
}
|
||||
}
|
||||
|
||||
showSubtitle(text, duration = 3000) {
|
||||
// Remove previous subtitle
|
||||
if (this.currentText) {
|
||||
this.currentText.destroy();
|
||||
}
|
||||
|
||||
const width = this.cameras.main.width;
|
||||
const height = this.cameras.main.height;
|
||||
|
||||
// Create subtitle at bottom
|
||||
this.currentText = this.add.text(
|
||||
width / 2,
|
||||
height - 100, // 100px from bottom
|
||||
text,
|
||||
{
|
||||
fontFamily: 'Courier New',
|
||||
fontSize: '20px',
|
||||
fill: '#ffffff',
|
||||
stroke: '#000000',
|
||||
strokeThickness: 3,
|
||||
shadow: {
|
||||
offsetX: 2,
|
||||
offsetY: 2,
|
||||
color: '#00ffff',
|
||||
blur: 8,
|
||||
stroke: false,
|
||||
fill: true
|
||||
},
|
||||
align: 'center',
|
||||
wordWrap: { width: width - 100 }
|
||||
}
|
||||
);
|
||||
this.currentText.setOrigin(0.5);
|
||||
this.currentText.setAlpha(0);
|
||||
this.currentText.setDepth(950); // Below VHS but above Polaroid
|
||||
|
||||
// Fade in
|
||||
this.tweens.add({
|
||||
targets: this.currentText,
|
||||
alpha: 1,
|
||||
duration: 500,
|
||||
ease: 'Power2.easeOut'
|
||||
});
|
||||
|
||||
// Fade out before end
|
||||
this.time.delayedCall(duration - 300, () => {
|
||||
if (this.currentText) {
|
||||
this.tweens.add({
|
||||
targets: this.currentText,
|
||||
alpha: 0,
|
||||
duration: 300,
|
||||
onComplete: () => {
|
||||
if (this.currentText) this.currentText.destroy();
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════════════════════════════
|
||||
|
||||
Reference in New Issue
Block a user