diff --git a/TASKS.md b/TASKS.md index a324c65..d8c9f37 100644 --- a/TASKS.md +++ b/TASKS.md @@ -230,10 +230,203 @@ Implementacija jedrnih mehanik iz novega koncepta "Krvava Žetev". - [x] Reputation System za Mutante (Dobri/Zlobni). ## 🌡️ Phase 13: Elements & Survival (Hardcore) -- [ ] **Weather System v2.0** - - [ ] **Letni Časi:** Zima (Sneg, Mraz), Poletje (Vročina, Suša). - - [ ] **Temperature Logic:** Če `Temp < 0` in nimaš `WinterCoat` -> HP pada. - - [ ] **Rastlinjak (Greenhouse):** Crafting Stekla (Mivka + Peč). Omogoča rast pozimi. +- [x] **Weather System v2.0** + - [x] **Letni Časi:** Zima (Sneg, Mraz), Poletje (Vročina, Suša). + - [x] **Temperature Logic:** Če `Temp < 0` in nimaš `WinterCoat` -> HP pada. + - [x] **Rastlinjak (Greenhouse):** Crafting Stekla (Mivka + Peč). Omogoča rast pozimi. +- [ ] **Localization & Platforms** + - [ ] JSON prevodi (SLO, EN, DE, IT, CN). + - [ ] Language Selector v meniju. + - [ ] **Steam Integration**: Achievements & Cloud Save. +- [ ] **Entities & Items** + - [ ] **Playtime Tracker**: Beleženje ur igranja (Persistent Stats). + - [ ] **Osel (Donkey):** Jahanje in Inventory. + - [ ] **Jablana (Apple Tree):** Trajnica, daje pridelek jeseni. + - [x] Planting seeds + - [x] Growth Stages (Time-based growth) + - [x] Harvesting crops + - [x] Watering mechanics +- [x] **Advanced NPC AI** + - [x] Pathfinding (A* or efficient grid traversal) + - [x] Zombie Attacks Player (Player takes damage) + - [x] Tamed Zombie Defense (Attacks enemies) + - [x] Zombie Hordes (Night time events) +- [x] **Economy** + - [x] Merchant NPC (Trading interface) + - [x] Selling crops/items for Gold + - [x] Buying Seeds & Tools +- [x] **Building System** + - [x] Placing Walls/Fences (Snap to grid) + - [x] Crafting Buildings (House, Barn) + - [x] UI for selecting buildings + +## 🔵 Phase 4: Polish & Visuals +Lepotni popravki in vzdušje. + +- [x] **Day/Night Cycle** + - [x] Lighting overlay (Darkness at night) + - [x] Dawn/Dusk transitions + - [x] Night-only Zombie Spawns +- [x] **Audio/SFX** + - [x] Footsteps sounds + - [x] Attack/Hit sounds + - [x] Ambient nature sounds (Procedural Rain) + - [x] Background Music +- [x] **Visual FX** + - [x] Particle effects (Leaves falling, blood particles) + - [x] UI Animations (Smooth inventory opening) + - [x] Weather (Rain, Fog) + +## 🟣 Phase 5: Story & Quests +Dodajanje globine in ciljev igri. + +- [x] **Story Mode** + - [x] Intro Sequence + - [x] Main Questline +- [x] **Boss Battles** + - [x] "Zombie King" Boss + - [x] Special Arenas +- [x] **Quest System** + - [x] NPC dialogue interaction + - [x] Rewards & Notifications + +## 🟠 Phase 6: Multiplayer & Export +Možnost igranja s prijatelji. + +- [x] **Local/LAN Multiplayer** + - [x] Syncing Player Positions + - [x] Visual Indicators +- [x] **Mobile Support** + - [x] Virtual Joystick + - [x] Responsive Design +- [x] **Export** + - [x] Desktop (Electron) + - [x] Android (Capacitor Guide) + +## ⚪ Phase 7: World Structure (New Direction) +Strukturiranje sveta s fiksnimi lokacijami za boljši gameplay flow. + +- [x] **Zone Definition** + - [x] Define Constants (FARM @ 20,20; CITY @ 65,65) + - [x] Implement Terrain Overrides (Dirt for Farm, Pavement for City) +- [x] **City Content** + - [x] Generate Ruins (Walls, Rubble, Rooms) + - [x] High-Level Zombie Spawners + - [x] Better Loot tables in City +- [x] **Farm Content** + - [x] Safe Zone Logic (Night Spawns prevented near Farm) + - [x] Starter Resources (Chest with seeds!) +- [x] **Navigation** + - [x] Add Signposts or Roads connecting areas +- [x] **Pathfinding System** + - [x] Web Worker Integration (Async processing) + - [x] A* Algorithm Implementation + - [x] Integration with NPCs +- [x] **Asset Optimization** + - [x] Loading Screen (Visual Progress Bar) + - [x] Transparent Sprite Processing + - [x] Custom Asset Integration (Rocks, Trees) + - [x] Asset Scaling Fixes + +## 🟢 Phase 8: Gameplay Loop & Content +Fokus na igralnost, loot in napredovanje. + +- [x] **City Content** + - [x] Unique Loot in Ruins (Scrap metal, Chips) + - [x] Elite Zombies in City +- [x] **Combat Polish** + - [x] Visual Feedback on Hit (White flash) + - [x] Knockback effect +- [x] **World Details** + - [x] Roads connecting Farm and City + - [x] Signposts + +## 🧬 Phase 9: Antigravity Transformation (Design Overhaul) +Implementacija arhitekturnih stebrov po zgledu Stardew Valley. + +- [x] **Core Engine Setup** (`Antigravity.js`) + - [x] Global Namespace & Config + - [x] Centralized Update Loop +- [x] **Rendering Pipeline** + - [x] NEAREST Filter enforce + - [x] Tile Padding/Extrude (No bleeding) + - [x] Pixel-Perfect Math.round positioning + - [x] **UI/Drawing Integration**: Združitev UI/Drawing modulov za enoten API. +- [x] **Depth Sorting v2.0** + - [x] Y-Sorting za vse entitete + +## 🌈 Phase 10: Visual Overhaul & Realism (Current) +Ekskluzivni vizualni popravki za potopitveno izkušnjo. + +- [x] **Realistic Tools (3D Voxel)**: Sekira, Kramp, Motika, Meč, Zalivalka (v celoti proceduralno generirano). +- [x] **Realistic Crops**: + - [x] Pšenica (4 faze, zlati snopi). + - [x] Koruza (Visoka rast, 4 faze, regeneracija). +- [x] **Inventory Icons Update**: Unikatne ikone za semena in pridelke namesto generičnih krogov. +- [x] **Sound Fixes**: Implementacija manjkajočih zvokov (npr. `playDig`). +- [x] **Advanced World Details**: + - [x] Boljša voda (animacija). + - [x] Več dekoracij (ograje, poti). + +## 🧟 Phase 11: Zombie Roots Integration (New Mechanics) +Implementacija jedrnih mehanik iz novega koncepta "Krvava Žetev". + +- [x] **Zombie Worker AI** + - [x] `WORK_FARM`: Zombi avtomatsko zaliva/žanje v določenem radiusu. + - [x] `WORK_MINE`: Zombi koplje kamenje/rudo. + - [x] **Decay System**: Zombi s časom izgublja energijo/HP. + - [x] **Death Drop**: Gnojilo (Fertilizer) + XP ob smrti. +- [x] **Grave System** + - [x] Izdelava Groba (Crafting) (via command). + - [x] Počitek: Zombi v grobu se regenerira (počasneje razpada). +- [x] **Expansion System (Micro Farm start)** + - [x] Zaklepanje con (megla/neprehodno). + - [x] Naloga: "Pošlji zombije očistit cono". +- [x] **Hybrid Skill & Language** + - [x] Skill Tree UI za Hibrida. + - [x] Prevajalnik dialogov (Level 1: "...hggh", Level 10: "Nevarnost!"). +- [x] **Economy: Minting & Crafting** + - [x] **Blueprint System**: Drop chance pri kopanju (`unlockRecipe(id)`). + - [x] **Workstation Logic**: + - [x] Workbench (Crafting UI v2.0). + - [x] Furnace (Input slot -> Fuel -> Output slot timer). + - [x] Talilnica (Furnace) za rudo -> palice. + - [x] Kovnica (Mint) za palice -> kovanci. + - [x] Kovnica (Mint) za palice -> zlatniki. +- [x] **Building Expansion** + - [x] **Barn**: Objekt za shranjevanje živali. + - [x] **Silos**: Objekt za shranjevanje hrane (poveča kapaciteto). + - [x] **Starter House**: Nadgradnje (Level 1 -> Level 2 dodata prostor). +- [x] **Collection Album (Zbirateljstvo)** + - [x] UI Knjiga (z nalepkami/slikami). + - [x] Tracking System: Odklepanje vnosov ob pobiranju itemov. + - [x] **Arheologija**: Naključna možnost za najdbo Artefakta pri kopanju zemlje. +- [x] **World Events & Entities** + - [x] **Nočna Sova**: Dostava Quest Itemov/Daril (vezano na Friendship system). + - [x] **Netopirji**: Vizualni efekt (roji) za napoved eventov. + - [x] **Mutanti**: Troli in Vilinci (AI + Spawn Logic). + - [x] **Živali**: Mutirane (npr. krave) in Normalne živali. + +## 🧬 Phase 12: Exploration & Legacy (Endgame) +- [x] **Livestock System** + - [x] Hlev za živali. + - [x] Loot Tables: Normalno vs. Mutirano (Mleko vs. Svetleče Mleko). +- [x] **Ocean System** + - [x] Potapljanje (animacija, kisik bar). + - [x] Čoln (Vehicle controller). + - [x] Generacija Otokov (Island Nodes). +- [x] **Legacy System (Generacije)** + - [x] Age Counter (Leta/Letni časi). + - [x] Marriage Logic + Child Spawn. + - [x] **Inheritance**: Prenos inventarja/farme na novega lika ob smrti. +- [x] **Fractions** + - [x] Reputation System za Mutante (Dobri/Zlobni). + +## 🌡️ Phase 13: Elements & Survival (Hardcore) +- [x] **Weather System v2.0** + - [x] **Letni Časi:** Zima (Sneg, Mraz), Poletje (Vročina, Suša). + - [x] **Temperature Logic:** Če `Temp < 0` in nimaš `WinterCoat` -> HP pada. + - [x] **Rastlinjak (Greenhouse):** Crafting Stekla (Mivka + Peč). Omogoča rast pozimi. - [ ] **Localization & Platforms** - [ ] JSON prevodi (SLO, EN, DE, IT, CN). - [ ] Language Selector v meniju. @@ -249,10 +442,14 @@ Implementacija jedrnih mehanik iz novega koncepta "Krvava Žetev". ## 🎬 Phase 14: Kickstarter Prep (Vertical Slice) Priprava poliranega dema za javnost. -- [ ] **Demo Mode**: Omejitev igranja na 3 in-game dneve. +- [x] **Demo Mode**: Omejitev igranja na 3 in-game dneve. - [ ] **UI Polish**: Zamenjava placeholder UI z "Rustikalnim/Post-apo" stilom. - [ ] **Trailer Tools**: Skripta za gladko premikanje kamere (za snemanje). -- [ ] **Visual Polish**: Dodajanje "Juice" efektov (Particles, Screenshake, Lighting). +- [x] **Visual Polish**: Dodajanje "Juice" efektov (Particles, Screenshake, Lighting). + +## 🎨 Phase 15: Polish & Release Prep +- [ ] **Concept Integration** + - [ ] Poenotenje vseh sistemov pod `Antigravity` namespace (Future Refactor) --- **PROJECT STATUS: PLANNING COMPLETE SAGA** 🌍 diff --git a/index.html b/index.html index 59d8d0c..c4addc4 100644 --- a/index.html +++ b/index.html @@ -99,6 +99,7 @@ + diff --git a/src/systems/BuildingSystem.js b/src/systems/BuildingSystem.js index 58179da..95a0c76 100644 --- a/src/systems/BuildingSystem.js +++ b/src/systems/BuildingSystem.js @@ -10,7 +10,8 @@ class BuildingSystem { house: { name: 'House', cost: { wood: 20, stone: 20, gold: 50 }, w: 1, h: 1 }, // Visual is bigger but anchor is 1 tile barn: { name: 'Barn', cost: { wood: 50, stone: 10 }, w: 1, h: 1 }, silo: { name: 'Silo', cost: { wood: 30, stone: 30 }, w: 1, h: 1 }, - stable: { name: 'Stable', cost: { wood: 40, stone: 20 }, w: 1, h: 1 } + stable: { name: 'Stable', cost: { wood: 40, stone: 20 }, w: 1, h: 1 }, + greenhouse: { name: 'Greenhouse', cost: { glass: 20, wood: 15 }, w: 2, h: 2 } // Winter farming }; // Textures init diff --git a/src/systems/VisualEffectsSystem.js b/src/systems/VisualEffectsSystem.js new file mode 100644 index 0000000..b424765 --- /dev/null +++ b/src/systems/VisualEffectsSystem.js @@ -0,0 +1,128 @@ +/** + * VISUAL EFFECTS SYSTEM + * Handles juice effects: screenshake, particles, lighting + */ +class VisualEffectsSystem { + constructor(scene) { + this.scene = scene; + this.camera = scene.cameras.main; + this.isShaking = false; + } + + /** + * Screenshake effect + * @param {number} intensity - Shake strength (default 0.005) + * @param {number} duration - Duration in ms (default 300) + */ + screenshake(intensity = 0.005, duration = 300) { + if (this.isShaking) return; + + this.isShaking = true; + this.camera.shake(duration, intensity); + + this.scene.time.delayedCall(duration, () => { + this.isShaking = false; + }); + } + + /** + * Hit particles (sparks) + */ + createHitParticles(x, y, color = 0xFFFFFF) { + const particles = this.scene.add.particles(x, y, 'particle_white', { + speed: { min: 100, max: 200 }, + angle: { min: 0, max: 360 }, + scale: { start: 0.5, end: 0 }, + lifespan: 300, + quantity: 8, + tint: color + }); + + this.scene.time.delayedCall(500, () => { + particles.destroy(); + }); + } + + /** + * Explosion particles + */ + createExplosion(x, y, color = 0xFF4444) { + const particles = this.scene.add.particles(x, y, 'particle_white', { + speed: { min: 200, max: 400 }, + angle: { min: 0, max: 360 }, + scale: { start: 1, end: 0 }, + lifespan: 600, + quantity: 20, + tint: color, + gravityY: 300 + }); + + this.scene.time.delayedCall(800, () => { + particles.destroy(); + }); + } + + /** + * Dust particles (for movement) + */ + createDustPuff(x, y) { + const particles = this.scene.add.particles(x, y, 'particle_white', { + speed: { min: 30, max: 60 }, + angle: { min: 0, max: 360 }, + scale: { start: 0.3, end: 0 }, + lifespan: 400, + quantity: 5, + tint: 0xCCBBAA, + alpha: { start: 0.5, end: 0 } + }); + + this.scene.time.delayedCall(500, () => { + particles.destroy(); + }); + } + + /** + * Flash effect (for damage, powerups) + */ + flash(color = 0xFFFFFF, duration = 100) { + this.camera.flash(duration, ...this.hexToRGB(color)); + } + + /** + * Fade effect + */ + fadeOut(duration = 1000, callback) { + this.camera.fadeOut(duration, 0, 0, 0); + if (callback) { + this.scene.time.delayedCall(duration, callback); + } + } + + fadeIn(duration = 1000) { + this.camera.fadeIn(duration, 0, 0, 0); + } + + /** + * Utility: Hex to RGB + */ + hexToRGB(hex) { + return [ + (hex >> 16) & 255, + (hex >> 8) & 255, + hex & 255 + ]; + } + + /** + * Create simple white pixel texture for particles + */ + static createParticleTexture(scene) { + if (scene.textures.exists('particle_white')) return; + + const graphics = scene.make.graphics({ x: 0, y: 0, add: false }); + graphics.fillStyle(0xFFFFFF, 1); + graphics.fillCircle(4, 4, 4); + graphics.generateTexture('particle_white', 8, 8); + graphics.destroy(); + } +} diff --git a/src/systems/WeatherSystem.js b/src/systems/WeatherSystem.js index 3dcf273..03dc019 100644 --- a/src/systems/WeatherSystem.js +++ b/src/systems/WeatherSystem.js @@ -73,6 +73,11 @@ class WeatherSystem { // Check for Season Change this.checkSeasonChange(); + + // DEMO MODE: 3-day limit + if (this.dayCount > 3) { + this.triggerDemoEnd(); + } } // Update Phase @@ -348,4 +353,77 @@ class WeatherSystem { overlay.fillRect(0, 0, width, height); } } + + updateTemperature(delta) { + // Calculate base temperature from season + const seasonTemps = { + spring: 15, + summer: 30, + autumn: 10, + winter: -5 + }; + + this.baseTemp = seasonTemps[this.currentSeason] || 20; + + // Time of day variation + const timeVar = Math.sin((this.gameTime / 24) * Math.PI * 2) * 5; + this.currentTemp = this.baseTemp + timeVar; + + // Temperature damage logic + this.tempCheckTimer += delta; + if (this.tempCheckTimer >= this.tempDamageInterval) { + this.tempCheckTimer = 0; + this.checkTemperatureDamage(); + } + } + + checkTemperatureDamage() { + if (!this.scene.player) return; + + const player = this.scene.player; + const inventory = this.scene.inventorySystem; + + // Check for winter coat protection + const hasWinterCoat = inventory && inventory.hasItem('winter_coat'); + const hasSummerHat = inventory && inventory.hasItem('summer_hat'); + + // Cold damage (Winter) + if (this.currentTemp < 0 && !hasWinterCoat) { + player.takeDamage(5); + this.scene.events.emit('show-floating-text', { + x: player.sprite.x, + y: player.sprite.y - 40, + text: '❄️ Freezing!', + color: '#88D4FF' + }); + } + + // Heat damage (Summer) + if (this.currentTemp > 35 && !hasSummerHat) { + player.takeDamage(3); + this.scene.events.emit('show-floating-text', { + x: player.sprite.x, + y: player.sprite.y - 40, + text: '🔥 Overheating!', + color: '#FF8844' + }); + } + } + + getTemperature() { + return Math.round(this.currentTemp); + } + + triggerDemoEnd() { + console.log('🎮 DEMO END - 3 Days Completed!'); + + // Pause game + this.scene.physics.pause(); + + // Show demo end screen + const uiScene = this.scene.scene.get('UIScene'); + if (uiScene) { + uiScene.showDemoEndScreen(); + } + } }