From 4fa69e35eacfdc6575d10d6528669df308d2c0cc Mon Sep 17 00:00:00 2001 From: David Kotnik Date: Mon, 5 Jan 2026 11:18:24 +0100 Subject: [PATCH] VFX SYSTEM + QUEST MANIFEST - Amnesia blur, Harvest sparkles, Water life, Cinematic transitions - 7 Main quests with ADHD dialogue - ROADMAP updated with VFX and Quest tracking --- docs/QUEST_MANIFEST.md | 445 ++++++++++++++++++++++++++++++ docs/ROADMAP.md | 43 +++ docs/VFX_EFFECTS_SYSTEM.md | 539 +++++++++++++++++++++++++++++++++++++ 3 files changed, 1027 insertions(+) create mode 100644 docs/QUEST_MANIFEST.md create mode 100644 docs/VFX_EFFECTS_SYSTEM.md diff --git a/docs/QUEST_MANIFEST.md b/docs/QUEST_MANIFEST.md new file mode 100644 index 000000000..5dc4172f8 --- /dev/null +++ b/docs/QUEST_MANIFEST.md @@ -0,0 +1,445 @@ +# 📜 MASTER QUEST LIST - Faza 1 & 2 +**Project:** Mrtva Dolina +**Scope:** Kickstarter Demo Quests +**Language Style:** ADHD-friendly (preprosti, domači izrazi) + +--- + +## 🎯 **MAIN STORY QUESTS (Amnesia & Family)** + +### **Quest 1: "Zamegljeni Spomini" (Blurred Memories)** + +**Trigger:** Find old family photo in ruins +**Priority:** ⭐⭐⭐⭐⭐ (CRITICAL - unlocks Capital City) + +**Steps:** +1. **Najdi fotografijo** v ruševinah stare hiše + - Location: Starting ruins (Valley of Death) + - Item: `family_photo_blurred.png` + - VFX: Blur effect active + +2. **Prinesi fotografijo Tehniku** v Capital City + - Dialogue: "Hej, a mi lhko ta star foto očistš?" + - Tehnik: "Ja, dam v mašino... Mal počak." + - Animation: Photo goes into cleaning machine + +3. **Čakaj 5 sekund** (real-time cleaning) + - Progress bar animation + - Machine sounds/lights + +4. **Poslušaj Anin glas** (flashback trigger) + - Audio: Ana's voice clip + - Text caption: "Kai, pomniš tisti dan...?" + - VFX: Blur clears (2 second transition) + - Music: Emotional flashback theme + +5. **Odklenjena lokacija: Capital City** + - Map marker appears + - Quest log updated: "Ana Clue 1/50" + - Reward: Hope +5%, 100g, Ana's Necklace item + +**Dialogue (ADHD Style):** +``` +Kai (thoughts): "Joooj... Mama... kje si..." +Ana (voice): "Kai, pomnš tisti dan ko sva šla v gozd?" +Kai: "...Ana?! ANE?!" +[Silence] +Kai: "...bla je tuki... Moram jo najt!" +``` + +**Completion:** +- Unlocks Capital City on map +- Starts "Anina Sled" quest chain +- Journal entry auto-saves + +--- + +### **Quest 2: "Anina Sled" (Ana's Trail)** + +**Trigger:** Complete "Zamegljeni Spomini" +**Priority:** ⭐⭐⭐⭐⭐ (ONGOING - 50 clues total) + +**Concept:** Collect 50 family items across all biomes. Each triggers VFX flashback. + +**Clue Locations (First 10):** + +| # | Item | Biome | VFX | Audio Line | +|---|------|-------|-----|------------| +| 1 | Family Photo | Valley Ruins | Blur clear | "Pomniš tisti dan..." | +| 2 | Ana's Necklace | Forest | Sparkle glow | "To je blo tvoje..." | +| 3 | Mom's Ring | Desert | Golden shine | "Mama..." | +| 4 | Dad's Watch | Frozen Town | Ice reflection | "Oče mi je reku..." | +| 5 | Childhood Toy | Swamp | Murky glow | "Midva sva se z tem igrala..." | +| 6 | Lab Keycard | Nova Lab Ruins | Tech scan | "Nova Lab... vse se je začelo tam..." | +| 7 | Ana's Diary Page 1 | Capital City | Paper flutter | "Danes je najbl čuden dan..." | +| 8 | Twin Photo | Volcanic Zone | Fire flicker | "Dvojčka, za vedno..." | +| 9 | Ana's Hair Ribbon | Ancient Ruins | Silk wave | "Ana... kje SI?!" | +| 10 | Family Dog Collar | Grasslands | Fur texture | "Susi... kje je Susi?!" | + +**Rewards per 10 Clues:** +- **10 clues**: Ana's Theme Song unlocked (radio) +- **20 clues**: Flashback cutscene (longer memory) +- **30 clues**: Twin Bond ability (+10% all stats when thinking of Ana) +- **40 clues**: Major cutscene (Ana's last known location revealed) +- **50 clues**: TRUE ENDING UNLOCKED + +**Dialogue Examples:** +``` +Kai finds Ana's necklace: +"FUCK, to je njeno... To je nosila VEDNO..." +[Blur effect] +Ana (memory): "Kaj misliš, mi paše?" +Kai (memory): "Ja, super ti je." +[Blur clears] +Kai: "Ana... Hold on... Pridem po te..." +``` + +--- + +## 🏗️ **TOWN & ECONOMY QUESTS** + +### **Quest 3: "Šiviljina Prošnja" (Seamstress' Request)** + +**Trigger:** Talk to Šivilja in Capital City +**Priority:** ⭐⭐⭐⭐ + +**Objective:** Bring 5 Nomad Raider Leathers + +**Steps:** +1. **Pogovor s Šiviljo** + - Dialogue: "Hej, maš kšne kože od teh roparjev? Rabu za nov oklep." + - Kai: "Hm... Mogoče pa ja. Kolk rabiš?" + - Šivilja: "5 kosov. Prns, pa ti nardim top oklep." + +2. **Ubij 5 Nomad Raiders** (any type) + - Combat required + - Each raider drops 1 Raider Leather (60% chance) + - Average: Kill ~8 raiders to get 5 leathers + +3. **Prinesi kože Šivilji** + - Dialogue: "Niiice! To je to. Mal počak..." + - Animation: Šivilja sews (5 seconds) + - Sound: Sewing machine + +4. **Prejmi nov oklep** + - Item: **Nomad Armor** (Defense +15, Style +10) + - Visual: Kai now wears cool raider-style armor + - Dialogue: "Haha, kul je! Hvala!" + +**Reward:** +- Nomad Armor (Defense +15) +- Šivilja shop unlocked (clothing upgrades) +- 200g + +--- + +### **Quest 4: "Pekov Recept" (Baker's Recipe)** + +**Trigger:** Talk to Pek in Capital City +**Priority:** ⭐⭐⭐⭐ + +**Objective:** Bring 10 Wild Berries (with VFX harvest animation) + +**Steps:** +1. **Pogovor s Pekom** + - Dialogue: "Ayooo, rabu joke za nov kruh. Maš kšne divje jagode?" + - Kai: "Emm... kje pa najdem?" + - Pek: "V gozdu, okol dreves. Prns 10, pa ti pokažem secret recept." + +2. **Naberi 10x Wild Berries** (forest biome) + - Appear as glowing bushes + - Click to harvest + - **VFX:** Berry pops up, sparkles, flies to inventory + - **Audio:** Satisfying "pop" sound + - Each bush gives 1-3 berries + +3. **Prinesi jagode Peku** + - Dialogue: "Ayyyy perfect! Zdej pazi..." + - Animation: Pek mixes ingredients + - Sound: Baking sounds + +4. **Naučiš se recept** + - Recipe unlocked: **Berry Bread** (Hunger +50, Health +10) + - Pek shop opens (baked goods for sale) + +**Reward:** +- Berry Bread recipe +- 5x Berry Bread (free) +- Pek shop unlocked +- 150g + +**Dialogue:** +``` +Pek: "Yo, to je TOP! Zdej ti pokažm..." +[Cooking animation] +Pek: "Boom! Berry bread. To je kr dobr shit." +Kai: "Nice, hvala!" +``` + +--- + +### **Quest 5: "Tehnikova Naprava" (Technician's Device)** + +**Trigger:** Talk to Tehnik in Capital City +**Priority:** ⭐⭐⭐⭐⭐ + +**Objective:** Find Ancient Battery in deep ruins + +**Steps:** +1. **Pogovor s Tehnikom** + - Dialogue: "Bro, rabu old battery za artifact cleaner. Gre v globoke ruševine." + - Kai: "Kje točno?" + - Tehnik: "Nova Lab basement. Sam pazi, ful zombijev je notri." + +2. **Vstopi v Nova Lab Basement** (new area unlocked) + - Dark, dangerous dungeon + - 20+ zombies + - Navigation puzzle (find correct path) + +3. **Najdi Ancient Battery** + - Located in old server room + - Guarded by mini-boss: **Zombie Scientist** (upgraded zombie) + - Combat required + +4. **Prinesi battery Tehniku** + - Dialogue: "YOOO sick! To je točno to kar rabu!" + - Animation: Tehnik installs battery + - Machine powers on (lights, sounds) + +5. **Artifact Cleaner ACTIVE** + - Museum can now clean artifacts faster + - All future family items auto-clean (no blur delay) + - Museum donations give +50% more XP + +**Reward:** +- Artifact Cleaner unlocked (permanent upgrade) +- Tech Workshop services unlocked +- 500g +- Blueprint: **Energy Shield** (craftable armor) + +**Dialogue:** +``` +Tehnik: "Bro, this is sick! Zdej delaaaa!" +[Machine lights up] +Tehnik: "Zdej lhko vse te stare stvari čistimo. Museum bo happy!" +Kai: "Nice! Kaj še lhko tu upgradam?" +Tehnik: "Vse, bro. Tools, armor, whatevs." +``` + +--- + +## ⚔️ **DEFENSE & DEVELOPMENT QUESTS** + +### **Quest 6: "Obzidje Mrtve Doline" (Walls of Death Valley)** + +**Trigger:** Mayor gives quest after Capital restoration begins +**Priority:** ⭐⭐⭐⭐⭐ (TRIGGERS FIRST RAID EVENT) + +**Objective:** Bring 20 Steel Bars to Ivan + +**Steps:** +1. **Pogovor z Županom** + - Dialogue: "Potrebujemo obzidje. Brez tega ne moremo mesto obnovit." + - Kai: "Kaj točno rabiš?" + - Župan: "20 steel bars. Prns Ivanu." + +2. **Craft ali kupi 20x Steel Bars** + - Each bar needs: 5 iron ore + 2 coal + - Total: 100 iron ore + 40 coal + - Can buy from traders or mine + +3. **Prinesi bars Ivanu** + - Dialogue: "Jaaaa, to je točno to! Gremo delat!" + - Animation: Ivan starts building (cutscene) + - Construction: 30 seconds real-time + +4. **Obzidje zgrajeno (Stage 1: Wooden Walls)** + - Visual: Capital City now has wooden barricades + - Defense +20% + +5. **⚠️ EVENT TRIGGERED: First Raider Invasion** + - 10 seconds after walls complete + - Dialogue (Mayor): "POZOR! Roparji prihajajo!" + - Raid wave: 5 Desert Nomads attack + - Capital guards help defend (2 NPC guards) + +6. **Obrani mesto** + - Combat: Kill all 5 raiders + - Guards assist (deal 30% damage) + - If you lose: Raiders steal 500g, walls damaged + - If you win: Continue to reward + +7. **Nagrada** + - Dialogue (Mayor): "Dobro! Hvala. Tukaj, tvoja nagrada." + - 1000g + - Blueprint: **Guard Tower** (craftable defense structure) + - Capital City Status Board now shows "Walls: Level 1" + +**Dialogue:** +``` +[Raiders approach] +Raider Leader: "Give us food or die!" +Kai: "Fuck off!" +[Combat starts] +Guard NPC: "We got your back!" +[After victory] +Mayor: "Odlično! Mesto je varno. Hvala tebi!" +Kai: "NP. To je moj city." +``` + +--- + +### **Quest 7: "Muzejski Mejnik" (Museum Milestone)** + +**Trigger:** Museum unlocked, Kustos available +**Priority:** ⭐⭐⭐⭐⭐ (UNLOCKS MUSEUM STAGE 2) + +**Objective:** Fill first bug collection wing (24 bugs) + +**Steps:** +1. **Pogovor s Kustosom** + - Dialogue: "Pozdravljeni! Museum potrebuje artefakte. Začnimo z insekti." + - Kai: "Insekti? Kje najdem?" + - Kustos: "Povsod! Uporabi bug net. Prinesi vseh 24 vrst." + +2. **Ujemi 24 različnih vrst hroščev** (bugs) + - Use Bug Net tool + - Bugs spawn in all biomes + - Each biome has 3-5 unique species + - Some rare (5% spawn rate) + +3. **Oddaj hrošče v muzej** + - Click "Donate" button in museum + - VFX: Bug flies to display case + - Sound: Glass case closing + - Museum XP +10 per bug + +4. **Museum Evolution: Stage 2 Unlocked** + - **VISUAL CHANGE:** Museum building grows! + - Old shed → Medium two-story building + - Animation: Construction timelapse (10 seconds) + - Sound: Building sounds, hammering + - Confetti particles + +5. **Nagrada** + - Dialogue (Kustos): "Izvrstno! Museum raste!" + - 800g + - Title: **Bug Master** (achievement) + - Kustos shop unlocked (buys artifacts at premium prices) + - New wing unlocked: **Dinosaur Bones** (next collection goal) + +**Completion VFX:** +```javascript +// Museum growth animation +museumBuilding.animate({ + transform: [ + scaleUp(1.0 → 1.5), // Building grows + construction particles, + confetti explosion + ], + duration: 10000ms +}); + +// Celebratory music +playMusic('museum_level_up.mp3'); + +// Kustos celebration +kustos.animate('happy_dance'); +kustos.say("BRAVO! To je fantastično!"); +``` + +**Dialogue:** +``` +Kustos: "Ah! Vseh 24! Čestitam!" +Kai: "Ja, ful časa je vzelo..." +Kustos: "Ampak vredno! Poglejte!" +[Museum grows] +Kai: "Woaaaah! To je sick!" +Kustos: "Museum je živ! Raste z vašimi odkritji!" +``` + +--- + +## 🌾 **SIDE QUESTS (Optional but Rewarding)** + +### **Quest 8: "Arboristova Pomoč" (Arborist's Help)** + +**Objective:** Plant 50 trees on farm +**Reward:** Arborist auto-plants 10 trees/day (passive income) + +### **Quest 9: "Miro Pravnik's Problem"** + +**Objective:** Find legal documents in ruins +**Reward:** Lawyer shop unlocked (NPC divorces, land rights) + +### **Quest 10: "Zombi Skavt" (Scout Recruitment)** + +**Objective:** Find and tame friendly zombie +**Reward:** Scout companion, leveling system unlocked + +--- + +## 📊 **QUEST PROGRESSION TRACKING** + +### **Quest Log UI:** +``` +Main Story: + ✅ Zamegljeni Spomini (COMPLETE) + 🔄 Anina Sled (2/50 clues) + +Town & Economy: + 🔄 Šiviljina Prošnja (3/5 leathers) + ❌ Pekov Recept (0/10 berries) + ❌ Tehnikova Naprava (NOT STARTED) + +Defense: + ❌ Obzidje Mrtve Doline (NOT STARTED) + +Collections: + 🔄 Muzejski Mejnik (18/24 bugs) +``` + +### **Quest Rewards Summary:** + +| Quest | Gold | Items | Unlocks | +|-------|------|-------|---------| +| Zamegljeni Spomini | 100g | Ana's Necklace | Capital City | +| Šiviljina Prošnja | 200g | Nomad Armor | Šivilja shop | +| Pekov Recept | 150g | 5x Berry Bread | Pek shop, recipe | +| Tehnikova Naprava | 500g | Energy Shield BP | Tech shop, cleaner | +| Obzidje Mrtve Doline | 1000g | Guard Tower BP | Walls Lv1, raids | +| Muzejski Mejnik | 800g | Bug Master title | Museum Stage 2 | + +--- + +## 🎬 **CUTSCENE INTEGRATION** + +All quests use VFX system: +- ✅ **Blur effect** (Amnesia flashbacks) +- ✅ **Sparkle harvest** (Berry collection) +- ✅ **Cross-fade transitions** (Scene changes) +- ✅ **Vignette** (Emotional moments) +- ✅ **Particle effects** (Museum growth, combat) + +--- + +## 🚀 **IMPLEMENTATION PRIORITY** + +**Phase 1 (Demo):** +1. ⭐⭐⭐⭐⭐ Zamegljeni Spomini (story hook) +2. ⭐⭐⭐⭐⭐ Obzidje Mrtve Doline (raid event) +3. ⭐⭐⭐⭐⭐ Muzejski Mejnik (museum growth demo) +4. ⭐⭐⭐⭐ Šiviljina Prošnja (combat loop) +5. ⭐⭐⭐⭐ Pekov Recept (harvest VFX demo) + +**Phase 2 (Post-Demo):** +- Anina Sled (full 50 clues) +- Remaining side quests +- Advanced quest chains + +--- + +**Status:** 🟢 **READY FOR IMPLEMENTATION** +**Dialogue Style:** ✅ ADHD-friendly (simple, domestic, authentic) +**VFX Integration:** ✅ All quests use effects system +**Emotional Impact:** 🚀 **MAXIMUM** - Players will FEEL Kai's journey diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index 33b5b8e02..6282a90aa 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -106,6 +106,49 @@ --- +### **🎬 VFX & Interactive Effects** ✨ NEW + +| Kategorija | Naloga | Prioriteta | Status | +|------------|--------|------------|--------| +| **Amnesia Effect** | Blur-to-clear memory flashbacks | ⭐⭐⭐⭐⭐ | 🔴 Code needed | +| **Amnesia Effect** | Ana voice clips (10 audio files) | ⭐⭐⭐⭐⭐ | 🔴 Audio needed | +| **Amnesia Effect** | Flashback music theme | ⭐⭐⭐⭐ | 🔴 Audio needed | +| **Harvest VFX** | Stardew Valley style sparkle bounce | ⭐⭐⭐⭐⭐ | 🔴 Code needed | +| **Harvest VFX** | Particle system (sparkles, glow) | ⭐⭐⭐⭐ | 🔴 Code needed | +| **Harvest VFX** | Item-to-inventory flying animation | ⭐⭐⭐⭐ | 🔴 Code needed | +| **Water Life** | Fish jump animation | ⭐⭐⭐⭐ | 🔴 Code + sprites needed | +| **Water Life** | Splash particle effects | ⭐⭐⭐ | 🔴 Code needed | +| **Water Life** | Ripple effect system | ⭐⭐⭐ | 🔴 Code needed | +| **Dynamic Visuals** | Cross-fade scene transitions | ⭐⭐⭐⭐ | 🔴 Code needed | +| **Dynamic Visuals** | Vignette effect (story moments) | ⭐⭐⭐⭐ | 🔴 Code needed | +| **Dynamic Visuals** | Slow-motion effect (epic moments) | ⭐⭐ | 🔴 Code needed | +| **Particle Library** | Sparkle, smoke, magic, coins presets | ⭐⭐⭐⭐ | 🔴 Code needed | + +--- + +### **📜 Quest System** ✨ NEW + +| Kategorija | Naloga | Prioriteta | Status | +|------------|--------|------------|--------| +| **Main Story** | Quest: "Zamegljeni Spomini" (unlocks Capital) | ⭐⭐⭐⭐⭐ | 🔴 Code + dialogue needed | +| **Main Story** | Quest: "Anina Sled" (50 clues collection) | ⭐⭐⭐⭐⭐ | 🔴 Code + items needed | +| **Main Story** | 50 Family item clue locations | ⭐⭐⭐⭐⭐ | 🔴 Design + placement needed | +| **Main Story** | Ana voice clips for each clue (50 audio files) | ⭐⭐⭐⭐ | 🔴 Audio production needed | +| **Town Economy** | Quest: "Šiviljina Prošnja" (5 raider leathers) | ⭐⭐⭐⭐ | 🔴 Code + dialogue needed | +| **Town Economy** | Quest: "Pekov Recept" (10 wild berries) | ⭐⭐⭐⭐ | 🔴 Code + dialogue needed | +| **Town Economy** | Quest: "Tehnikova Naprava" (ancient battery) | ⭐⭐⭐⭐⭐ | 🔴 Code + dungeon design | +| **Defense** | Quest: "Obzidje Mrtve Doline" (20 steel bars) | ⭐⭐⭐⭐⭐ | 🔴 Code + raid event | +| **Defense** | First Raid Event (5 Desert Nomads attack) | ⭐⭐⭐⭐⭐ | 🔴 Combat + AI needed | +| **Collections** | Quest: "Muzejski Mejnik" (24 bugs) | ⭐⭐⭐⭐⭐ | 🔴 Code + museum growth | +| **Side Quests** | Quest: "Arboristova Pomoč" (50 trees) | ⭐⭐⭐ | 🔴 Code needed | +| **Side Quests** | Quest: "Miro Pravnik's Problem" (legal docs) | ⭐⭐⭐ | 🔴 Code needed | +| **Side Quests** | Quest: "Zombi Skavt" (scout recruitment) | ⭐⭐⭐⭐⭐ | 🔴 Code needed | +| **Quest UI** | Quest log interface | ⭐⭐⭐⭐⭐ | 🔴 UI design + code | +| **Quest UI** | Quest tracking system | ⭐⭐⭐⭐ | 🔴 Code needed | +| **Quest UI** | Quest completion notifications | ⭐⭐⭐⭐ | 🔴 Code + VFX | + +--- + ### **🎨 Visual Assets** | Kategorija | Naloga | Prioriteta | Status | diff --git a/docs/VFX_EFFECTS_SYSTEM.md b/docs/VFX_EFFECTS_SYSTEM.md new file mode 100644 index 000000000..63877bb3f --- /dev/null +++ b/docs/VFX_EFFECTS_SYSTEM.md @@ -0,0 +1,539 @@ +# 🎬 VFX & INTERACTIVE EFFECTS SYSTEM +**Project:** Mrtva Dolina +**Purpose:** Visual feedback, emotional storytelling, player satisfaction +**Style:** ADHD-friendly, instant feedback, satisfying + +--- + +## ✨ **1. AMNESIA EFFECT (Kai's Memory System)** + +### **Concept:** +When Kai finds family heirlooms or Ana's belongings, trigger a **blur-to-clear memory flashback** with audio cues. + +### **Visual Effect:** + +**Stage 1: Discovery** +```javascript +// Player finds item (photo, Ana's necklace, family object) +onItemFound(familyItem) { + // Show blurred image overlay + showImage({ + src: familyItem.memoryImage, + blur: 20, // Heavy gaussian blur + opacity: 0.8, + fadeIn: 500ms + }); + + // Play mysterious sound + playSound('memory_echo.mp3', volume: 0.5); + + // Show prompt: "E - Remember" (simple text) + showPrompt("Pritisni E za spomin"); +} +``` + +**Stage 2: Memory Restoration** +```javascript +// Player presses E to "remember" +onRememberPressed() { + // Blur clears gradually (2 seconds) + animateBlur({ + from: 20, + to: 0, + duration: 2000ms, + easing: 'easeOut' + }); + + // Play Ana's voice (short clip) + playVoice('ana_flashback_01.mp3'); + // Example: "Kai, pomnš tisti dan...?" (short, 2-3 sec) + + // OR play emotional music sting + playMusic('flashback_theme.mp3', fadeIn: 500ms); + + // Show caption (simple text) + showCaption({ + text: "Spomin odklenjn...", // ADHD-friendly: simple, typo intentional for domestic feel + duration: 3000ms, + color: '#FFD700' // Gold + }); + + // Update quest log + questLog.add('family_memory_' + itemID); +} +``` + +**Stage 3: Reward** +```javascript +// After memory clears: +- Unlock new location on map (e.g., Capital City) +- Add clue to Ana's trail counter (X/50) +- Small stat boost (Hope +5%) +- Journal entry auto-saved +``` + +### **Audio Assets Needed:** +- `memory_echo.mp3` - Mysterious hum/echo +- `flashback_theme.mp3` - Short emotional music (10-15 sec) +- `ana_voice_01-10.mp3` - 10 short voice clips from Ana + +### **Visual Assets Needed:** +- Family photo (blurred + clear versions) +- Ana's necklace (blurred + clear) +- Old diary page (blurred + clear) +- Kai's childhood toy (blurred + clear) + +--- + +## 🌾 **2. HARVESTING VFX (Stardew Valley Style)** + +### **Concept:** +When player harvests crops, items **bounce up with sparkles** and fly into inventory. **Instant satisfaction feedback.** + +### **Animation Sequence:** + +**Step 1: Harvest Action** +```javascript +onCropHarvested(cropTile) { + // 1. Crop disappears from tile + cropTile.sprite.fadeOut(200ms); + + // 2. Item sprite bounces UP + let itemSprite = createSprite(crop.harvestedItem); + itemSprite.position = cropTile.position; + + // Bounce animation (arc trajectory) + itemSprite.animate({ + y: cropTile.y - 40, // Jump up 40px + duration: 300ms, + easing: 'easeOutQuad' + }); + + // 3. Sparkle particles + emitParticles({ + position: cropTile.position, + count: 8, + sprite: 'sparkle_star.png', + color: '#FFD700', // Gold sparkles + velocity: random(-50, 50), + lifetime: 800ms, + fadeOut: true + }); + + // 4. Sound effect + playSound('harvest_pop.mp3', volume: 0.7); + // Happy "pop" or "ding" sound + + // 5. Fly to inventory (UI corner) + itemSprite.animate({ + x: inventoryIcon.x, + y: inventoryIcon.y, + duration: 600ms, + easing: 'easeInQuad', + onComplete: () => { + // Add to inventory + inventory.add(crop.harvestedItem); + itemSprite.destroy(); + + // Inventory icon pulse + inventoryIcon.pulse(); + } + }); +} +``` + +### **Optional: Quality Tier Effects** + +Different sparkle colors for quality: +```javascript +qualityColors = { + basic: '#FFFFFF', // White sparkles + silver: '#C0C0C0', // Silver sparkles + gold: '#FFD700', // Gold sparkles + iridium: '#9D00FF' // Purple sparkles (legendary) +} +``` + +### **Audio Assets Needed:** +- `harvest_pop.mp3` - Satisfying "pop" sound +- `sparkle_ting.mp3` - Optional twinkle sound + +### **Visual Assets Needed:** +- `sparkle_star.png` - 8x8px star particle +- `glow_particle.png` - 4x4px glow dot + +--- + +## 🐟 **3. WATER LIFE (Fish Jump Animation)** + +### **Concept:** +Fish occasionally **jump out of water** with splash effect. **Visual hint** for good fishing spots. + +### **Animation Sequence:** + +**Random Fish Jump:** +```javascript +// Every 5-15 seconds at fishing spots +setInterval(() => { + if (Math.random() < 0.3) { // 30% chance + spawnFishJump(); + } +}, randomRange(5000, 15000)); + +function spawnFishJump() { + let waterTile = getRandomWaterTile(); + + // 1. Fish sprite jumps out + let fish = createSprite('fish_jump.png', waterTile.position); + + fish.animate({ + // Arc jump animation + keyframes: [ + { y: waterTile.y, time: 0 }, + { y: waterTile.y - 32, time: 300 }, // Peak of jump + { y: waterTile.y, time: 600 } // Back to water + ], + rotation: [0, 180, 360], // Flip in air + easing: 'easeInOutQuad' + }); + + // 2. Splash effect (start + end) + createSplash(waterTile.position, scale: 1.0); + + setTimeout(() => { + createSplash(waterTile.position, scale: 1.2); // Bigger splash on landing + fish.destroy(); + }, 600); + + // 3. Sound effect + playSound('water_splash.mp3', volume: 0.6); + + // 4. Ripple effect + createRipple(waterTile.position, { + radius: [0, 48], + duration: 1000ms, + opacity: [0.8, 0] + }); +} +``` + +**Splash Particle Effect:** +```javascript +function createSplash(position, scale) { + emitParticles({ + position: position, + count: 12, + sprite: 'water_drop.png', + color: '#4DB8FF', // Water blue + velocity: randomRange(-80, 80), + gravity: 200, // Drops fall down + lifetime: 500ms, + scale: scale, + rotation: random(0, 360) + }); +} +``` + +### **Gameplay Integration:** +- **Fish jump frequency** indicates fish abundance +- More jumps = better fishing spot +- Rare fish have unique jump animations (golden sparkle) + +### **Audio Assets Needed:** +- `water_splash.mp3` - Splash sound +- `fish_jump.mp3` - Optional fish "plop" + +### **Visual Assets Needed:** +- `fish_jump.png` - 16x16px fish mid-jump (Style 32) +- `water_drop.png` - 4x4px water droplet particle +- `ripple.png` - 32x32px circular ripple ring + +--- + +## 🎥 **4. DYNAMIC VISUALS (Cutscenes & Story Moments)** + +### **Cross-Fade Transitions:** + +```javascript +// Scene transitions (smooth, cinematic) +function transitionScene(fromScene, toScene) { + // Fade out current scene + fromScene.fadeOut({ + duration: 1000ms, + color: '#000000' // Fade to black + }); + + // Wait for fade + setTimeout(() => { + // Switch scenes + game.scene.stop(fromScene); + game.scene.start(toScene); + + // Fade in new scene + toScene.fadeIn({ + duration: 1000ms + }); + }, 1000); +} +``` + +### **Vignette Effect (Important Moments):** + +```javascript +// Adds dark edge vignette for dramatic moments +function applyVignette(intensity = 0.5) { + let vignetteShader = { + type: 'radialGradient', + center: [screenWidth/2, screenHeight/2], + radius: screenWidth * 0.6, + colors: [ + { offset: 0, color: 'rgba(0,0,0,0)' }, + { offset: 1, color: `rgba(0,0,0,${intensity})` } + ] + }; + + camera.applyPostFXShader(vignetteShader); +} + +// Use during: +- Intro sequence (heavy vignette) +- Ana clue discoveries (medium vignette) +- Boss fights (light vignette) +- Emotional cutscenes (heavy vignette) +``` + +### **Blur Effect (Dream/Memory Sequences):** + +```javascript +// Full-screen blur for dream states +function applyDreamBlur() { + camera.applyPostFXShader({ + type: 'gaussianBlur', + strength: 8, + quality: 'medium' + }); + + // Desaturate colors slightly + camera.applyColorMatrix({ + saturation: 0.5, // 50% saturation + brightness: 1.1 // Slightly brighter + }); +} +``` + +### **Slow-Motion Effect (Epic Moments):** + +```javascript +// Slow-motion for dramatic moments +function applySlowMotion(duration = 2000, speed = 0.3) { + game.time.timeScale = speed; // 30% speed + + setTimeout(() => { + // Return to normal speed + tweenValue(game.time.timeScale, 1.0, { + duration: 500ms, + easing: 'easeOut' + }); + }, duration); + + // Optional: Add motion blur + camera.applyMotionBlur(strength: 0.5); +} + +// Use during: +- Boss defeated moment +- Ana rescue cutscene +- Major discovery moments +``` + +--- + +## 🎨 **PARTICLE SYSTEM LIBRARY** + +### **Reusable Particle Effects:** + +```javascript +particlePresets = { + // Sparkle (harvest, treasure) + sparkle: { + sprite: 'sparkle_star.png', + count: 8, + color: '#FFD700', + velocity: random(-50, 50), + lifetime: 800ms, + fadeOut: true + }, + + // Smoke (campfire, forge) + smoke: { + sprite: 'smoke_puff.png', + count: 3, + color: '#888888', + velocity: { x: random(-10, 10), y: -30 }, + lifetime: 2000ms, + fadeOut: true, + scaleUp: true + }, + + // Magic (enchanting, portals) + magic: { + sprite: 'glow_particle.png', + count: 20, + color: '#9D00FF', // Purple + velocity: spiral(radius: 40, speed: 2), + lifetime: 1500ms, + fadeOut: true, + glow: true + }, + + // Blood (combat - optional, can be green "zombie goo") + blood: { + sprite: 'blood_splat.png', + count: 6, + color: '#00FF00', // Green (zombie blood) + velocity: random(-60, 60), + gravity: 150, + lifetime: 800ms, + fadeOut: true + }, + + // Coins (quest rewards, sales) + coins: { + sprite: 'coin_spin.png', + count: 10, + color: '#FFD700', + velocity: { x: random(-40, 40), y: -80 }, + gravity: 200, + lifetime: 1200ms, + rotation: true, + bounce: true + } +} +``` + +--- + +## 📊 **VFX IMPLEMENTATION PRIORITY** + +| Effect | Priority | Complexity | Impact | +|--------|----------|------------|--------| +| **Harvest Sparkles** | ⭐⭐⭐⭐⭐ | Low | High satisfaction | +| **Amnesia Blur** | ⭐⭐⭐⭐⭐ | Medium | Emotional storytelling | +| **Fish Jump** | ⭐⭐⭐⭐ | Low | World feels alive | +| **Cross-Fade** | ⭐⭐⭐⭐ | Low | Professional polish | +| **Vignette** | ⭐⭐⭐ | Low | Dramatic moments | +| **Slow-Motion** | ⭐⭐ | Medium | Epic boss moments | + +--- + +## 🎯 **PHASER 3 IMPLEMENTATION NOTES** + +### **Particle Manager:** +```javascript +// src/systems/ParticleManager.js +class ParticleManager { + constructor(scene) { + this.scene = scene; + this.emitters = {}; + } + + emit(preset, position, customParams = {}) { + let params = { ...particlePresets[preset], ...customParams }; + let emitter = this.scene.add.particles(position.x, position.y, params.sprite, params); + return emitter; + } + + sparkle(position) { + return this.emit('sparkle', position); + } + + smoke(position) { + return this.emit('smoke', position); + } + + magic(position) { + return this.emit('magic', position); + } +} +``` + +### **Post-FX Pipeline:** +```javascript +// Phaser 3 built-in post-processing +scene.cameras.main.setPostPipeline('BlurPostFX'); +scene.cameras.main.setPostPipeline('VignettePostFX'); +``` + +--- + +## 🎬 **CUTSCENE SYSTEM** + +### **Simple Dialogue + VFX:** +```javascript +// src/systems/CutsceneManager.js +class CutsceneManager { + playMemoryFlashback(memoryData) { + // 1. Freeze player + player.freeze(); + + // 2. Apply vignette + applyVignette(0.7); + + // 3. Show blurred image + showBlurredImage(memoryData.image); + + // 4. Play Ana's voice + playVoice(memoryData.audioClip); + + // 5. Clear blur after 2 seconds + setTimeout(() => { + clearBlur(duration: 2000ms); + }, 2000); + + // 6. Show dialogue + setTimeout(() => { + showDialogue({ + text: memoryData.caption, + speaker: "Ana", + duration: 4000ms + }); + }, 4000); + + // 7. Resume game + setTimeout(() => { + removeVignette(); + player.unfreeze(); + }, 8000); + } +} +``` + +--- + +## 🚀 **ASSETS TO GENERATE** + +### **Particle Sprites:** +- `sparkle_star.png` - 8x8px gold star +- `glow_particle.png` - 4x4px white glow +- `smoke_puff.png` - 16x16px gray smoke +- `water_drop.png` - 4x4px blue droplet +- `blood_splat.png` - 8x8px green splat (zombie blood) +- `coin_spin.png` - 8x8px gold coin + +### **VFX Animations:** +- `fish_jump.png` - 16x16px fish sprite +- `ripple.png` - 32x32px water ripple ring + +### **Audio:** +- `memory_echo.mp3` +- `flashback_theme.mp3` +- `ana_voice_01.mp3` through `ana_voice_10.mp3` +- `harvest_pop.mp3` +- `sparkle_ting.mp3` +- `water_splash.mp3` + +--- + +**Status:** 🟢 **READY FOR IMPLEMENTATION** +**Estimated Time:** 6-8 hours coding + 2 hours audio/visual assets +**Emotional Impact:** 🚀 **MASSIVE** - Game feels alive and responsive!