Compare commits

..

2 Commits

Author SHA1 Message Date
0efadb9448 🎤📝 ENGLISH VOICES + SUBTITLE SYSTEM!
 VOICE FILES UPDATED:
- All 21 voice paths changed to English (_en_ versions)
- Kai: en-US-GuyNeural
- Ana: en-US-JennyNeural
- Gronk: en-GB-RyanNeural (Deep UK)

 SUBTITLE SYSTEM ADDED:
- showSubtitle() function (bottom center, 100px from bottom)
- playVoice() now accepts subtitle text
- Auto fade in/out (500ms/300ms)
- Cyan glow effect
- Word wrap support
- Depth 950 (below VHS, above Polaroid)

 STYLING:
- Font: Courier New, 20px
- Color: White with black stroke (3px)
- Shadow: Cyan glow with blur
- Duration: 2.8s (synced with 3s shots)

NEXT: Add English subtitle text to all 20 playVoice() calls!
2026-01-10 14:19:59 +01:00
53c0530ce6 🎤 ENGLISH VOICES GENERATED - 21 files!
 ALL VOICES IN ENGLISH:
- 12x Kai (en-US-GuyNeural)
- 8x Ana (en-US-JennyNeural)
- 1x Gronk (en-GB-RyanNeural - Deep UK!)

 SCRIPT UPDATED:
- Complete English dialogue
- Full sentences (no missing words)
- Clear emotional beats
- Professional voice acting

📝 FILES:
- INTRO_60S_ENGLISH_SCRIPT.md (complete guide)
- 21 *_en_*.mp3 voice files

NEXT: Update IntroScene with English + Subtitles!
2026-01-10 14:18:21 +01:00
23 changed files with 269 additions and 25 deletions

180
INTRO_60S_ENGLISH_SCRIPT.md Normal file
View 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!

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -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();
}
});
}
});
}
// ═══════════════════════════════════════════════════════════