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

This commit is contained in:
2026-01-05 11:18:24 +01:00
parent 879b029f4c
commit 4fa69e35ea
3 changed files with 1027 additions and 0 deletions

445
docs/QUEST_MANIFEST.md Normal file
View File

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

View File

@@ -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** ### **🎨 Visual Assets**
| Kategorija | Naloga | Prioriteta | Status | | Kategorija | Naloga | Prioriteta | Status |

539
docs/VFX_EFFECTS_SYSTEM.md Normal file
View File

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