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:
445
docs/QUEST_MANIFEST.md
Normal file
445
docs/QUEST_MANIFEST.md
Normal 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
|
||||
@@ -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 |
|
||||
|
||||
539
docs/VFX_EFFECTS_SYSTEM.md
Normal file
539
docs/VFX_EFFECTS_SYSTEM.md
Normal 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!
|
||||
Reference in New Issue
Block a user