📊 FULL GAME PRODUCTION PLAN (76-99 hours, 2-4 weeks) 🎵 AUDIO (129 files total): - DEMO: 45 files (music + SFX + ambient + UI) - Faza 1: +60 files (biomes, animals, combat, crafting) - Faza 2: +24 files (town, NPCs, buildings) 🎮 MECHANICS (8 major systems): 1. Resource Logistics (8-10h) - Kai auto-pickup radius - Zombie Lumberjack (chops trees) - Zombie Carrier (transports to storage) - Storage building - Working Table crafting 2. HIPODEVIL666CITY Management (6-8h) - Neon population board (Total/F/NF) - Zombie Statistician (1 coin/day) - City Generator (electricity) - Power grid → lamps + UV lights 3. House Upgrades & Basement (5-6h) - Tent → Shack → House → +Basement - Illegal basement farming (Cannabis, Mushrooms) - UV lights = 2.3x faster growth - Raid risk mechanics 4. Procedural Mine (6-8h) - Infinite generation (new each visit) - Deeper floors = better ores - Iron, Coal, Blood Ore - Zombie land expansion 5. Visual Effects (4-5h) - 20px blur-to-clear intro - Vertex shader (hair/wheat sway) - Displacement shader (water ripples) 6. Controller Support (3-4h) - Full Xbox analog control - Rumble feedback - Button prompts 7. Parent Memories System (8-10h) ⭐ NEW! - 4 static memories (photos + narration) - 4 interactive flashbacks (playable) - Parent character sprites - Mini-games with emotional payoff 8. Early Access Features - Gronk auto-unlock (first 20 buyers) - Twitch tester keys 🎨 ASSETS NEEDED (~133 sprites): - Mechanics: 35 sprites - Buildings: 15 sprites - Mine: 8 sprites - Controller UI: 10 sprites - Parent Memories: 65 sprites (biggest addition!) 📅 TIMELINE: - Week 1: Audio + Core Mechanics - Week 2: Buildings + Visuals - Week 3: Parent Memories + Assets - Week 4: Polish + Launch ⚡ QUICK WIN (1 week MVP): 1. Audio (45 files) - Days 1-2 2. Auto-pickup + Zombies - Day 3 3. Storage + Crafting - Day 4 4. House upgrade - Day 5 5. Controller + Intro - Day 6-7 = Playable demo in 7 days! 🎯 PRIORITIES: 🔥 Critical: Audio, Resource system, Crafting, House 🟡 Important: City, Electric, Basement, Mine, Memories 🟢 Nice: Interactive memories, Faza 1 audio, Advanced polish Full breakdown with code examples, asset specs, and step-by-step guide!
1274 lines
30 KiB
Markdown
1274 lines
30 KiB
Markdown
# 🎯 ULTIMATE MASTER IMPLEMENTATION PLAN
|
||
## Complete Roadmap: DEMO + Faza 1 + Faza 2 (Audio + Mechanics + Features)
|
||
|
||
**Created:** January 9, 2026, 14:41 CET
|
||
**Purpose:** Complete implementation plan for playable game
|
||
**Includes:** Audio, Mechanics, Parent Memories, Assets
|
||
**Timeline:** 2-4 weeks to full Alpha v2.5
|
||
|
||
---
|
||
|
||
## 📊 EXECUTIVE SUMMARY
|
||
|
||
### **What Needs to Be Done:**
|
||
|
||
| Category | Items | Est. Time | Priority |
|
||
|----------|-------|-----------|----------|
|
||
| **Audio** | 129 files | 3-4 hours | 🔥 HIGH |
|
||
| **Core Mechanics** | 8 systems | 40-50 hours | 🔥 HIGH |
|
||
| **Parent Memories** | Story system | 8-10 hours | 🟡 MED |
|
||
| **Missing Assets** | ~150 sprites | 10-15 hours | 🟡 MED |
|
||
| **Polish & Testing** | QA + bugs | 15-20 hours | 🟢 LOW |
|
||
| **TOTAL** | - | **76-99 hours** | (~2-3 weeks) |
|
||
|
||
---
|
||
|
||
# 🎵 PART 1: AUDIO IMPLEMENTATION
|
||
|
||
## Phase 1: DEMO Audio (45 files) - 3-4 hours
|
||
|
||
### **Step 1: Acquire Audio (2-3 hours)**
|
||
✅ Download guide ready: `AUDIO_DOWNLOAD_QUICK_GUIDE.md`
|
||
|
||
**Tasks:**
|
||
- [ ] Convert 8 .wav music tracks to .ogg (15 min)
|
||
- [ ] Download Kenney packs (30 min)
|
||
- RPG Audio, Impact Sounds, Interface, Digital Audio
|
||
- [ ] Download Freesound.org specific sounds (1 hour)
|
||
- Farming, combat, zombies, animals
|
||
- [ ] Download OpenGameArt ambient loops (15 min)
|
||
- [ ] Organize into `/assets/audio/` structure (30 min)
|
||
|
||
### **Step 2: Integration (1 hour)**
|
||
|
||
**Tasks:**
|
||
- [ ] Test all 45 files load in Phaser
|
||
- [ ] Configure AudioManager.js
|
||
- [ ] Set up music transitions
|
||
- [ ] Test SFX triggers
|
||
- [ ] Volume balancing
|
||
|
||
**Result:** DEMO audio 100% functional ✅
|
||
|
||
---
|
||
|
||
## Phase 2: Faza 1 Audio (+60 files) - 2-3 hours
|
||
|
||
**When:** After implementing Faza 1 biomes/combat
|
||
|
||
**Tasks:**
|
||
- [ ] Download biome music (desert, swamp, cave, boss)
|
||
- [ ] Get animal sounds (10 farm animals)
|
||
- [ ] Get advanced combat SFX (15 files)
|
||
- [ ] Get crafting sounds (5 files)
|
||
- [ ] Get environment sounds (5 files)
|
||
- [ ] Integrate into AudioManager
|
||
|
||
---
|
||
|
||
## Phase 3: Faza 2 Audio (+24 files) - 1-2 hours
|
||
|
||
**When:** After implementing town restoration
|
||
|
||
**Tasks:**
|
||
- [ ] Download town music (busy, church, tavern)
|
||
- [ ] Get town SFX (bells, market, NPCs)
|
||
- [ ] Get building completion stingers
|
||
- [ ] Integrate into town systems
|
||
|
||
---
|
||
|
||
# 🎮 PART 2: CORE MECHANICS IMPLEMENTATION
|
||
|
||
## 🌲 MECHANIC 1: Resource Logistics & Automation (8-10 hours)
|
||
|
||
### **System Overview:**
|
||
Implement full resource gathering → storage → crafting pipeline
|
||
|
||
### **Components:**
|
||
|
||
#### **A. Kai Auto-Pickup System (2 hours)**
|
||
|
||
**Features:**
|
||
- [ ] Radius-based auto-collection (5-tile radius)
|
||
- [ ] Resources fly to inventory with animation
|
||
- [ ] Satisfying "pop" SFX on pickup
|
||
- [ ] UI counter updates
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/systems/ResourceAutoPickup.js
|
||
class ResourceAutoPickup {
|
||
constructor(player, radius = 5) {
|
||
this.player = player;
|
||
this.radius = radius * 32; // tiles to pixels
|
||
this.pickupDelay = 200; // ms between pickups
|
||
}
|
||
|
||
update() {
|
||
// Check for resources in radius
|
||
// Auto-collect with animation
|
||
// Update inventory
|
||
// Play SFX
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ✅ Have: Kai sprite, inventory UI
|
||
- ❌ Need: Pickup particle effect (1 sprite)
|
||
|
||
---
|
||
|
||
#### **B. Zombie Worker AI (4 hours)**
|
||
|
||
**Zombie Types:**
|
||
|
||
**1. Zombie Lumberjack (Gozdar)**
|
||
- [ ] Path to nearest tree
|
||
- [ ] Chop animation (use axe swing)
|
||
- [ ] Drop wood on ground
|
||
- [ ] Find next tree
|
||
|
||
**2. Zombie Carrier (Nosilec)**
|
||
- [ ] Detect items on ground
|
||
- [ ] Pick up item (carry animation)
|
||
- [ ] Path to storage
|
||
- [ ] Deposit item
|
||
- [ ] Return to patrol
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/entities/ZombieWorker.js
|
||
class ZombieWorker extends Phaser.GameObjects.Sprite {
|
||
constructor(scene, x, y, type) {
|
||
this.type = type; // 'lumberjack' or 'carrier'
|
||
this.state = 'idle'; // idle, working, carrying, depositing
|
||
this.assignedTask = null;
|
||
this.carryingItem = null;
|
||
}
|
||
|
||
update() {
|
||
switch(this.state) {
|
||
case 'idle': this.findWork(); break;
|
||
case 'working': this.doWork(); break;
|
||
case 'carrying': this.deliverItem(); break;
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ✅ Have: Zombie sprites (50 frames)
|
||
- ❌ Need: Carrying animation variant (8 frames)
|
||
- ❌ Need: Axe tool sprite for zombie (1 sprite)
|
||
|
||
---
|
||
|
||
#### **C. Storage Building (1 hour)**
|
||
|
||
**Features:**
|
||
- [ ] Small shed sprite (3x3 tiles)
|
||
- [ ] Capacity: 500 items (upgradable)
|
||
- [ ] Visual fill indicator
|
||
- [ ] Deposit/withdraw UI
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/buildings/Storage.js
|
||
class Storage extends Building {
|
||
constructor(scene, x, y) {
|
||
this.capacity = 500;
|
||
this.contents = new Map(); // resource -> count
|
||
this.fullness = 0; // 0-1 for visual
|
||
}
|
||
|
||
deposit(resource, amount) {
|
||
// Add to storage
|
||
// Update UI
|
||
// Play SFX
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ✅ Have: Building sprites from Faza 1 infrastructure
|
||
- ❌ Need: Small storage shed sprite (1 sprite)
|
||
|
||
---
|
||
|
||
#### **D. Working Table / Crafting (1 hour)**
|
||
|
||
**Features:**
|
||
- [ ] First buildable structure
|
||
- [ ] Opens crafting UI
|
||
- [ ] Recipes for basic tools
|
||
|
||
**Crafting Recipes:**
|
||
- Wooden Hoe: 10 wood
|
||
- Wooden Axe: 5 wood
|
||
- Wooden Pickaxe: 10 wood + 5 stone
|
||
- Watering Can: 10 wood + 5 iron
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/ui/CraftingUI.js
|
||
class CraftingUI {
|
||
constructor(scene) {
|
||
this.recipes = CRAFTING_RECIPES;
|
||
this.selectedRecipe = null;
|
||
}
|
||
|
||
canCraft(recipe) {
|
||
// Check if player has resources
|
||
return recipe.materials.every(mat =>
|
||
this.player.inventory.has(mat.id, mat.amount)
|
||
);
|
||
}
|
||
|
||
craft(recipe) {
|
||
// Deduct materials
|
||
// Create item
|
||
// Play animation + SFX
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ✅ Have: Tool sprites (8 tools)
|
||
- ❌ Need: Crafting table sprite (1 sprite)
|
||
- ❌ Need: Crafting UI panel (1 sprite)
|
||
|
||
---
|
||
|
||
## 🏙️ MECHANIC 2: HIPODEVIL666CITY Management (6-8 hours)
|
||
|
||
### **System Overview:**
|
||
Dynamic city with population tracking, electricity, and NPC workers
|
||
|
||
### **Components:**
|
||
|
||
#### **A. Neon Population Board (2 hours)**
|
||
|
||
**Features:**
|
||
- [ ] Neon noir aesthetic sign
|
||
- [ ] Real-time population counter
|
||
- [ ] Categories: Total, Functional, Non-functional
|
||
- [ ] Flicker effect for broken bulbs
|
||
|
||
**Display:**
|
||
```
|
||
╔═══════════════════════════════╗
|
||
║ HIPODEVIL666CITY POPULATION ║
|
||
║ ║
|
||
║ TOTAL: [###] citizens ║
|
||
║ F: [###] functional ║
|
||
║ NF: [###] non-functional║
|
||
╚═══════════════════════════════╝
|
||
```
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/entities/PopulationBoard.js
|
||
class PopulationBoard extends Phaser.GameObjects.Container {
|
||
constructor(scene, x, y) {
|
||
this.totalText = scene.add.text(x, y, '0', neonStyle);
|
||
this.functionalText = scene.add.text(x, y+20, '0', neonStyle);
|
||
this.nonFunctionalText = scene.add.text(x, y+40, '0', neonStyle);
|
||
this.needsUpdate = false;
|
||
}
|
||
|
||
update(cityData) {
|
||
if (!cityData.statisticianPaid) {
|
||
this.needsUpdate = true;
|
||
return; // No updates without payment!
|
||
}
|
||
this.refresh(cityData);
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Neon board background (1 sprite)
|
||
- ❌ Need: Neon number sprites (0-9, 10 sprites)
|
||
- ✅ Have: Neon glow shader (can create)
|
||
|
||
---
|
||
|
||
#### **B. Zombie Statistician NPC (2 hours)**
|
||
|
||
**Features:**
|
||
- [ ] Office worker zombie
|
||
- [ ] Updates board daily
|
||
- [ ] Requires 1 Coin/day payment
|
||
- [ ] Grumbles if not paid
|
||
- [ ] Board freezes without updates
|
||
|
||
**Dialogue:**
|
||
- Paid: "Numbers are current, boss!"
|
||
- Unpaid: "No pay, no work. Board stays old."
|
||
- Hire: "I'll keep your stats updated. 1 coin per day."
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/npcs/ZombieStatistician.js
|
||
class ZombieStatistician extends NPC {
|
||
constructor(scene, x, y) {
|
||
this.salaryPerDay = 1; // coins
|
||
this.lastPaidDay = 0;
|
||
this.isPaid = false;
|
||
}
|
||
|
||
dailyUpdate(currentDay) {
|
||
if (this.lastPaidDay < currentDay) {
|
||
this.isPaid = false;
|
||
this.showUnhappy();
|
||
}
|
||
}
|
||
|
||
payWage() {
|
||
if (player.coins >= this.salaryPerDay) {
|
||
player.coins -= this.salaryPerDay;
|
||
this.isPaid = true;
|
||
this.updateBoard();
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Office zombie sprite (11 sprites: idle, walk, action, portrait)
|
||
- ✅ Have: Zombie base (can recolor/add suit)
|
||
|
||
---
|
||
|
||
#### **C. City Generator (Electric System) (2-3 hours)**
|
||
|
||
**Features:**
|
||
- [ ] Central power building
|
||
- [ ] Powers street lamps
|
||
- [ ] Powers basement UV lights
|
||
- [ ] Requires fuel (coal/oil)
|
||
- [ ] Visual: Lights on/off based on power
|
||
|
||
**Power Grid:**
|
||
```
|
||
Generator (Fuel) → Power Lines → Consumers
|
||
├─ Street Lamps
|
||
├─ UV Lights (basement)
|
||
└─ Future: Other buildings
|
||
```
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/systems/ElectricitySystem.js
|
||
class ElectricitySystem {
|
||
constructor(scene) {
|
||
this.generator = null;
|
||
this.powerGrid = [];
|
||
this.isPowered = false;
|
||
}
|
||
|
||
update() {
|
||
if (!this.generator.hasFuel()) {
|
||
this.isPowered = false;
|
||
this.turnOffAll();
|
||
return;
|
||
}
|
||
|
||
this.generator.consumeFuel();
|
||
this.isPowered = true;
|
||
this.powerAllDevices();
|
||
}
|
||
|
||
powerAllDevices() {
|
||
this.powerGrid.forEach(device => {
|
||
device.turnOn();
|
||
device.playHumSound();
|
||
});
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Generator building sprite (1 sprite)
|
||
- ❌ Need: Power line poles (2 variations)
|
||
- ✅ Have: Street lamp sprites (from Faza 2)
|
||
- ❌ Need: UV light strip for basement (1 sprite)
|
||
|
||
---
|
||
|
||
## 🏠 MECHANIC 3: Building Upgrades & Basement Economy (5-6 hours)
|
||
|
||
### **System Overview:**
|
||
House progression unlocks hidden basement farming
|
||
|
||
### **Components:**
|
||
|
||
#### **A. House Upgrade System (2 hours)**
|
||
|
||
**Progression:**
|
||
1. Tent (starter)
|
||
2. Wooden Shack (10 wood, 5 stone)
|
||
3. Small House (50 wood, 20 stone, 10 iron)
|
||
4. House with Basement (100 wood, 50 stone, 25 iron, 10 glass)
|
||
|
||
**Features:**
|
||
- [ ] Visual upgrade on map
|
||
- [ ] Interior changes
|
||
- [ ] Basement unlocks at level 4
|
||
- [ ] Ladder/stairs to basement
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/buildings/PlayerHouse.js
|
||
class PlayerHouse extends Building {
|
||
constructor(scene, x, y) {
|
||
this.level = 1; // Tent
|
||
this.hasBasement = false;
|
||
}
|
||
|
||
upgrade() {
|
||
if (!this.canAffordUpgrade()) return false;
|
||
|
||
this.level++;
|
||
this.updateSprite();
|
||
|
||
if (this.level >= 4) {
|
||
this.unlockBasement();
|
||
}
|
||
return true;
|
||
}
|
||
|
||
unlockBasement() {
|
||
this.hasBasement = true;
|
||
this.createBasementEntrance();
|
||
// Show tutorial about basement farming
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Tent sprite (1 sprite)
|
||
- ❌ Need: Wooden shack sprite (1 sprite)
|
||
- ✅ Have: House sprites (from Kai house references)
|
||
- ❌ Need: Basement entrance/ladder (1 sprite)
|
||
|
||
---
|
||
|
||
#### **B. Basement Farming System (3-4 hours)**
|
||
|
||
**Features:**
|
||
- [ ] Hidden underground room
|
||
- [ ] Grow illegal crops (Cannabis, Magic Mushrooms)
|
||
- [ ] UV lights speed up growth (if powered)
|
||
- [ ] Secret income source
|
||
- [ ] Risk: Raids can discover it
|
||
|
||
**Crop Growth:**
|
||
- Without UV: 7 days
|
||
- With UV (powered): 3 days
|
||
- Cannabis: High value (50 coins/harvest)
|
||
- Magic Mushrooms: Very high value (100 coins/harvest)
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/systems/BasementFarm.js
|
||
class BasementFarm {
|
||
constructor(scene) {
|
||
this.plots = []; // max 10 plots
|
||
this.uvLights = [];
|
||
this.isPowered = false;
|
||
}
|
||
|
||
update(delta) {
|
||
if (!this.isPowered) {
|
||
// Normal growth rate
|
||
this.growCrops(delta, 1.0);
|
||
} else {
|
||
// 2.3x faster with UV
|
||
this.growCrops(delta, 2.3);
|
||
this.playUVHumSound();
|
||
}
|
||
}
|
||
|
||
checkForRaid() {
|
||
if (this.hasVisibleCrops() && Math.random() < 0.01) {
|
||
// Guards might discover!
|
||
triggerRaidEvent();
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ✅ Have: Cannabis growth sprites (6 stages)
|
||
- ❌ Need: Magic Mushroom growth sprites (6 stages)
|
||
- ❌ Need: Basement room tile set (floor, walls)
|
||
- ❌ Need: UV light fixture sprite (1 sprite)
|
||
- ✅ Have: Crop plot tiles
|
||
|
||
---
|
||
|
||
## ⛏️ MECHANIC 4: Procedural Mine & Land Expansion (6-8 hours)
|
||
|
||
### **System Overview:**
|
||
Infinite procedural mine + zombie-powered land clearing
|
||
|
||
### **Components:**
|
||
|
||
#### **A. Procedural Mine Generation (4 hours)**
|
||
|
||
**Features:**
|
||
- [ ] New layout each visit
|
||
- [ ] Multiple floors (deeper = better ores)
|
||
- [ ] Resources: Iron, Coal, Blood Ore
|
||
- [ ] Enemies increase with depth
|
||
- [ ] Ladder to go deeper
|
||
|
||
**Generation Algorithm:**
|
||
```javascript
|
||
// src/procedural/MineGenerator.js
|
||
class MineGenerator {
|
||
generate(floor, seed) {
|
||
const rng = new SeededRandom(seed + floor);
|
||
|
||
// Generate cave layout
|
||
const layout = this.generateCaveLayout(rng);
|
||
|
||
// Place resources based on floor
|
||
const oreSpawns = {
|
||
iron: floor >= 1 ? rng.int(10, 20) : 0,
|
||
coal: floor >= 2 ? rng.int(5, 15) : 0,
|
||
bloodOre: floor >= 5 ? rng.int(1, 5) : 0
|
||
};
|
||
|
||
this.placeOres(layout, oreSpawns, rng);
|
||
|
||
// Place enemies (more on deeper floors)
|
||
const enemyCount = 5 + (floor * 2);
|
||
this.placeEnemies(layout, enemyCount, rng);
|
||
|
||
return layout;
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Cave wall tiles (4 variations)
|
||
- ❌ Need: Cave floor tiles (3 variations)
|
||
- ❌ Need: Iron ore sprite (1 sprite)
|
||
- ❌ Need: Coal ore sprite (1 sprite)
|
||
- ❌ Need: Blood ore sprite (1 sprite, glowing red)
|
||
- ❌ Need: Ladder sprite (1 sprite)
|
||
- ✅ Have: Mining animation (player swing pickaxe)
|
||
|
||
---
|
||
|
||
#### **B. Land Expansion System (2-3 hours)**
|
||
|
||
**Features:**
|
||
- [ ] Zombies clear ruins/trees on command
|
||
- [ ] Expands usable farm area
|
||
- [ ] Costs resources to assign zombies
|
||
- [ ] Visual progress (debris → clear land)
|
||
|
||
**Command System:**
|
||
```javascript
|
||
// src/systems/LandExpansion.js
|
||
class LandExpansion {
|
||
constructor(scene) {
|
||
this.clearableObjects = []; // trees, ruins, rocks
|
||
this.activeWorkers = [];
|
||
}
|
||
|
||
assignClearingCrew(area) {
|
||
// Cost: 3 zombies + 10 coins
|
||
if (!player.hasZombies(3)) return false;
|
||
if (!player.hasCoins(10)) return false;
|
||
|
||
const crew = player.assignZombies(3);
|
||
crew.forEach(zombie => {
|
||
zombie.startClearing(area);
|
||
});
|
||
|
||
this.trackProgress(area);
|
||
}
|
||
|
||
onClearComplete(area) {
|
||
// Convert to usable farmland
|
||
this.expandFarmBoundary(area);
|
||
returnZombies();
|
||
}
|
||
}
|
||
```
|
||
|
||
**Implementation Steps:**
|
||
1. Player clicks "Expand" button
|
||
2. Draws area to clear
|
||
3. Assigns zombie crew
|
||
4. Zombies path to debris
|
||
5. Debris removal animation
|
||
6. Farmland tile appears
|
||
7. Boundary expands
|
||
|
||
**Assets Needed:**
|
||
- ✅ Have: Zombie worker sprites
|
||
- ✅ Have: Ruin/debris sprites (from Faza 2 buildings)
|
||
- ❌ Need: Clearing progress overlay (1 sprite)
|
||
|
||
---
|
||
|
||
## 🎨 MECHANIC 5: Visual Effects & Shaders (4-5 hours)
|
||
|
||
### **System Overview:**
|
||
Professional visual polish
|
||
|
||
### **Components:**
|
||
|
||
#### **A. 20px Blur Intro (1 hour)**
|
||
|
||
**Features:**
|
||
- [ ] Game starts with 20px blur
|
||
- [ ] Gradually clears over 5 seconds
|
||
- [ ] Kai waking up dialogue
|
||
- [ ] First-time player experience
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/scenes/IntroScene.js
|
||
class IntroScene extends Phaser.Scene {
|
||
create() {
|
||
// Start with blur
|
||
this.cameras.main.setPostPipeline('BlurPostFX');
|
||
this.cameras.main.getPostPipeline('BlurPostFX').blurStrength = 20;
|
||
|
||
// Tween to clear
|
||
this.tweens.add({
|
||
targets: this.cameras.main.getPostPipeline('BlurPostFX'),
|
||
blurStrength: 0,
|
||
duration: 5000,
|
||
ease: 'Sine.easeOut',
|
||
onComplete: () => {
|
||
this.startDialogue("Where... where am I?");
|
||
}
|
||
});
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ✅ Have: Kai sprite
|
||
- ✅ Have: Dialogue system
|
||
- ❌ No new assets needed
|
||
|
||
---
|
||
|
||
#### **B. Physics Shaders (2-3 hours)**
|
||
|
||
**Shaders:**
|
||
|
||
**1. Vertex Shader (Hair/Wheat Sway)**
|
||
- [ ] Kai's dreads sway with movement
|
||
- [ ] Wheat field waves in wind
|
||
- [ ] Gentle, natural movement
|
||
|
||
```glsl
|
||
// vertex_sway.glsl
|
||
uniform float time;
|
||
uniform float windStrength;
|
||
|
||
void main() {
|
||
vec4 pos = gl_Position;
|
||
|
||
// Sway based on vertex height + time
|
||
float sway = sin(time + pos.y) * windStrength;
|
||
pos.x += sway;
|
||
|
||
gl_Position = pos;
|
||
}
|
||
```
|
||
|
||
**2. Displacement Shader (Water)**
|
||
- [ ] Water surface ripples
|
||
- [ ] Reflects sky
|
||
- [ ] Interactive splashes
|
||
|
||
```glsl
|
||
// water_displacement.glsl
|
||
uniform sampler2D uDisplacementMap;
|
||
uniform float time;
|
||
|
||
void main() {
|
||
vec2 uv = gl_FragCoord.xy / resolution.xy;
|
||
|
||
// Sample displacement
|
||
float displacement = texture2D(uDisplacementMap, uv + time).r;
|
||
|
||
// Apply to water surface
|
||
vec2 distortedUV = uv + (displacement * 0.05);
|
||
vec3 color = texture2D(uWaterTexture, distortedUV).rgb;
|
||
|
||
gl_FragColor = vec4(color, 1.0);
|
||
}
|
||
```
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/shaders/ShaderManager.js
|
||
class ShaderManager {
|
||
constructor(scene) {
|
||
this.vertexShader = this.loadVertexShader();
|
||
this.waterShader = this.loadWaterShader();
|
||
}
|
||
|
||
applyToSprite(sprite, shaderType) {
|
||
const pipeline = scene.renderer.pipelines.add(shaderType, shader);
|
||
sprite.setPipeline(pipeline);
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Displacement map texture (1 grayscale image)
|
||
- ✅ Have: Wheat/water sprites
|
||
|
||
---
|
||
|
||
## 🎮 MECHANIC 6: Xbox Controller Support (3-4 hours)
|
||
|
||
### **System Overview:**
|
||
Full analog controller support with rumble
|
||
|
||
### **Features:**
|
||
|
||
**Button Layout:**
|
||
- **Left Stick:** Move Kai
|
||
- **Right Stick:** Camera pan
|
||
- **A Button:** Interact / Confirm
|
||
- **B Button:** Cancel / Back
|
||
- **X Button:** Command zombies
|
||
- **Y Button:** Quick menu
|
||
- **LB/RB:** Cycle tools
|
||
- **LT/RT:** Sprint / Sneak
|
||
- **D-Pad:** Quick inventory
|
||
- **Start:** Pause menu
|
||
- **Back:** Map
|
||
|
||
**Rumble Events:**
|
||
- Light rumble: Harvest crop
|
||
- Medium rumble: Zombie attack
|
||
- Heavy rumble: Explosion/death
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/input/GamepadManager.js
|
||
class GamepadManager {
|
||
constructor(scene) {
|
||
this.gamepad = scene.input.gamepad.getPad(0);
|
||
this.vibrationEnabled = true;
|
||
}
|
||
|
||
update() {
|
||
if (!this.gamepad) return;
|
||
|
||
// Movement
|
||
const leftStick = {
|
||
x: this.gamepad.leftStick.x,
|
||
y: this.gamepad.leftStick.y
|
||
};
|
||
|
||
if (Math.abs(leftStick.x) > 0.1 || Math.abs(leftStick.y) > 0.1) {
|
||
player.move(leftStick.x, leftStick.y);
|
||
}
|
||
|
||
// Buttons
|
||
if (this.gamepad.A) this.handleInteract();
|
||
if (this.gamepad.X) this.handleCommandZombies();
|
||
if (this.gamepad.LB) this.cycleToolPrevious();
|
||
if (this.gamepad.RB) this.cycleToolNext();
|
||
}
|
||
|
||
rumble(intensity, duration) {
|
||
if (!this.vibrationEnabled) return;
|
||
this.gamepad.vibration.playEffect('dual-rumble', {
|
||
startDelay: 0,
|
||
duration: duration,
|
||
weakMagnitude: intensity * 0.5,
|
||
strongMagnitude: intensity
|
||
});
|
||
}
|
||
}
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Controller button prompt sprites (A, B, X, Y, etc.) (10 sprites)
|
||
- ❌ No new game assets needed
|
||
|
||
---
|
||
|
||
## 💬 MECHANIC 7: Parent Memories System (8-10 hours)
|
||
|
||
### **System Overview:**
|
||
Flashback sequences showing Kai and Ana's parents before apocalypse
|
||
|
||
### **Story Integration:**
|
||
|
||
**Trigger Points:**
|
||
1. **Kai's Dad Memory:** Find his old toolbox in ruins
|
||
2. **Kai's Mom Memory:** Discover family photo in debris
|
||
3. **Ana's Dad Memory:** Uncover his diary/research notes
|
||
4. **Ana's Mom Memory:** Find her pendant in cemetery
|
||
|
||
**Memory Types:**
|
||
|
||
#### **A. Static Memories (4 hours)**
|
||
|
||
**Sepia-toned photo flashbacks:**
|
||
- [ ] Family photo analysis
|
||
- [ ] Kai examining old photo
|
||
- [ ] Ana's voice-over narration
|
||
- [ ] Emotional music
|
||
- [ ] Returns to present
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/systems/MemorySystem.js
|
||
class MemorySystem {
|
||
constructor(scene) {
|
||
this.memories = [];
|
||
this.activeMemory = null;
|
||
}
|
||
|
||
triggerMemory(memoryId) {
|
||
const memory = MEMORIES[memoryId];
|
||
|
||
// Fade to sepia
|
||
this.scene.cameras.main.fade(1000, 139, 121, 94);
|
||
|
||
// Show memory image
|
||
this.showMemoryImage(memory.photo);
|
||
|
||
// Play narration
|
||
this.playNarration(memory.audioFile);
|
||
|
||
// Wait for completion
|
||
this.scene.time.delayedCall(memory.duration, () => {
|
||
this.endMemory();
|
||
});
|
||
}
|
||
|
||
endMemory() {
|
||
// Fade back to present
|
||
this.scene.cameras.main.fade(1000, 0, 0, 0, true);
|
||
|
||
// Mark as viewed
|
||
this.activeMemory.viewed = true;
|
||
|
||
// Grant emotional reward (optional stat boost)
|
||
player.addMoraleBoost(10);
|
||
}
|
||
}
|
||
```
|
||
|
||
**Memory Data:**
|
||
```javascript
|
||
const MEMORIES = {
|
||
kai_dad_toolbox: {
|
||
id: 'kai_dad_toolbox',
|
||
photo: 'kai_dad_workshop.png',
|
||
audioFile: 'memory_kai_dad.mp3',
|
||
duration: 15000, // 15 seconds
|
||
narration: {
|
||
en: "Dad always said... 'Take care of your tools, they'll take care of you.'",
|
||
sl: "Oče je vedno govoril... 'Skrbi za svoja orodja, skrbela bodo zate.'"
|
||
}
|
||
},
|
||
|
||
ana_mom_pendant: {
|
||
id: 'ana_mom_pendant',
|
||
photo: 'ana_mom_cemetery.png',
|
||
audioFile: 'memory_ana_mom.mp3',
|
||
duration: 20000,
|
||
narration: {
|
||
en: "Mom... she was the strongest person I knew. Until...",
|
||
sl: "Mama... bila je najmočnejša oseba, ki sem jo poznal. Dokler..."
|
||
}
|
||
}
|
||
|
||
// ... more memories
|
||
};
|
||
```
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Parent character sprites (4 characters × 2 poses = 8 sprites)
|
||
- Kai's Dad (workshop clothes)
|
||
- Kai's Mom (casual clothes)
|
||
- Ana's Dad (scientist coat)
|
||
- Ana's Mom (elegant dress)
|
||
- ❌ Need: Sepia-toned photo frames (4 images)
|
||
- ❌ Need: Memory trigger items (4 sprites):
|
||
- Old toolbox
|
||
- Family photo frame
|
||
- Research diary
|
||
- Silver pendant
|
||
|
||
---
|
||
|
||
#### **B. Interactive Memories (4-6 hours)**
|
||
|
||
**Playable flashback sequences:**
|
||
- [ ] Control Kai as child
|
||
- [ ] Learn farming from dad
|
||
- [ ] Simple mini-game (plant seeds)
|
||
- [ ] Emotional payoff
|
||
|
||
**Example: "Dad's Lesson" Memory**
|
||
|
||
**Sequence:**
|
||
1. Flashback: 10 years before apocalypse
|
||
2. Young Kai (8 years old) with dad in garden
|
||
3. Dad teaches how to plant wheat
|
||
4. Mini-game: Plant 5 seeds correctly
|
||
5. Dad's praise: "Good job, son! You're a natural farmer."
|
||
6. Flash forward to present: Kai plants same crop, tears in eyes
|
||
7. Achievement unlocked: "Father's Legacy"
|
||
|
||
**Implementation:**
|
||
```javascript
|
||
// src/scenes/MemoryFlashbackScene.js
|
||
class MemoryFlashbackScene extends Phaser.Scene {
|
||
create(data) {
|
||
const memory = data.memoryConfig;
|
||
|
||
// Set up flashback environment
|
||
this.createFlashbackWorld(memory.setting);
|
||
|
||
// Spawn young Kai sprite
|
||
this.youngKai = new YoungKai(this, 400, 300);
|
||
|
||
// Spawn parent NPC
|
||
this.parent = new ParentNPC(this, 450, 300, memory.parentId);
|
||
|
||
// Start dialogue
|
||
this.startDialogue(memory.dialogue);
|
||
|
||
// Setup mini-game
|
||
this.setupMiniGame(memory.miniGame);
|
||
}
|
||
|
||
onMiniGameComplete() {
|
||
// Parent praises
|
||
this.parent.speak("Proud of you, kid!");
|
||
|
||
// Grant reward
|
||
player.unlockSkill(memory.rewardSkill);
|
||
|
||
// Return to present
|
||
this.scene.start('GameScene');
|
||
}
|
||
}
|
||
```
|
||
|
||
**Mini-Game Examples:**
|
||
|
||
**1. Planting Seeds (Dad's Lesson)**
|
||
- Plant 5 wheat seeds in correct spots
|
||
- Dad guides: "Not too close together!"
|
||
- Success: +5% farming speed bonus
|
||
|
||
**2. First Aid (Mom's Lesson)**
|
||
- Bandage injured animal
|
||
- Follow mom's instructions
|
||
- Success: +10 max health
|
||
|
||
**3. Lab Safety (Ana's Dad)**
|
||
- Identify dangerous chemicals
|
||
- Ana learns as child
|
||
- Success: Unlock alchemy recipes
|
||
|
||
**4. Cooking (Ana's Mom)**
|
||
- Follow recipe steps
|
||
- Make family meal
|
||
- Success: +20% food effectiveness
|
||
|
||
**Assets Needed:**
|
||
- ❌ Need: Young Kai sprite (chibi version, 11 sprites)
|
||
- ❌ Need: Young Ana sprite (chibi version, 11 sprites)
|
||
- ❌ Need: Parent NPC full sprites (4 parents × 11 sprites = 44 sprites)
|
||
- ❌ Need: Flashback environment tiles (garden, kitchen, lab, cemetery)
|
||
- ❌ Need: Mini-game UI elements (5-10 sprites)
|
||
|
||
---
|
||
|
||
## 📦 PART 3: MISSING ASSETS SUMMARY
|
||
|
||
### **Audio Assets:**
|
||
- ✅ Plan complete: `AUDIO_DOWNLOAD_QUICK_GUIDE.md`
|
||
- Total: 129 files (45 DEMO + 60 Faza 1 + 24 Faza 2)
|
||
|
||
### **Visual Assets Needed:**
|
||
|
||
#### **Mechanics Assets (35 sprites):**
|
||
- [ ] Pickup particle effect (1)
|
||
- [ ] Zombie carrying animation variant (8)
|
||
- [ ] Zombie with axe sprite (1)
|
||
- [ ] Small storage shed (1)
|
||
- [ ] Crafting table (1)
|
||
- [ ] Crafting UI panel (1)
|
||
- [ ] Neon population board (1)
|
||
- [ ] Neon number sprites 0-9 (10)
|
||
- [ ] Office zombie sprite set (11)
|
||
|
||
#### **Building Assets (15 sprites):**
|
||
- [ ] Generator building (1)
|
||
- [ ] Power line poles (2)
|
||
- [ ] UV light strip (1)
|
||
- [ ] Tent sprite (1)
|
||
- [ ] Wooden shack (1)
|
||
- [ ] Basement entrance/ladder (1)
|
||
- [ ] Magic Mushroom growth cycle (6)
|
||
- [ ] Basement room tileset (2)
|
||
- [ ] UV light fixture (1)
|
||
|
||
#### **Mine Assets (8 sprites):**
|
||
- [ ] Cave wall tiles (4)
|
||
- [ ] Cave floor tiles (3)
|
||
- [ ] Ladder sprite (1)
|
||
- [ ] Iron ore sprite (1)
|
||
- [ ] Coal ore sprite (1)
|
||
- [ ] Blood ore sprite (1)
|
||
- [ ] Clearing progress overlay (1)
|
||
|
||
#### **Parent Memory Assets (65 sprites):**
|
||
- [ ] Parent character designs (8)
|
||
- [ ] Sepia photo frames (4)
|
||
- [ ] Memory trigger items (4)
|
||
- [ ] Young Kai chibi sprites (11)
|
||
- [ ] Young Ana chibi sprites (11)
|
||
- [ ] Parent NPC full sets (44)
|
||
- [ ] Flashback environment tiles (varies)
|
||
- [ ] Mini-game UI elements (10)
|
||
|
||
#### **Controller Assets (10 sprites):**
|
||
- [ ] Xbox button prompts A, B, X, Y, LB, RB, LT, RT, Start, Back (10)
|
||
|
||
**TOTAL NEW ASSETS NEEDED: ~133 sprites**
|
||
|
||
---
|
||
|
||
## 📅 IMPLEMENTATION TIMELINE
|
||
|
||
### **Week 1: Audio + Core Mechanics**
|
||
|
||
**Days 1-2: Audio Setup (6-8 hours)**
|
||
- Acquire DEMO audio (45 files)
|
||
- Integrate into Phaser
|
||
- Test all SFX/music
|
||
- Volume balancing
|
||
|
||
**Days 3-4: Resource Logistics (10-12 hours)**
|
||
- Kai auto-pickup system
|
||
- Zombie worker AI (lumberjack + carrier)
|
||
- Storage building
|
||
- Working table crafting
|
||
|
||
**Days 5-7: City Management (12-15 hours)**
|
||
- Population board
|
||
- Zombie statistician NPC
|
||
- Electric generator system
|
||
- Power grid + lights
|
||
|
||
---
|
||
|
||
### **Week 2: Buildings + Visuals**
|
||
|
||
**Days 8-10: House & Basement (10-12 hours)**
|
||
- House upgrade progression
|
||
- Basement unlock
|
||
- Basement farming system
|
||
- UV light mechanics
|
||
|
||
**Days 11-12: Mine System (8-10 hours)**
|
||
- Procedural generation
|
||
- Ore placement
|
||
- Mining mechanics
|
||
- Land expansion zombies
|
||
|
||
**Days 13-14: Visual Polish (6-8 hours)**
|
||
- 20px blur intro
|
||
- Vertex shader (hair/wheat)
|
||
- Displacement shader (water)
|
||
- Controller support
|
||
|
||
---
|
||
|
||
### **Week 3: Parent Memories + Assets**
|
||
|
||
**Days 15-17: Generate Assets (12-15 hours)**
|
||
- Mechanics sprites (35)
|
||
- Building sprites (15)
|
||
- Mine sprites (8)
|
||
- Controller UI (10)
|
||
|
||
**Days 18-20: Memory System (12-15 hours)**
|
||
- Static memory implementation
|
||
- Parent sprites (65 total)
|
||
- Interactive flashbacks
|
||
- Mini-games
|
||
|
||
**Day 21: Integration Testing**
|
||
- Test all systems together
|
||
- Bug fixes
|
||
- Performance optimization
|
||
|
||
---
|
||
|
||
### **Week 4: Polish & Launch**
|
||
|
||
**Days 22-24: Final Polish (10-15 hours)**
|
||
- UI/UX improvements
|
||
- Tutorial sequences
|
||
- Balance testing
|
||
- Achievement system
|
||
|
||
**Days 25-26: QA Testing (8-10 hours)**
|
||
- Full gameplay test
|
||
- Bug hunt
|
||
- Performance profiling
|
||
- Controller testing
|
||
|
||
**Days 27-28: Launch Prep (6-8 hours)**
|
||
- Documentation
|
||
- Early Access setup (Gronk for first 20)
|
||
- Twitch tester keys
|
||
- Marketing materials
|
||
|
||
---
|
||
|
||
## 🎯 PRIORITY LEVELS
|
||
|
||
### **🔥 CRITICAL (Must have for playable demo):**
|
||
1. ✅ Audio system (45 DEMO files)
|
||
2. ✅ Resource auto-pickup
|
||
3. ✅ Zombie workers
|
||
4. ✅ Storage building
|
||
5. ✅ Crafting table
|
||
6. ✅ House upgrades
|
||
7. ✅ Basic controller support
|
||
|
||
### **🟡 IMPORTANT (Adds depth):**
|
||
1. ✅ Population board
|
||
2. ✅ Electric system
|
||
3. ✅ Basement farming
|
||
4. ✅ Procedural mine
|
||
5. ✅ Parent memories (static)
|
||
6. ✅ Visual shaders
|
||
|
||
### **🟢 NICE TO HAVE (Polish):**
|
||
1. ⚪ Interactive memories with mini-games
|
||
2. ⚪ Full Faza 1 audio (+60 files)
|
||
3. ⚪ Advanced rumble effects
|
||
4. ⚪ Land expansion visuals
|
||
5. ⚪ Achievement system
|
||
|
||
---
|
||
|
||
## ✅ COMPLETION CHECKLIST
|
||
|
||
### **DEMO Readiness:**
|
||
- [ ] Audio: 45 files integrated
|
||
- [ ] Kai auto-pickup works
|
||
- [ ] Zombie workers functional
|
||
- [ ] Storage + crafting implemented
|
||
- [ ] House can be upgraded
|
||
- [ ] Controller support basic
|
||
- [ ] 20px blur intro
|
||
- **= Playable demo ready!**
|
||
|
||
### **Faza 1 Readiness:**
|
||
- [ ] Population board live
|
||
- [ ] Electric system working
|
||
- [ ] Basement farming complete
|
||
- [ ] Procedural mine playable
|
||
- [ ] Parent static memories (4)
|
||
- [ ] Faza 1 audio (+60 files)
|
||
- **= Full Alpha v2.5!**
|
||
|
||
### **Faza 2 Readiness:**
|
||
- [ ] Town restoration mechanics
|
||
- [ ] NPC full integration
|
||
- [ ] Faza 2 audio (+24 files)
|
||
- [ ] Interactive parent memories
|
||
- [ ] Achievement system
|
||
- **= Complete experience!**
|
||
|
||
---
|
||
|
||
## 💡 QUICK WIN PATH (Minimal Viable Product)
|
||
|
||
**If time is limited, implement THIS FIRST (1 week):**
|
||
|
||
**Day 1-2: Audio (45 files)**
|
||
**Day 3: Kai auto-pickup + Zombie lumberjack**
|
||
**Day 4: Storage building**
|
||
**Day 5: Crafting table**
|
||
**Day 6: House upgrade to level 4**
|
||
**Day 7: Controller support + blur intro**
|
||
|
||
**= PLAYABLE DEMO in 1 week!** 🚀
|
||
|
||
Then add:
|
||
- Week 2: City management + basement
|
||
- Week 3: Mine + parent memories
|
||
- Week 4: Polish + launch
|
||
|
||
---
|
||
|
||
## 📊 RESOURCE REQUIREMENTS
|
||
|
||
### **Development Time:**
|
||
- **Minimum:** 76 hours (~2 weeks full-time)
|
||
- **Recommended:** 99 hours (~2.5 weeks with polish)
|
||
- **Maximum:** 120 hours (3 weeks with full features)
|
||
|
||
### **Asset Generation:**
|
||
- Audio: 129 files (3-4 hours to acquire)
|
||
- Visual: ~133 new sprites (10-15 hours to generate)
|
||
- Total asset time: ~15-20 hours
|
||
|
||
### **Team Size:**
|
||
- 1 developer: 3-4 weeks
|
||
- 2 developers: 2 weeks
|
||
- 3 developers: 1.5 weeks
|
||
|
||
---
|
||
|
||
## 🎉 FINAL DELIVERABLE
|
||
|
||
**Alpha v2.5 "HIPODEVIL666CITY" Features:**
|
||
|
||
✅ Complete DEMO audio (45 files)
|
||
✅ Resource logistics automation
|
||
✅ Zombie worker AI
|
||
✅ City management systems
|
||
✅ Dynamic population tracking
|
||
✅ Electric power grid
|
||
✅ House progression & basement
|
||
✅ Underground illegal farming
|
||
✅ Procedural infinite mine
|
||
✅ Land expansion mechanics
|
||
✅ Parent memory story system
|
||
✅ 20px blur intro
|
||
✅ Hair/wheat/water shaders
|
||
✅ Xbox controller support with rumble
|
||
✅ Early Access Gronk reward
|
||
|
||
**= Complete, polished, playable game!** 🎮🎉
|
||
|
||
---
|
||
|
||
**Status:** ✅ **ULTIMATE MASTER PLAN COMPLETE!**
|
||
**Next Step:** Choose starting point or begin audio acquisition!
|
||
**Estimated Completion:** 2-4 weeks to full Alpha v2.5! 🚀
|