# πŸš€ IMPLEMENTATION WORKFLOW **Krvava Ε½etev - Asset Integration** **Date:** 2025-12-22 **Status:** βœ… TSX FILES CREATED - READY FOR TILED IMPORT --- ## βœ… COMPLETED TASKS ### βœ“ Phase 1: Asset Organization (DONE) - [x] **25 TSX tilesets created** across 11 categories - [x] **Organized into folders:** Characters, Animals, Buildings, DLC, etc. - [x] **Auto-generated from sprite sheets** (122 total available) - [x] **Location:** `c:/novafarma/assets/maps/organized_tilesets/` **Created Categories:** ``` 01_Characters_NPCs (8 TSX files) βœ… 02_Animals_Pets (4 TSX files) βœ… 04_Environment_Terrain (1 TSX file) βœ… 05_Crops_Farming (1 TSX file) βœ… 10_DLC_Dino_World (1 TSX file) βœ… 11_DLC_Mythical (1 TSX file) βœ… 13_DLC_Egypt (2 TSX files) βœ… 14_DLC_Atlantis (1 TSX file) βœ… 15_DLC_Chernobyl (1 TSX file) βœ… 18_Monsters_Bosses (3 TSX files) βœ… 20_Misc_Items (2 TSX files) βœ… ``` --- ## πŸ“‹ REMAINING TASKS ### 🎯 TASK 1: Import Tilesets into Tiled Map Editor **Status:** πŸ”² NOT STARTED **Estimated Time:** 30 minutes **Priority:** ⭐⭐⭐ #### Steps: 1. **Open Tiled Map Editor** ``` Navigate to: C:\Program Files\Tiled\tiled.exe (or wherever you installed Tiled) ``` 2. **Open or Create Map** - Option A: Open existing `micro_farm_128x128.tmx` - Option B: Create new map: `File β†’ New β†’ New Map...` - Orientation: Orthogonal - Tile size: 48x48 pixels - Map size: 128x128 tiles (or 500x500 for full world) 3. **Add External Tilesets** ``` Map β†’ Add External Tileset... Navigate to: c:/novafarma/assets/maps/organized_tilesets/ ``` 4. **Import by Category (in order):** - [x] `01_Characters_NPCs/` β†’ Select all 8 TSX files - [x] `02_Animals_Pets/` β†’ Select all 4 TSX files - [x] `04_Environment_Terrain/` β†’ Import terrain tiles - [x] `05_Crops_Farming/` β†’ Import crops - [x] `18_Monsters_Bosses/` β†’ Import enemies - [x] (Optional) DLC folders for expansion content 5. **Verify Import** - Check **Tilesets panel** (right side) - Each tileset should show preview tiles - No red "missing file" errors **βœ… Success Criteria:** - All tilesets visible in Tilesets panel - Can select tiles and place on map - No errors in Tiled console --- ### 🎯 TASK 2: Setup Sprite Animation Sequences **Status:** πŸ”² NOT STARTED **Estimated Time:** 45 minutes **Priority:** ⭐⭐⭐ #### Animation Type 1: Character Walk Cycles **Example: Kai Character** 1. Select `kai_character_2x2_grid` tileset 2. Click on first frame (tile 0) 3. Right-click β†’ **Tile Animation Editor** 4. Add frames for "Down Walk" animation: - Frames: 0, 1, 2, 3 (first row) - Duration: 150ms per frame - Loop: Yes 5. Repeat for other directions: - **Left Walk:** Frames 10-13 (row 2) - **Right Walk:** Frames 20-23 (row 3) - **Up Walk:** Frames 30-33 (row 4) 6. **Repeat for all 8 NPCs:** - Ana, Lena, Marija, Ivan, Jakob, Dr. Chen, Dr. Krnic **βœ… Success Criteria:** - 8 characters Γ— 4 directions = 32 walk animations - Animations play smoothly when previewed --- #### Animation Type 2: Tree Growth Sequences **Process:** 1. Import individual tree growth stages (from `narezano_loceno/`) 2. Create animation in Tiled: ``` Stage 1 (Sapling) β†’ 500ms Stage 2 (Young) β†’ 500ms Stage 3 (Mature) β†’ 500ms Stage 4 (Full Grown) β†’ 500ms Stage 5 (Harvestable) β†’ Hold (no loop) ``` 3. **Trees to animate:** - Oak tree (5 stages) - Pine tree (5 stages) - Cherry tree (5 stages) - Apple tree (5 stages) **βœ… Success Criteria:** - 4 tree species with growth animations - Non-looping (plays once, stops at harvestable) --- #### Animation Type 3: Crop Growth Sequences **Crops to Animate:** - Wheat (6 stages) - Carrots (5 stages) - Tomatoes (5 stages) - Seasonal crops (4 seasons Γ— multiple crops) **Animation Settings:** - Duration: 400ms per frame - Loop: No (stops at harvestable stage) **βœ… Success Criteria:** - 10+ crop growth animations - All stages transition smoothly --- ### 🎯 TASK 3: Integrate DLC Content into Separate Biome Maps **Status:** πŸ”² NOT STARTED **Estimated Time:** 90 minutes **Priority:** ⭐⭐ #### Create 8 DLC Maps: **1. Dino World Map** (`dlc_dino_world_64x64.tmx`) ``` - Size: 64x64 tiles - Tilesets: 10_DLC_Dino_World/dinosaurs_animation_strips.tsx - Features: Dinosaur spawns, prehistoric vegetation - Biome: Jungle/volcanic ``` **2. Egypt Map** (`dlc_egypt_desert_64x64.tmx`) ``` - Size: 64x64 tiles - Tilesets: 13_DLC_Egypt/egyptian_structures_pack.tsx - Features: Pyramids, sphinx, sand dunes - Biome: Desert ``` **3. Atlantis Map** (`dlc_atlantis_48x48.tmx`) ``` - Size: 48x48 tiles - Tilesets: 14_DLC_Atlantis/atlantis_objects_pack.tsx - Features: Underwater ruins, aquatic creatures - Biome: Ocean/underwater ``` **4-8. Repeat for:** - Mythical Highlands - Amazon Apocalypse - Chernobyl - Paris Catacombs - Loch Ness **For Each DLC Map:** 1. Create new map in Tiled 2. Import DLC-specific tilesets 3. Design unique biome layout 4. Add spawn points (Object Layer) 5. Export to JSON **βœ… Success Criteria:** - 8 separate DLC maps created - Each with unique biome theme - JSON exports ready for Phaser --- ### 🎯 TASK 4: Implement Crafting Recipe System in Game Code **Status:** πŸ”² NOT STARTED **Estimated Time:** 2-3 hours **Priority:** ⭐⭐⭐ #### Create: `src/systems/RecipeSystem.js` ```javascript /** * RecipeSystem.js * Manages crafting recipes, blueprints, and material requirements */ export default class RecipeSystem { constructor(scene) { this.scene = scene; this.recipes = new Map(); this.blueprints = new Map(); this.unlockedRecipes = new Set(); this.initializeRecipes(); } initializeRecipes() { // Example recipe structure this.addRecipe('wooden_fence', { name: 'Wooden Fence', category: 'Building', materials: [ { item: 'wood', quantity: 5 }, { item: 'nails', quantity: 2 } ], craftTime: 2000, // ms unlockLevel: 1, blueprint: 'blueprint_fence' }); // Add all 50+ recipes from sprite sheets } canCraft(recipeId) { const recipe = this.recipes.get(recipeId); if (!recipe) return false; // Check if unlocked if (!this.unlockedRecipes.has(recipeId)) return false; // Check materials return this.hasRequiredMaterials(recipe); } craft(recipeId) { if (!this.canCraft(recipeId)) return false; const recipe = this.recipes.get(recipeId); this.consumeMaterials(recipe); // Show crafting UI this.scene.uiSystem.showCraftingProgress(recipe); // Wait for craft time this.scene.time.delayedCall(recipe.craftTime, () => { this.completeCraft(recipe); }); } unlockBlueprint(blueprintId) { this.unlockedRecipes.add(blueprintId); this.scene.events.emit('blueprintUnlocked', blueprintId); } } ``` **Integration Steps:** 1. Create `RecipeSystem.js` in `src/systems/` 2. Add to `GameScene.js`: ```javascript this.recipeSystem = new RecipeSystem(this); ``` 3. Create crafting UI panel 4. Load recipe data from JSON 5. Test crafting mechanics **βœ… Success Criteria:** - Can craft items with materials - Blueprint unlock system working - UI shows available recipes - Materials consumed on craft --- ### 🎯 TASK 5: Add Progression System Logic **Status:** πŸ”² NOT STARTED **Estimated Time:** 2-3 hours **Priority:** ⭐⭐⭐ #### Create: `src/systems/ProgressionSystem.js` ```javascript /** * ProgressionSystem.js * Handles house/barn/storage upgrades (5/4/4 stages) */ export default class ProgressionSystem { constructor(scene) { this.scene = scene; this.buildingLevels = { house: 1, // Max: 5 barn: 1, // Max: 4 storage: 1 // Max: 4 }; this.upgradeRequirements = this.loadUpgradeData(); } loadUpgradeData() { return { house: { level2: { wood: 100, stone: 50, gold: 500 }, level3: { wood: 200, stone: 100, gold: 1500 }, level4: { wood: 400, stone: 200, gold: 3500 }, level5: { wood: 800, stone: 400, gold: 7500 } }, barn: { level2: { wood: 75, stone: 30, gold: 400 }, level3: { wood: 150, stone: 75, gold: 1000 }, level4: { wood: 300, stone: 150, gold: 2500 } }, storage: { level2: { wood: 50, stone: 25, gold: 300 }, level3: { wood: 100, stone: 50, gold: 800 }, level4: { wood: 200, stone: 100, gold: 2000 } } }; } canUpgrade(buildingType) { const currentLevel = this.buildingLevels[buildingType]; const maxLevel = buildingType === 'house' ? 5 : 4; if (currentLevel >= maxLevel) return false; const nextLevelReqs = this.getUpgradeRequirements(buildingType, currentLevel + 1); return this.hasResources(nextLevelReqs); } upgrade(buildingType) { if (!this.canUpgrade(buildingType)) return false; const currentLevel = this.buildingLevels[buildingType]; const nextLevel = currentLevel + 1; const requirements = this.getUpgradeRequirements(buildingType, nextLevel); // Consume resources this.consumeResources(requirements); // Upgrade building this.buildingLevels[buildingType] = nextLevel; // Update sprite this.updateBuildingSprite(buildingType, nextLevel); // Emit event this.scene.events.emit('buildingUpgraded', { buildingType, level: nextLevel }); return true; } updateBuildingSprite(buildingType, level) { // Use progression sprite sheets (e.g., house_progression_5_stages.tsx) // Frame = level - 1 const buildingSprite = this.scene[`${buildingType}Sprite`]; if (buildingSprite) { buildingSprite.setFrame(level - 1); } } } ``` **βœ… Success Criteria:** - Buildings upgrade through all stages - Sprites change visually per stage - Resources consumed correctly - UI shows upgrade button when affordable --- ### 🎯 TASK 6: Implement Blueprint Unlock Mechanics **Status:** πŸ”² NOT STARTED **Estimated Time:** 1-2 hours **Priority:** ⭐⭐ #### Add to `RecipeSystem.js`: ```javascript unlockBlueprint(blueprintId, method = 'find') { if (this.unlockedRecipes.has(blueprintId)) { console.warn(`Blueprint ${blueprintId} already unlocked`); return false; } this.unlockedRecipes.add(blueprintId); // Show unlock notification this.scene.uiSystem.showNotification({ title: 'Blueprint Unlocked!', message: `You unlocked: ${this.getRecipeName(blueprintId)}`, icon: `blueprint_${blueprintId}`, duration: 3000 }); // Save to local storage this.saveUnlocks(); // Emit event this.scene.events.emit('blueprintUnlocked', { blueprintId, method }); return true; } /** * Unlock methods: * - 'find': Discover in world as loot * - 'level': Unlock at certain player level * - 'quest': Reward from NPC quest * - 'buy': Purchase from trader */ findBlueprint(x, y) { // Check if player is near blueprint object const blueprint = this.scene.blueprintObjects.find(bp => { return Phaser.Math.Distance.Between(x, y, bp.x, bp.y) < 50; }); if (blueprint) { this.unlockBlueprint(blueprint.recipeId, 'find'); blueprint.destroy(); // Remove from world } } ``` **βœ… Success Criteria:** - Blueprints can be found in world - Level-up unlocks work - Quest rewards unlock recipes - Visual notification on unlock --- ### 🎯 TASK 7: Add Transport System **Status:** πŸ”² NOT STARTED **Estimated Time:** 3-4 hours **Priority:** ⭐⭐ #### Create: `src/systems/TransportSystem.js` ```javascript /** * TransportSystem.js * Handles trains, carts, boats, horses */ export default class TransportSystem { constructor(scene) { this.scene = scene; this.vehicles = new Map(); this.currentVehicle = null; this.vehicleStats = { horse: { speed: 200, capacity: 0 }, cart: { speed: 120, capacity: 100 }, train: { speed: 300, capacity: 500, requiresTrack: true }, kayak: { speed: 150, capacity: 20, waterOnly: true }, sup: { speed: 100, capacity: 5, waterOnly: true } }; } mount(vehicleType) { if (this.currentVehicle) { console.warn('Already mounted on vehicle'); return false; } const stats = this.vehicleStats[vehicleType]; if (!stats) return false; // Change player speed this.scene.player.setMaxVelocity(stats.speed); // Change player sprite this.scene.player.setTexture(`player_on_${vehicleType}`); // Update UI this.scene.uiSystem.showVehicleUI(vehicleType, stats); this.currentVehicle = vehicleType; this.scene.events.emit('vehicleMounted', vehicleType); return true; } dismount() { if (!this.currentVehicle) return; // Restore player speed this.scene.player.setMaxVelocity(100); // Restore player sprite this.scene.player.setTexture('player'); // Hide vehicle UI this.scene.uiSystem.hideVehicleUI(); this.currentVehicle = null; this.scene.events.emit('vehicleDismounted'); } canUseVehicle(vehicleType, tile) { const stats = this.vehicleStats[vehicleType]; // Check water-only vehicles if (stats.waterOnly && !tile.properties.isWater) { return false; } // Check train tracks if (stats.requiresTrack && !tile.properties.hasTrack) { return false; } return true; } } ``` **βœ… Success Criteria:** - Can mount/dismount vehicles - Speed changes based on vehicle - Water vehicles only work on water - Trains follow tracks --- ### 🎯 TASK 8: Magic System Integration **Status:** πŸ”² NOT STARTED **Estimated Time:** 2-3 hours **Priority:** ⭐ #### Create: `src/systems/MagicSystem.js` ```javascript /** * MagicSystem.js * Spell casting, staffs, potions, elemental effects */ export default class MagicSystem { constructor(scene) { this.scene = scene; this.spells = new Map(); this.equippedStaff = null; this.mana = 100; this.maxMana = 100; this.initializeSpells(); } initializeSpells() { this.addSpell('fireball', { name: 'Fireball', manaCost: 20, damage: 50, element: 'fire', range: 200, cooldown: 2000 }); // Add all spells from magic_staffs_6_types.tsx } castSpell(spellId, targetX, targetY) { const spell = this.spells.get(spellId); if (!spell) return false; // Check mana if (this.mana < spell.manaCost) { this.scene.uiSystem.showError('Not enough mana!'); return false; } // Consume mana this.mana -= spell.manaCost; // Create spell projectile const projectile = this.scene.physics.add.sprite( this.scene.player.x, this.scene.player.y, `spell_${spell.element}` ); // Aim at target this.scene.physics.moveTo(projectile, targetX, targetY, 300); // Add particle effects this.scene.particleSystem.createSpellEffect(spell.element, projectile); // Handle collision this.scene.physics.add.overlap(projectile, this.scene.enemies, (proj, enemy) => { enemy.takeDamage(spell.damage); proj.destroy(); }); return true; } } ``` **βœ… Success Criteria:** - Can equip staffs - Cast spells with mana cost - Elemental effects visible - Potions restore mana/health --- ### 🎯 TASK 9: Breeding/Family Mechanics for Animals **Status:** πŸ”² NOT STARTED **Estimated Time:** 2-3 hours **Priority:** ⭐⭐ #### Create: `src/systems/BreedingSystem.js` ```javascript /** * BreedingSystem.js * Animal breeding, family trees, baby growth */ export default class BreedingSystem { constructor(scene) { this.scene = scene; this.animals = new Map(); this.breedingPairs = new Map(); this.breedingCooldown = 86400000; // 24 hours in ms } canBreed(animal1, animal2) { // Must be same species if (animal1.species !== animal2.species) return false; // Must be opposite genders if (animal1.gender === animal2.gender) return false; // Must be adults if (animal1.age < 'adult' || animal2.age < 'adult') return false; // Check cooldown if (animal1.lastBred && Date.now() - animal1.lastBred < this.breedingCooldown) { return false; } return true; } breed(animal1, animal2) { if (!this.canBreed(animal1, animal2)) return null; // Create baby const baby = this.createBaby(animal1, animal2); // Update parent data animal1.lastBred = Date.now(); animal2.lastBred = Date.now(); // Show notification this.scene.uiSystem.showNotification({ title: 'Baby Born!', message: `Your ${animal1.species}s had a baby!`, icon: 'baby_' + animal1.species }); // Update family tree this.updateFamilyTree(animal1, animal2, baby); return baby; } createBaby(parent1, parent2) { const baby = { id: this.generateId(), species: parent1.species, age: 'baby', // baby β†’ young β†’ adult gender: Math.random() > 0.5 ? 'male' : 'female', parents: [parent1.id, parent2.id], birthDate: Date.now(), sprite: null }; // Create sprite (use children_5_growth_stages.tsx) baby.sprite = this.scene.add.sprite( parent1.sprite.x + 20, parent1.sprite.y, `${parent1.species}_baby` ); // Setup growth timer (baby β†’ young β†’ adult) this.setupGrowthTimer(baby); this.animals.set(baby.id, baby); return baby; } setupGrowthTimer(animal) { // Baby β†’ Young (2 days) this.scene.time.delayedCall(172800000, () => { animal.age = 'young'; animal.sprite.setTexture(`${animal.species}_young`); }); // Young β†’ Adult (5 days) this.scene.time.delayedCall(432000000, () => { animal.age = 'adult'; animal.sprite.setTexture(`${animal.species}_adult`); }); } } ``` **βœ… Success Criteria:** - Animals can breed (male + female) - Babies spawn with growth stages - Family tree tracking works - UI shows breeding status --- ## πŸ“Š PROGRESS TRACKER | Task | Status | Time | Priority | |------|--------|------|----------| | 1. Import Tilesets | πŸ”² | 30 min | ⭐⭐⭐ | | 2. Setup Animations | πŸ”² | 45 min | ⭐⭐⭐ | | 3. DLC Maps | πŸ”² | 90 min | ⭐⭐ | | 4. Crafting System | πŸ”² | 2-3 hrs | ⭐⭐⭐ | | 5. Progression System | πŸ”² | 2-3 hrs | ⭐⭐⭐ | | 6. Blueprint Unlocks | πŸ”² | 1-2 hrs | ⭐⭐ | | 7. Transport System | πŸ”² | 3-4 hrs | ⭐⭐ | | 8. Magic System | πŸ”² | 2-3 hrs | ⭐ | | 9. Breeding System | πŸ”² | 2-3 hrs | ⭐⭐ | **Total Estimated Time:** 14-21 hours --- ## 🎯 RECOMMENDED WORKFLOW ### Session 1: Tiled Import (1 hour) - βœ… TSX files created - [ ] Import into Tiled - [ ] Setup character animations - [ ] Create starter map ### Session 2: Crafting & Progression (3 hours) - [ ] Implement RecipeSystem - [ ] Implement ProgressionSystem - [ ] Test building upgrades - [ ] Test crafting UI ### Session 3: Transport & Magic (4 hours) - [ ] Implement TransportSystem - [ ] Implement MagicSystem - [ ] Add vehicle sprites - [ ] Test spell effects ### Session 4: Breeding & DLC (4 hours) - [ ] Implement BreedingSystem - [ ] Create 8 DLC maps - [ ] Test animal families - [ ] Export all maps to JSON --- ## βœ… NEXT STEPS 1. **Open Tiled Map Editor** 2. **Import TSX files from:** `c:/novafarma/assets/maps/organized_tilesets/` 3. **Follow TASK 1 instructions above** 4. **Report progress or issues** --- **STATUS:** βœ… READY TO PROCEED WITH TASK 1