diff --git a/COMPLETE_GAME_STORY.md b/COMPLETE_GAME_STORY.md index 9ebd13dbd..10b03f37c 100644 --- a/COMPLETE_GAME_STORY.md +++ b/COMPLETE_GAME_STORY.md @@ -125,7 +125,7 @@ DR. KRNIĆ: "Humanity has failed. Time for Evolution 2.0." **The Marković Family:** -Marko and Elena (both scientists) try to protect their 17-year-old twins: +Marko and Elena (both scientists) try to protect their 14-year-old twins: - **Kai** - brave, strong, protective - **Ana** - smart, curious, scientifically brilliant diff --git a/GAME_BIBLE_COMPLETE.md b/GAME_BIBLE_COMPLETE.md index d59f5303d..d292d9582 100644 --- a/GAME_BIBLE_COMPLETE.md +++ b/GAME_BIBLE_COMPLETE.md @@ -41,7 +41,7 @@ Stardew Valley meets Don't Starve meets Resident Evil. Farm by day, survive the ## 📖 STORY & NARRATIVE ### **Premise:** -You are **Kai**, a 17-year-old survivor searching for your missing sister **Ana** in DolinaSmrti (Death Valley), a once-peaceful Slovenian valley now plagued by zombie outbreaks and reality-bending anomalies. +You are **Kai**, a 14-year-old survivor searching for your missing sister **Ana** in DolinaSmrti (Death Valley), a once-peaceful Slovenian valley now plagued by zombie outbreaks and reality-bending anomalies. ### **Opening:** Game starts with Kai arriving at an abandoned family farm. The town is destroyed, Ana is missing, and zombies roam the streets. You must rebuild the farm, survive, and follow clues to find Ana. diff --git a/ai_voice_gen/generate_prologue_slovenian.sh b/ai_voice_gen/generate_prologue_slovenian.sh index 7d07fff24..fdfd5f624 100755 --- a/ai_voice_gen/generate_prologue_slovenian.sh +++ b/ai_voice_gen/generate_prologue_slovenian.sh @@ -1,64 +1,63 @@ #!/bin/bash -# Generate Slovenian voiceover files for prologue +# CORRECT Slovenian prologue story (14-year-olds, family attack, Ana kidnapped) EDGE_TTS="/Users/davidkotnik/Library/Python/3.9/bin/edge-tts" OUTPUT_DIR="assets/audio 🔴/voiceover/prologue_sl" -# Voice selection: Rok (male) for Narrator & Kai, Petra (female) for Ana VOICE_NARRATOR="sl-SI-RokNeural" VOICE_KAI="sl-SI-RokNeural" VOICE_ANA="sl-SI-PetraNeural" -echo "🎙️ Generating Slovenian prologue voiceovers..." +echo "🎙️ Generating CORRECTED Slovenian prologue (14 years old)..." -# Prologue 01 - Narrator -$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Leto 2084. Svet, kot smo ga poznali, je padel." --write-media "$OUTPUT_DIR/prologue_01.wav" +# 01 - Opening +$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Leto 2084. Zombi virus je uničil svet." --write-media "$OUTPUT_DIR/prologue_01.wav" echo "✅ 1/12" -# Prologue 02 - Narrator -$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Zombi virus je uničil civilizacijo. Preživeli se borijo za vsak nov dan." --write-media "$OUTPUT_DIR/prologue_02.wav" +# 02 - Family intro +$EDGE_TTS --voice "$VOICE_KAI" --text "Moje ime je Kai Marković. Star sem štirinajst let." --write-media "$OUTPUT_DIR/prologue_02.wav" echo "✅ 2/12" -# Prologue 03 - Kai -$EDGE_TTS --voice "$VOICE_KAI" --text "Ime mi je Kai. Z dvojno sestro Ano sva bila najboljša znanstvenika na področju virusologije." --write-media "$OUTPUT_DIR/prologue_03.wav" +# 03 - Ana intro +$EDGE_TTS --voice "$VOICE_KAI" --text "Moja dvojčica Ana in jaz, sva zelo povezana. Nezlomljiv vez." --write-media "$OUTPUT_DIR/prologue_03.wav" echo "✅ 3/12" -# Prologue 04 - Ana -$EDGE_TTS --voice "$VOICE_ANA" --text "Kai, poglejva! Uspelo nama je izolirati Alfa strain! To bi lahko bila rešitev!" --write-media "$OUTPUT_DIR/prologue_04.wav" +# 04 - Parents +$EDGE_TTS --voice "$VOICE_KAI" --text "Naša starša sta bila znanstvenika. Raziskovala sta virusne mutacije." --write-media "$OUTPUT_DIR/prologue_04.wav" echo "✅ 4/12" -# Prologue 05 - Kai -$EDGE_TTS --voice "$VOICE_KAI" --text "Ana je vedno bila optimistična. Jaz? Bil sem previdnejši." --write-media "$OUTPUT_DIR/prologue_05.wav" +# 05 - Day 3 outbreak +$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Tretji dan izbruha. Horda zombijev napada družinsko hišo." --write-media "$OUTPUT_DIR/prologue_05.wav" echo "✅ 5/12" -# Prologue 06 - Narrator (ALARM) -$EDGE_TTS --voice "$VOICE_NARRATOR" --rate "+20%" --text "ALARM! BREACH IN SECTOR 7!" --write-media "$OUTPUT_DIR/prologue_06.wav" +# 06 - Parents sacrifice +$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Starša se žrtvujeta, da rešita dvojčka. Zadnji besede: Beži, Kai! Zaščiti Ano!" --write-media "$OUTPUT_DIR/prologue_06.wav" echo "✅ 6/12" -# Prologue 07 - Kai (urgent) -$EDGE_TTS --voice "$VOICE_KAI" --rate "+10%" --text "Zombiji! So vdrli v laboratorij! Ana, BEŽI!" --write-media "$OUTPUT_DIR/prologue_07.wav" +# 07 - Troll King appears +$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Iz senc se pojavi Orjaški Troll Kralj. Poslal ga je zlobni doktor Krnić." --write-media "$OUTPUT_DIR/prologue_07.wav" echo "✅ 7/12" -# Prologue 08 - Ana (urgent) -$EDGE_TTS --voice "$VOICE_ANA" --rate "+10%" --text "Vzorci! Moram jih zaščititi! Ti beži, Kai! BEŽI!" --write-media "$OUTPUT_DIR/prologue_08.wav" +# 08 - Ana kidnapped +$EDGE_TTS --voice "$VOICE_ANA" --text "KAI! REŠI ME! KAIII!" --write-media "$OUTPUT_DIR/prologue_08.wav" echo "✅ 8/12" -# Prologue 09 - Kai (sad) -$EDGE_TTS --voice "$VOICE_KAI" --rate "-10%" --text "Nato je sledila eksplozija. Ko sem se zbudil... Ana je bila izginila." --write-media "$OUTPUT_DIR/prologue_09.wav" +# 09 - Kai screams +$EDGE_TTS --voice "$VOICE_KAI" --text "ANA! NE! VRNITE MI JO!" --write-media "$OUTPUT_DIR/prologue_09.wav" echo "✅ 9/12" -# Prologue 10 - Kai (emotional) -$EDGE_TTS --voice "$VOICE_KAI" --rate "-10%" --text "Našel sem le njen laboratorijski plašč. In kri. Njeno kri..." --write-media "$OUTPUT_DIR/prologue_10.wav" +# 10 - Transformation +$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Kai se spremeni v Alfa Hibrida. Vijolične oči. Moč nadzora nad zombiji." --write-media "$OUTPUT_DIR/prologue_10.wav" echo "✅ 10/12" -# Prologue 11 - Kai (determined) -$EDGE_TTS --voice "$VOICE_KAI" --text "Ampak trupla ni bilo. To pomeni... mogoče živi. Moram jo najti!" --write-media "$OUTPUT_DIR/prologue_11.wav" +# 11 - Present day +$EDGE_TTS --voice "$VOICE_NARRATOR" --text "Šest mesecev kasneje. Kai se zbudi na majhni kmetiji. Ana je izginila." --write-media "$OUTPUT_DIR/prologue_11.wav" echo "✅ 11/12" -# Prologue 12 - Narrator (closing) -$EDGE_TTS --voice "$VOICE_NARRATOR" --rate "-5%" --text "In tako se začne Kaijevo potovanje skozi Mrtvo dolino. Iskanje Ane. Iskanje upanja." --write-media "$OUTPUT_DIR/prologue_12.wav" +# 12 - Quest begins +$EDGE_TTS --voice "$VOICE_KAI" --text "Moram jo najti. Ne glede na to, kaj bo potrebno. Ana, prihajam!" --write-media "$OUTPUT_DIR/prologue_12.wav" echo "✅ 12/12" echo "" -echo "🎉 All 12 Slovenian voiceovers generated!" -echo "📁 Location: $OUTPUT_DIR" +echo "🎉 CORRECTED story voiceovers generated!" +echo "📝 Story: 14-year-old twins, family attack, Ana kidnapped by Troll King" diff --git a/assets/audio 🔴/voiceover/prologue_sl/prologue_01.wav b/assets/audio 🔴/voiceover/prologue_sl/prologue_01.wav index dc1e9a9e7..e69de29bb 100644 Binary files a/assets/audio 🔴/voiceover/prologue_sl/prologue_01.wav and b/assets/audio 🔴/voiceover/prologue_sl/prologue_01.wav differ diff --git a/docs/KRVAVA_ZETEV_GDD.md b/docs/KRVAVA_ZETEV_GDD.md index 80ab51bd8..05df80666 100644 --- a/docs/KRVAVA_ZETEV_GDD.md +++ b/docs/KRVAVA_ZETEV_GDD.md @@ -27,7 +27,7 @@ **Krvava Žetev** (Death Harvest) is a **post-apocalyptic farming RPG** that combines the cozy life-simulation gameplay of *Stardew Valley* with deep RPG mechanics, zombie management, town restoration, and an emotional story-driven quest. -In a world ravaged by a zombie outbreak, you play as **Kai Marković**, a 17-year-old Alpha Hybrid with the unique ability to control zombies. After your twin sister **Ana** is kidnapped by the Giant Troll King, you must build a thriving farm using zombie workers, restore civilization, explore dangerous biomes, and ultimately save your sister – and the world. +In a world ravaged by a zombie outbreak, you play as **Kai Marković**, a 14-year-old Alpha Hybrid with the unique ability to control zombies. After your twin sister **Ana** is kidnapped by the Giant Troll King, you must build a thriving farm using zombie workers, restore civilization, explore dangerous biomes, and ultimately save your sister – and the world. --- @@ -302,7 +302,7 @@ In a world ravaged by a zombie outbreak, you play as **Kai Marković**, a 17-yea ## Story Summary **Before the Outbreak:** -- Kai & Ana Marković (17-year-old twins) +- Kai & Ana Marković (14-year-old twins) - Parents: Scientists researching virus mutations - Happy family, close sibling bond diff --git a/src/scenes/PrologueScene.js b/src/scenes/PrologueScene.js index c353f407b..5801c8afb 100644 --- a/src/scenes/PrologueScene.js +++ b/src/scenes/PrologueScene.js @@ -38,6 +38,10 @@ class PrologueScene extends Phaser.Scene { this.load.json('prologue_data', 'assets/dialogue/prologue.json'); + // Load character portraits + this.load.image('kai_portrait', 'reference_images/kai_master_style33.png'); + this.load.image('ana_portrait', 'reference_images/ana_master_style33.png'); + // Load prologue voiceover audio files (Slovenian WAV format) for (let i = 1; i <= 19; i++) { const num = i.toString().padStart(2, '0'); @@ -45,6 +49,7 @@ class PrologueScene extends Phaser.Scene { } console.log('🎤 Loading 19 Slovenian prologue voiceover files...'); + console.log('🖼️ Loading character portraits...'); } create() { @@ -64,108 +69,110 @@ class PrologueScene extends Phaser.Scene { if (!this.dialogueData) { console.warn('⚠️ Using fallback hardcoded dialogue!'); - // FALLBACK: Extended Slovenian dialogue (12 scenes) + // CORRECT STORY: 14-year-old twins, family sacrifice, Troll King kidnapping this.dialogueData = [ { id: 'prologue_01', speaker: "NARRATOR", - text: "Leto 2084. Svet, kot smo ga poznali, je padel.", - background: "lab", + text: "Leto 2084. Zombi virus je uničil svet.", + background: "ruins", bgColor: 0x1a1a2e, portrait: null }, { id: 'prologue_02', - speaker: "NARRATOR", - text: "Zombi virus je uničil civilizacijo. Preživeli se borijo za vsak nov dan.", - background: "ruins", + speaker: "KAI", + text: "Moje ime je Kai Marković. Star sem štirinajst let.", + background: "lab", bgColor: 0x2d1b00, - portrait: null, - flash: true + portrait: "kai_neutral" }, { id: 'prologue_03', speaker: "KAI", - text: "Ime mi je Kai. Z dvojno sestro Ano sva bila najboljša znanstvenika na področju virusologije.", + text: "Moja dvojčica Ana in jaz, sva zelo povezana. Nezlomljiv vez.", + background: "lab", + bgColor: 0x2d4a1e, + portrait: "kai_neutral" + }, + { + id: 'prologue_04', + speaker: "KAI", + text: "Naša starša sta bila znanstvenika. Raziskovala sta virusne mutacije.", background: "lab", bgColor: 0x1a1a2e, portrait: "kai_neutral" }, - { - id: 'prologue_04', - speaker: "ANA", - text: "Kai, poglejva! Uspelo nama je izolirati Alfa strain! To bi lahko bila rešitev!", - background: "lab", - bgColor: 0x1a1a2e, - portrait: "ana_excited" - }, { id: 'prologue_05', - speaker: "KAI", - text: "Ana je vedno bila optimistična. Jaz? Bil sem previdnejši.", - background: "lab", - bgColor: 0x1a1a2e, - portrait: "kai_worried" - }, - { - id: 'prologue_06', speaker: "NARRATOR", - text: "⚠️ ALARM! BREACH IN SECTOR 7! ⚠️", - background: "lab_alarm", + text: "Tretji dan izbruha. Horda zombijev napada družinsko hišo.", + background: "lab_chaos", bgColor: 0x660000, portrait: null, shake: true, flash: true }, + { + id: 'prologue_06', + speaker: "NARRATOR", + text: "Starša se žrtvujeta, da rešita dvojčka. Zadnji besede: 'Beži, Kai! Zaščiti Ano!'", + background: "lab_chaos", + bgColor: 0x3d0000, + portrait: null, + shake: true + }, { id: 'prologue_07', + speaker: "NARRATOR", + text: "Iz senc se pojavi Orjaški Troll Kralj. Poslal ga je zlobni doktor Krnić.", + background: "lab_alarm", + bgColor: 0x2d0000, + portrait: null, + shake: true + }, + { + id: 'prologue_08', + speaker: "ANA", + text: "KAI! REŠI ME! KAIII!", + background: "lab_chaos", + bgColor: 0x3d0000, + portrait: "ana_pain", + shake: true + }, + { + id: 'prologue_09', speaker: "KAI", - text: "Zombiji! So vdrli v laboratorij! Ana, BEŽI!", + text: "ANA! NE! VRNITE MI JO!", background: "lab_chaos", bgColor: 0x3d0000, portrait: "kai_shocked", shake: true }, { - id: 'prologue_08', - speaker: "ANA", - text: "Vzorci! Moram jih zaščititi! Ti beži, Kai! BEŽI!", - background: "lab_chaos", - bgColor: 0x3d0000, - portrait: "ana_determined" - }, - { - id: 'prologue_09', - speaker: "KAI", - text: "Nato je sledila eksplozija. Ko sem se zbudil... Ana je bila izginila.", + id: 'prologue_10', + speaker: "NARRATOR", + text: "Kai se spremeni v Alfa Hibrida. Vijolične oči. Moč nadzora nad zombiji.", background: "ruins", - bgColor: 0x1a1a1a, - portrait: "kai_pain", + bgColor: 0x4a1a4a, + portrait: null, flash: true }, - { - id: 'prologue_10', - speaker: "KAI", - text: "Našel sem le njen laboratorijski plašč. In kri. Njeno kri...", - background: "ruins", - bgColor: 0x1a1a1a, - portrait: "kai_confused" - }, { id: 'prologue_11', - speaker: "KAI", - text: "Ampak trupla ni bilo. To pomeni... mogoče živi. Moram jo najti!", - background: "farm", - bgColor: 0x2d4a1e, - portrait: "kai_determined" - }, - { - id: 'prologue_12', speaker: "NARRATOR", - text: "In tako se začne Kaijevo potovanje skozi Mrtvo dolino. Iskanje Ane. Iskanje upanja.", + text: "Šest mesecev kasneje. Kai se zbudi na majhni kmetiji. Ana je izginila.", background: "farm", bgColor: 0x2d4a1e, portrait: null + }, + { + id: 'prologue_12', + speaker: "KAI", + text: "Moram jo najti. Ne glede na to, kaj bo potrebno. Ana, prihajam!", + background: "farm", + bgColor: 0x2d4a1e, + portrait: "kai_determined" } ]; } @@ -265,10 +272,11 @@ class PrologueScene extends Phaser.Scene { this.portraitBg = this.add.rectangle(width - 150, dialogueY + 90, 120, 120, 0x4a3520, 0.9); this.portraitBg.setStrokeStyle(2, 0xd4a574); - this.portraitText = this.add.text(width - 150, dialogueY + 90, '', { - fontSize: '60px' - }); - this.portraitText.setOrigin(0.5); + // Portrait image sprite (instead of emoji text) + this.portraitImage = this.add.sprite(width - 150, dialogueY + 90, 'kai_portrait'); + this.portraitImage.setOrigin(0.5); + this.portraitImage.setDisplaySize(100, 100); // Fit in portrait box + this.portraitImage.setVisible(false); // Background sprite (will be created per dialogue) this.backgroundSprite = null; @@ -428,31 +436,23 @@ class PrologueScene extends Phaser.Scene { updatePortrait(portraitKey) { if (!portraitKey) { this.portraitBg.setVisible(false); - this.portraitText.setVisible(false); + this.portraitImage.setVisible(false); return; } this.portraitBg.setVisible(true); - this.portraitText.setVisible(true); + this.portraitImage.setVisible(true); - // Simple emoji portraits for now - // TODO: Replace with actual character art - const portraits = { - 'kai_neutral': '👨', - 'kai_worried': '😟', - 'kai_shocked': '😱', - 'kai_pain': '😫', - 'kai_confused': '😕', - 'kai_determined': '😠', - 'kai_anger': '😡', - 'kai_realization': '🤔', - 'ana_excited': '👩‍🔬', - 'ana_serious': '😐', - 'ana_determined': '💪', - 'ana_pain': '😣' - }; - - this.portraitText.setText(portraits[portraitKey] || '❓'); + // Map portrait keys to actual character images + // For now, all Kai variants use kai_portrait, all Ana use ana_portrait + if (portraitKey.startsWith('kai_')) { + this.portraitImage.setTexture('kai_portrait'); + } else if (portraitKey.startsWith('ana_')) { + this.portraitImage.setTexture('ana_portrait'); + } else { + // Default fallback + this.portraitImage.setVisible(false); + } } advanceDialogue() {