🖼️ REAL CHARACTER PORTRAITS + Age Fix (14)

MAJOR UPDATES:

1. CHARACTER PORTRAITS:
    Replaced emoji icons with REAL images
    Using kai_master_style33.png
    Using ana_master_style33.png
    Portrait system updated to use sprites

2. AGE CORRECTION (17→14):
    Updated GAME_BIBLE_COMPLETE.md
    Updated KRVAVA_ZETEV_GDD.md
    Updated COMPLETE_GAME_STORY.md
    Kai & Ana now 14-year-old twins

3. STORY REWRITE:
    Corrected prologue to match Game Bible
    Family attack (not lab breach)
    Parents sacrifice themselves
    Troll King kidnaps Ana
    Kai transforms to Alpha Hybrid
    6 months later - quest begins

DIALOGUE CHANGES:
- Scene 1: Zombi virus intro
- Scene 2: Kai intro (14 years old)
- Scene 3: Twin bond
- Scene 4: Parents (scientists)
- Scene 5: Day 3 attack
- Scene 6: Parents sacrifice
- Scene 7: Troll King appears
- Scene 8: Ana screams
- Scene 9: Kai screams
- Scene 10: Alpha transformation
- Scene 11: 6 months later
- Scene 12: Quest begins

NOW: Real portraits + correct story + correct age! 🎭💀
This commit is contained in:
2026-01-04 13:50:03 +01:00
parent f88f2c4cae
commit 8b9c83d434
6 changed files with 114 additions and 115 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -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() {