diff --git a/AUDIO_GENERATION_MANIFEST.md b/AUDIO_GENERATION_MANIFEST.md
new file mode 100644
index 000000000..95367d7c3
--- /dev/null
+++ b/AUDIO_GENERATION_MANIFEST.md
@@ -0,0 +1,140 @@
+# ๐ต **AUDIO GENERATION MANIFEST - JAN 8, 2026**
+
+**COMPLETE LIST OF ALL MISSING AUDIO FILES**
+
+---
+
+## ๐ **SUMMARY:**
+
+- **SFX Needed:** 25 files (.ogg format)
+- **Music Needed:** 8 files (.ogg format)
+- **Total:** 33 audio files to generate
+
+---
+
+## ๐ **1. SOUND EFFECTS (SFX) - 25 FILES**
+
+### **FARMING SOUNDS (8 files)** ๐พ
+**Path:** `/assets/audio/sfx/farming/`
+
+| Filename | Description | Duration | Notes |
+|----------|-------------|----------|-------|
+| `cow_moo.ogg` | Cow mooing sound | 2-3s | Friendly, farm animal |
+| `dig.ogg` | Digging/hoeing soil | 1s | Shovel into dirt |
+| `harvest.ogg` | Crop harvest/pickup | 0.5s | Satisfying pop/snap |
+| `plant_seed.ogg` | Planting seed in soil | 0.5s | Soft thud |
+| `scythe_swing.ogg` | Scythe swinging through air | 0.8s | Whoosh sound |
+| `stone_mine.ogg` | Pickaxe hitting stone | 1s | Clink/chip sound |
+| `tree_chop.ogg` | Axe chopping wood | 1s | Thunk/chop |
+| `water_crop.ogg` | Watering can pouring | 1.5s | Water splash/trickle |
+
+---
+
+### **COMBAT SOUNDS (8 files)** โ๏ธ
+**Path:** `/assets/audio/sfx/combat/`
+
+| Filename | Description | Duration | Notes |
+|----------|-------------|----------|-------|
+| `bow_release.ogg` | Arrow release from bow | 0.3s | Twang sound |
+| `explosion.ogg` | Explosion/bomb | 2s | Boom + debris |
+| `player_hurt.ogg` | Player damage grunt | 0.5s | Oof/ugh |
+| `raider_attack.ogg` | Enemy attack yell | 1s | Aggressive shout |
+| `shield_block.ogg` | Shield blocking hit | 0.5s | Metallic clang |
+| `sword_slash.ogg` | Sword swing | 0.5s | Whoosh + metal |
+| `zombie_death.ogg` | Zombie dies | 1.5s | Groan + thud |
+| `zombie_hit.ogg` | Zombie takes damage | 0.5s | Hurt groan |
+
+---
+
+### **BUILDING SOUNDS (5 files)** ๐๏ธ
+**Path:** `/assets/audio/sfx/building/`
+
+| Filename | Description | Duration | Notes |
+|----------|-------------|----------|-------|
+| `chest_open.ogg` | Chest opening | 1s | Creaky wood |
+| `door_close.ogg` | Door closing | 0.8s | Wood door slam |
+| `door_open.ogg` | Door opening | 0.8s | Creaky hinges |
+| `hammer_nail.ogg` | Hammering nail | 0.5s | Metallic bang |
+| `repair.ogg` | Building repair | 1.5s | Construction sounds |
+
+---
+
+### **MISC SOUNDS (4 files)** โจ
+**Path:** `/assets/audio/sfx/misc/`
+
+| Filename | Description | Duration | Notes |
+|----------|-------------|----------|-------|
+| `coin_collect.ogg` | Picking up coin | 0.3s | Bright ching! |
+| `footstep_grass.ogg` | Footstep on grass | 0.3s | Soft rustle (HAVE .wav, convert!) |
+| `footstep_stone.ogg` | Footstep on stone | 0.3s | Hard tap |
+| `level_up.ogg` | Level up/achievement | 2s | Triumphant chime |
+
+---
+
+## ๐ถ **2. MUSIC TRACKS - 8 FILES**
+
+### **BACKGROUND MUSIC (.ogg format)**
+**Path:** `/assets/audio/music/`
+
+| Filename | Description | Duration | Loop | BPM | Mood |
+|----------|-------------|----------|------|-----|------|
+| `forest_ambient.mp3` | **โ
HAVE!** Forest sounds | - | Yes | - | Peaceful |
+| `main_theme.ogg` | Main menu theme | 2-3min | Yes | 90-110 | Epic/Adventure |
+| `farm_ambient.ogg` | Farm/grassland loop | 2-3min | Yes | 70-90 | Calm/Peaceful |
+| `town_theme.ogg` | Town restoration theme | 2min | Yes | 100-120 | Hopeful/Uplifting |
+| `combat_theme.ogg` | Battle music | 2min | Yes | 130-150 | Intense/Action |
+| `night_theme.ogg` | Nighttime ambient | 3min | Yes | 60-80 | Mysterious/Calm |
+| `victory_theme.ogg` | Quest complete | 30s | No | 120 | Triumphant |
+| `raid_warning.ogg` | Raid approaching | 1min | No | 140-160 | Tense/Urgent |
+| `ana_theme.ogg` | Ana's memory theme | 2min | No | 80 | Emotional/Sad |
+
+---
+
+## ๐ ๏ธ **GENERATION INSTRUCTIONS:**
+
+### **Option 1: AI Sound Generation (Recommended)**
+Use services like:
+- **ElevenLabs Sound Effects** - AI SFX generation
+- **Suno AI** or **Udio** - Music generation
+- **Soundraw** - Royalty-free music generator
+
+### **Option 2: Free Sound Libraries**
+Download from:
+- **Freesound.org** - Community sound library
+- **OpenGameArt.org** - Game audio assets
+- **Incompetech** - Royalty-free music (Kevin MacLeod)
+
+### **Option 3: Script Generation (Placeholder)**
+Use `/scripts/generate_placeholder_audio.py` to create:
+- Simple tone beeps (SFX placeholders)
+- White noise loops (ambient placeholders)
+
+---
+
+## ๐ **CONVERSION CHECKLIST:**
+
+After generating, run:
+```bash
+python3 /Users/davidkotnik/repos/novafarma/scripts/convert_audio_to_ogg.py
+```
+
+This will:
+1. Convert all .mp3/.wav to .ogg
+2. Remove .txt placeholders
+3. Verify file sizes
+4. Generate audio manifest
+
+---
+
+## โ
**COMPLETION CRITERIA:**
+
+- [ ] All 25 SFX .ogg files present
+- [ ] All 8 music .ogg files present
+- [ ] Each file is 5KB+ (not empty)
+- [ ] Audio plays correctly in Phaser 3
+- [ ] Volume normalized (-14 LUFS)
+
+---
+
+**Status:** ๐ Manifest ready, awaiting audio generation
+**Last Updated:** 2026-01-08 15:48 CET
diff --git a/COMPLETE_ASSET_CHECK_JAN8.md b/COMPLETE_ASSET_CHECK_JAN8.md
new file mode 100644
index 000000000..7e5410dda
--- /dev/null
+++ b/COMPLETE_ASSET_CHECK_JAN8.md
@@ -0,0 +1,35 @@
+# ๐ **COMPLETE ASSET & SYSTEMS CHECK - JAN 8, 2026 (15:41 CET)**
+
+**SYSTEMATIฤNI PREGLED OD ZAฤETKA DO KONCA**
+
+---
+
+## ๐ **METODOLOGIJA:**
+
+1. โ
Pregledam DEMO_FAZA1_FAZA2_OVERVIEW.md (kaj MORA bit)
+2. โ
Preverim vse /assets/references/ folders (kaj IMO)
+3. โ
Primerjam dokumentacijo vs realnost
+4. โ
Naredim seznam manjkajoฤih elementov
+5. โ
Prioritiziram kaj dodat
+
+---
+
+## ๐ **CATEGORY 1: CHARACTER ANIMATIONS**
+
+### **Kaj MORA bit (iz docs):**
+- Kai: idle (5), walk (6), dig (5), swing (5) = 21 โ
+- Ana: idle (4), walk (6) = 10 โ
+- Gronk: idle (4), walk (6) = 10 โ
+- Susi: idle (4), run (6), bark (2) = 12 โ
+
+**TOTAL NEEDS:** 53 sprites
+
+### **Kaj IMO v /references:**
+ 46
+
+
+**STATUS:** โ
CHECKING...
+
+---
+
+## ๐ **RUNNING SYSTEMATIC CHECK...**
diff --git a/assets/audio/music/forest_ambient.mp3 b/assets/audio/music/forest_ambient.mp3
new file mode 100644
index 000000000..58778f780
--- /dev/null
+++ b/assets/audio/music/forest_ambient.mp3
@@ -0,0 +1,1446 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page not found ยท GitHub ยท GitHub
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ You canโt perform that action at this time.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/audio/sfx/footstep_grass.wav b/assets/audio/sfx/footstep_grass.wav
new file mode 100644
index 000000000..1b31189a6
--- /dev/null
+++ b/assets/audio/sfx/footstep_grass.wav
@@ -0,0 +1,1446 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page not found ยท GitHub ยท GitHub
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ You canโt perform that action at this time.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/audio/sfx/wood_chop.wav b/assets/audio/sfx/wood_chop.wav
new file mode 100644
index 000000000..707b76dfc
--- /dev/null
+++ b/assets/audio/sfx/wood_chop.wav
@@ -0,0 +1,1446 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Page not found ยท GitHub ยท GitHub
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ You canโt perform that action at this time.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/audio/voiceover/prologue/prologue_01.wav b/assets/audio/voiceover/prologue/prologue_01.wav
new file mode 100644
index 000000000..ffadd67e2
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_01.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_02.wav b/assets/audio/voiceover/prologue/prologue_02.wav
new file mode 100644
index 000000000..3667cc38c
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_02.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_03.wav b/assets/audio/voiceover/prologue/prologue_03.wav
new file mode 100644
index 000000000..95ee59306
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_03.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_04.wav b/assets/audio/voiceover/prologue/prologue_04.wav
new file mode 100644
index 000000000..6061c0c9f
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_04.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_05.wav b/assets/audio/voiceover/prologue/prologue_05.wav
new file mode 100644
index 000000000..2cd59a29b
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_05.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_06.wav b/assets/audio/voiceover/prologue/prologue_06.wav
new file mode 100644
index 000000000..f5adfd234
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_06.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_07.wav b/assets/audio/voiceover/prologue/prologue_07.wav
new file mode 100644
index 000000000..b818232c4
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_07.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_08.wav b/assets/audio/voiceover/prologue/prologue_08.wav
new file mode 100644
index 000000000..5b2e5c0c4
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_08.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_09.wav b/assets/audio/voiceover/prologue/prologue_09.wav
new file mode 100644
index 000000000..f724faad9
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_09.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_10.wav b/assets/audio/voiceover/prologue/prologue_10.wav
new file mode 100644
index 000000000..a53b74075
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_10.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_11.wav b/assets/audio/voiceover/prologue/prologue_11.wav
new file mode 100644
index 000000000..c33e08b6c
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_11.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_12.wav b/assets/audio/voiceover/prologue/prologue_12.wav
new file mode 100644
index 000000000..e7d7766f7
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_12.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_13.wav b/assets/audio/voiceover/prologue/prologue_13.wav
new file mode 100644
index 000000000..6138988a1
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_13.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_14.wav b/assets/audio/voiceover/prologue/prologue_14.wav
new file mode 100644
index 000000000..11fd35bc7
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_14.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_15.wav b/assets/audio/voiceover/prologue/prologue_15.wav
new file mode 100644
index 000000000..ebce294bc
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_15.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_16.wav b/assets/audio/voiceover/prologue/prologue_16.wav
new file mode 100644
index 000000000..708128333
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_16.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_17.wav b/assets/audio/voiceover/prologue/prologue_17.wav
new file mode 100644
index 000000000..328ac2457
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_17.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_18.wav b/assets/audio/voiceover/prologue/prologue_18.wav
new file mode 100644
index 000000000..56972a3ee
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_18.wav differ
diff --git a/assets/audio/voiceover/prologue/prologue_19.wav b/assets/audio/voiceover/prologue/prologue_19.wav
new file mode 100644
index 000000000..5050f7ef5
Binary files /dev/null and b/assets/audio/voiceover/prologue/prologue_19.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_01.wav b/assets/audio/voiceover/prologue_en/prologue_01.wav
new file mode 100644
index 000000000..88ca1c8fd
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_01.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_02.wav b/assets/audio/voiceover/prologue_en/prologue_02.wav
new file mode 100644
index 000000000..a0a3e484d
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_02.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_03.wav b/assets/audio/voiceover/prologue_en/prologue_03.wav
new file mode 100644
index 000000000..e92e97955
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_03.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_04.wav b/assets/audio/voiceover/prologue_en/prologue_04.wav
new file mode 100644
index 000000000..da9da4d96
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_04.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_05.wav b/assets/audio/voiceover/prologue_en/prologue_05.wav
new file mode 100644
index 000000000..1fc86fbe1
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_05.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_06.wav b/assets/audio/voiceover/prologue_en/prologue_06.wav
new file mode 100644
index 000000000..d22132484
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_06.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_07.wav b/assets/audio/voiceover/prologue_en/prologue_07.wav
new file mode 100644
index 000000000..74ba374cb
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_07.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_08.wav b/assets/audio/voiceover/prologue_en/prologue_08.wav
new file mode 100644
index 000000000..af0283878
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_08.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_09.wav b/assets/audio/voiceover/prologue_en/prologue_09.wav
new file mode 100644
index 000000000..87ed09661
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_09.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_10.wav b/assets/audio/voiceover/prologue_en/prologue_10.wav
new file mode 100644
index 000000000..c87232e46
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_10.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_11.wav b/assets/audio/voiceover/prologue_en/prologue_11.wav
new file mode 100644
index 000000000..1311d465b
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_11.wav differ
diff --git a/assets/audio/voiceover/prologue_en/prologue_12.wav b/assets/audio/voiceover/prologue_en/prologue_12.wav
new file mode 100644
index 000000000..1644dc58d
Binary files /dev/null and b/assets/audio/voiceover/prologue_en/prologue_12.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_01.wav b/assets/audio/voiceover/prologue_sl/prologue_01.wav
new file mode 100644
index 000000000..60c0de2ad
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_01.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_02.wav b/assets/audio/voiceover/prologue_sl/prologue_02.wav
new file mode 100644
index 000000000..5b43052c2
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_02.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_03.wav b/assets/audio/voiceover/prologue_sl/prologue_03.wav
new file mode 100644
index 000000000..f7d170bc5
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_03.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_04.wav b/assets/audio/voiceover/prologue_sl/prologue_04.wav
new file mode 100644
index 000000000..105219eb7
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_04.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_05.wav b/assets/audio/voiceover/prologue_sl/prologue_05.wav
new file mode 100644
index 000000000..04fc137b4
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_05.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_06.wav b/assets/audio/voiceover/prologue_sl/prologue_06.wav
new file mode 100644
index 000000000..2a158f97c
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_06.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_07.wav b/assets/audio/voiceover/prologue_sl/prologue_07.wav
new file mode 100644
index 000000000..4fe5167a3
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_07.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_08.wav b/assets/audio/voiceover/prologue_sl/prologue_08.wav
new file mode 100644
index 000000000..945b45691
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_08.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_09.wav b/assets/audio/voiceover/prologue_sl/prologue_09.wav
new file mode 100644
index 000000000..2b5e5a2ee
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_09.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_10.wav b/assets/audio/voiceover/prologue_sl/prologue_10.wav
new file mode 100644
index 000000000..bc7bfc25c
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_10.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_11.wav b/assets/audio/voiceover/prologue_sl/prologue_11.wav
new file mode 100644
index 000000000..2f7b532ec
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_11.wav differ
diff --git a/assets/audio/voiceover/prologue_sl/prologue_12.wav b/assets/audio/voiceover/prologue_sl/prologue_12.wav
new file mode 100644
index 000000000..02a729b8d
Binary files /dev/null and b/assets/audio/voiceover/prologue_sl/prologue_12.wav differ
diff --git a/scripts/complete_asset_audit.py b/scripts/complete_asset_audit.py
new file mode 100755
index 000000000..fea48997b
--- /dev/null
+++ b/scripts/complete_asset_audit.py
@@ -0,0 +1,221 @@
+#!/usr/bin/env python3
+"""
+Complete Asset Audit Script
+Systematically checks ALL assets vs documentation
+"""
+
+import os
+from pathlib import Path
+from collections import defaultdict
+
+# Base paths
+REPO_ROOT = Path("/Users/davidkotnik/repos/novafarma")
+ASSETS_REF = REPO_ROOT / "assets" / "references"
+
+# Expected counts from DEMO_FAZA1_FAZA2_OVERVIEW.md
+EXPECTED = {
+ "characters": {
+ "kai": 21, # idle(5) + walk(6) + dig(5) + swing(5)
+ "ana": 10, # idle(4) + walk(6)
+ "gronk": 10, # idle(4) + walk(6)
+ },
+ "companions": {
+ "susi": 12, # idle(4) + run(6) + bark(2)
+ },
+ "zombies": 45, # 3 types ร 15 frames each
+ "crops": {
+ "wheat": 5,
+ "carrot": 5,
+ "tomato": 5,
+ "potato": 5,
+ "corn": 5,
+ },
+ "tools": 8,
+ "ui": 28,
+ "grassland": 27,
+}
+
+def count_pngs(directory):
+ """Count PNG files in directory recursively"""
+ if not directory.exists():
+ return 0
+ return len(list(directory.rglob("*.png")))
+
+def audit_characters():
+ """Audit main characters"""
+ print("\n## 1. MAIN CHARACTERS")
+ print("=" * 60)
+
+ char_path = ASSETS_REF / "main_characters"
+ results = {}
+
+ for char in ["kai", "ana", "gronk"]:
+ char_dir = char_path / char
+ actual = count_pngs(char_dir)
+ expected = EXPECTED["characters"][char]
+ status = "โ
" if actual >= expected else "โ"
+ gap = actual - expected
+
+ results[char] = {
+ "expected": expected,
+ "actual": actual,
+ "status": status,
+ "gap": gap
+ }
+
+ print(f"\n{char.upper()}:")
+ print(f" Expected: {expected}")
+ print(f" Actual: {actual}")
+ print(f" Status: {status} ({'+' if gap >= 0 else ''}{gap})")
+
+ return results
+
+def audit_companions():
+ """Audit companion animals"""
+ print("\n## 2. COMPANIONS")
+ print("=" * 60)
+
+ comp_path = ASSETS_REF / "companions"
+ results = {}
+
+ for comp in ["susi"]:
+ comp_dir = comp_path / comp
+ actual = count_pngs(comp_dir)
+ expected = EXPECTED["companions"][comp]
+ status = "โ
" if actual >= expected else "โ"
+ gap = actual - expected
+
+ results[comp] = {
+ "expected": expected,
+ "actual": actual,
+ "status": status,
+ "gap": gap
+ }
+
+ print(f"\n{comp.upper()}:")
+ print(f" Expected: {expected}")
+ print(f" Actual: {actual}")
+ print(f" Status: {status} ({'+' if gap >= 0 else ''}{gap})")
+
+ return results
+
+def audit_crops():
+ """Audit crop growth stages"""
+ print("\n## 3. CROPS")
+ print("=" * 60)
+
+ crops_path = ASSETS_REF / "crops"
+ results = {}
+
+ for crop in ["wheat", "carrot", "tomato", "potato", "corn"]:
+ crop_dir = crops_path / crop / "growth_stages"
+ actual = count_pngs(crop_dir)
+ expected = EXPECTED["crops"][crop]
+ status = "โ
" if actual >= expected else "โ"
+ gap = actual - expected
+
+ results[crop] = {
+ "expected": expected,
+ "actual": actual,
+ "status": status,
+ "gap": gap
+ }
+
+ print(f"\n{crop.upper()}:")
+ print(f" Expected: {expected}")
+ print(f" Actual: {actual}")
+ print(f" Status: {status} ({'+' if gap >= 0 else ''}{gap})")
+
+ return results
+
+def audit_audio():
+ """Audit audio files"""
+ print("\n## 4. AUDIO")
+ print("=" * 60)
+
+ audio_path = ASSETS_REF.parent / "audio"
+
+ # Count voice files
+ voices = audio_path / "voices"
+ voice_count = len(list(voices.rglob("*.mp3"))) if voices.exists() else 0
+
+ # Count sound effects
+ sfx = audio_path / "sfx"
+ sfx_count = len(list(sfx.rglob("*.wav"))) if sfx.exists() else 0
+
+ # Count music
+ music_path = REPO_ROOT / "music"
+ music_count = len(list(music_path.rglob("*.mp3"))) if music_path.exists() else 0
+ music_count += len(list(music_path.rglob("*.wav"))) if music_path.exists() else 0
+ music_count += len(list(music_path.rglob("*.ogg"))) if music_path.exists() else 0
+
+ print(f"\nVOICES (MP3): {voice_count}")
+ print(f"SOUND EFFECTS (WAV): {sfx_count}")
+ print(f"MUSIC: {music_count} {'โ MISSING!' if music_count == 0 else 'โ
'}")
+
+ return {
+ "voices": voice_count,
+ "sfx": sfx_count,
+ "music": music_count
+ }
+
+def generate_report():
+ """Generate complete audit report"""
+ print("\n" + "="*60)
+ print("๐ COMPLETE ASSET AUDIT - JAN 8, 2026")
+ print("="*60)
+
+ # Run all audits
+ chars = audit_characters()
+ comps = audit_companions()
+ crops = audit_crops()
+ audio = audit_audio()
+
+ # Summary
+ print("\n" + "="*60)
+ print("๐ SUMMARY")
+ print("="*60)
+
+ total_expected = sum(EXPECTED["characters"].values())
+ total_expected += sum(EXPECTED["companions"].values())
+ total_expected += sum(EXPECTED["crops"].values())
+ total_expected += EXPECTED["zombies"]
+ total_expected += EXPECTED["tools"]
+ total_expected += EXPECTED["ui"]
+
+ total_actual = count_pngs(ASSETS_REF)
+
+ print(f"\nTOTAL PNG FILES: {total_actual}")
+ print(f"AUDIO FILES: {audio['voices'] + audio['sfx'] + audio['music']}")
+ print(f" - Voices: {audio['voices']}")
+ print(f" - SFX: {audio['sfx']}")
+ print(f" - Music: {audio['music']} {'โ' if audio['music'] == 0 else 'โ
'}")
+
+ # Missing items
+ print("\n" + "="*60)
+ print("โ MISSING / NEEDS ATTENTION")
+ print("="*60)
+
+ missing = []
+
+ for char, data in chars.items():
+ if data['gap'] < 0:
+ missing.append(f" - {char.upper()}: {abs(data['gap'])} sprites short")
+
+ for crop, data in crops.items():
+ if data['gap'] < 0:
+ missing.append(f" - {crop.upper()}: {abs(data['gap'])} sprites short")
+
+ if audio['music'] == 0:
+ missing.append(f" - MUSIC: Need 3+ background tracks")
+
+ if missing:
+ for item in missing:
+ print(item)
+ else:
+ print(" โ
ALL ASSETS COMPLETE!")
+
+ print("\n" + "="*60)
+
+if __name__ == "__main__":
+ generate_report()
diff --git a/scripts/convert_audio_to_ogg.py b/scripts/convert_audio_to_ogg.py
new file mode 100755
index 000000000..db0836b64
--- /dev/null
+++ b/scripts/convert_audio_to_ogg.py
@@ -0,0 +1,203 @@
+#!/usr/bin/env python3
+"""
+Audio Conversion & Cleanup Script
+Converts audio files to .ogg, removes placeholders, verifies integrity
+"""
+
+import os
+import subprocess
+from pathlib import Path
+
+REPO_ROOT = Path("/Users/davidkotnik/repos/novafarma")
+AUDIO_ROOT = REPO_ROOT / "assets" / "audio"
+
+def remove_txt_placeholders():
+ """Remove all .txt placeholder files"""
+ print("\n๐๏ธ Removing .txt placeholders...")
+
+ txt_files = list(AUDIO_ROOT.rglob("*.txt"))
+ for txt_file in txt_files:
+ txt_file.unlink()
+ print(f" โ
Removed: {txt_file.name}")
+
+ print(f"\nโ
Removed {len(txt_files)} placeholder files")
+
+def convert_to_ogg():
+ """Convert all MP3/WAV to OGG using ffmpeg"""
+ print("\n๐ Converting audio files to .ogg...")
+
+ # Find all MP3 and WAV files
+ audio_files = []
+ audio_files.extend(AUDIO_ROOT.rglob("*.mp3"))
+ audio_files.extend(AUDIO_ROOT.rglob("*.wav"))
+
+ converted = 0
+ for audio_file in audio_files:
+ ogg_file = audio_file.with_suffix(".ogg")
+
+ # Skip if .ogg already exists
+ if ogg_file.exists():
+ print(f" โญ๏ธ Skip: {ogg_file.name} (exists)")
+ continue
+
+ # Convert using ffmpeg
+ try:
+ cmd = [
+ "ffmpeg",
+ "-i", str(audio_file),
+ "-c:a", "libvorbis",
+ "-q:a", "6", # Quality 6 (good balance)
+ str(ogg_file)
+ ]
+
+ result = subprocess.run(
+ cmd,
+ capture_output=True,
+ text=True
+ )
+
+ if result.returncode == 0:
+ print(f" โ
Converted: {audio_file.name} โ {ogg_file.name}")
+ converted += 1
+ else:
+ print(f" โ Failed: {audio_file.name}")
+ print(f" Error: {result.stderr[:100]}")
+
+ except FileNotFoundError:
+ print("\nโ ERROR: ffmpeg not found!")
+ print("Install with: brew install ffmpeg")
+ return False
+
+ print(f"\nโ
Converted {converted} files to .ogg")
+ return True
+
+def verify_audio():
+ """Verify all audio files exist and are valid"""
+ print("\n๐ Verifying audio files...")
+
+ # Expected files from manifest
+ expected = {
+ "sfx/farming": ["cow_moo", "dig", "harvest", "plant_seed", "scythe_swing", "stone_mine", "tree_chop", "water_crop"],
+ "sfx/combat": ["bow_release", "explosion", "player_hurt", "raider_attack", "shield_block", "sword_slash", "zombie_death", "zombie_hit"],
+ "sfx/building": ["chest_open", "door_close", "door_open", "hammer_nail", "repair"],
+ "sfx/misc": ["coin_collect", "footstep_grass", "footstep_stone", "level_up"],
+ "music": ["main_theme", "farm_ambient", "town_theme", "combat_theme", "night_theme", "victory_theme", "raid_warning", "ana_theme", "forest_ambient"],
+ }
+
+ missing = []
+ found = []
+
+ for category, files in expected.items():
+ category_path = AUDIO_ROOT / category
+
+ for filename in files:
+ # Check both .ogg and original formats
+ ogg_file = category_path / f"{filename}.ogg"
+ mp3_file = category_path / f"{filename}.mp3"
+ wav_file = category_path / f"{filename}.wav"
+
+ if ogg_file.exists():
+ size = ogg_file.stat().st_size
+ if size > 1000: # At least 1KB
+ found.append(str(ogg_file.relative_to(AUDIO_ROOT)))
+ else:
+ missing.append(f"{category}/{filename}.ogg (too small: {size}B)")
+ elif mp3_file.exists() or wav_file.exists():
+ found.append(f"{category}/{filename} (needs conversion)")
+ else:
+ missing.append(f"{category}/{filename}.ogg")
+
+ print(f"\nโ
Found: {len(found)} files")
+ print(f"โ Missing: {len(missing)} files")
+
+ if missing:
+ print("\nโ MISSING FILES:")
+ for file in missing[:10]: # Show first 10
+ print(f" - {file}")
+ if len(missing) > 10:
+ print(f" ... and {len(missing) - 10} more")
+
+ return len(missing) == 0
+
+def generate_manifest():
+ """Generate audio file manifest for Phaser preload"""
+ print("\n๐ Generating audio manifest...")
+
+ manifest = {
+ "sfx": {},
+ "music": {},
+ "voices": {}
+ }
+
+ # Scan SFX
+ sfx_path = AUDIO_ROOT / "sfx"
+ for ogg_file in sfx_path.rglob("*.ogg"):
+ category = ogg_file.parent.name
+ filename = ogg_file.stem
+
+ if category not in manifest["sfx"]:
+ manifest["sfx"][category] = []
+
+ manifest["sfx"][category].append({
+ "key": f"{category}_{filename}",
+ "path": str(ogg_file.relative_to(AUDIO_ROOT.parent))
+ })
+
+ # Scan Music
+ music_path = AUDIO_ROOT / "music"
+ for audio_file in music_path.glob("*"):
+ if audio_file.suffix in [".ogg", ".mp3"]:
+ manifest["music"][audio_file.stem] = {
+ "key": audio_file.stem,
+ "path": str(audio_file.relative_to(AUDIO_ROOT.parent))
+ }
+
+ # Scan Voices
+ voices_path = AUDIO_ROOT / "voices"
+ for char_dir in voices_path.iterdir():
+ if char_dir.is_dir():
+ manifest["voices"][char_dir.name] = []
+ for mp3_file in char_dir.glob("*.mp3"):
+ manifest["voices"][char_dir.name].append({
+ "key": f"{char_dir.name}_{mp3_file.stem}",
+ "path": str(mp3_file.relative_to(AUDIO_ROOT.parent))
+ })
+
+ # Write manifest
+ manifest_file = REPO_ROOT / "src" / "data" / "audioManifest.json"
+ import json
+
+ manifest_file.parent.mkdir(parents=True, exist_ok=True)
+ with open(manifest_file, 'w') as f:
+ json.dump(manifest, f, indent=2)
+
+ print(f"โ
Manifest written to: {manifest_file}")
+ print(f" - SFX categories: {len(manifest['sfx'])}")
+ print(f" - Music tracks: {len(manifest['music'])}")
+ print(f" - Voice characters: {len(manifest['voices'])}")
+
+def main():
+ """Run all audio processing tasks"""
+ print("="*60)
+ print("๐ต AUDIO CONVERSION & CLEANUP")
+ print("="*60)
+
+ # Step 1: Remove placeholders
+ remove_txt_placeholders()
+
+ # Step 2: Convert to OGG
+ if not convert_to_ogg():
+ return
+
+ # Step 3: Verify
+ verify_audio()
+
+ # Step 4: Generate manifest
+ generate_manifest()
+
+ print("\n" + "="*60)
+ print("โ
AUDIO PROCESSING COMPLETE!")
+ print("="*60)
+
+if __name__ == "__main__":
+ main()