'use strict'; // === ITEM SYSTEM === var Save = typeof require !== 'undefined' ? require('../save/save') : {}; var saveData = Save.saveData || window.saveData; var saveProgress = Save.saveProgress || window.saveProgress; var addHeartPiece = Save.addHeartPiece || window.addHeartPiece; var addWeapon = Save.addWeapon || window.addWeapon; function openChest(chest) { chest.opened = true; const loot = chest.loot; if (!loot) return; spawnParticles(chest.x * TILE + TILE / 2, chest.y * TILE + TILE / 2, '#FFD700', 10); if (loot.type === 'weapon') { const weaponDef = WEAPONS.find(w => w.name === loot.name); if (weaponDef && !gameState.player.weapons.find(w => w.name === weaponDef.name)) { gameState.player.weapons.push({ ...weaponDef }); if (!gameState.player.activeWeapon) { gameState.player.activeWeapon = gameState.player.weapons[0]; } addWeapon(weaponDef.name); showMessage(`Got ${weaponDef.name}!`); } } if (loot.type === 'consumable') { const itemDef = ITEMS.find(i => i.name === loot.name); if (itemDef) { if (itemDef.id === 'potion_small') { gameState.player.hp = Math.min(gameState.player.hp + 4, gameState.player.maxHp); showMessage('Small Potion! (+4 HP)'); } else if (itemDef.id === 'potion_medium') { gameState.player.hp = Math.min(gameState.player.hp + 8, gameState.player.maxHp); showMessage('Medium Potion! (+8 HP)'); } else if (itemDef.id === 'potion_large') { gameState.player.hp = Math.min(gameState.player.hp + 12, gameState.player.maxHp); showMessage('Large Potion! (+12 HP)'); } else if (itemDef.id === 'heart_piece') { gameState.player.items.push({ ...itemDef }); addHeartPiece(); showMessage(`Heart Piece! (${saveData.heartPieces}/4)`); } else if (itemDef.id === 'heart_container') { if (gameState.player.maxHp < MAX_HEARTS * 2) { gameState.player.maxHp += 2; gameState.player.hp = gameState.player.maxHp; showMessage('Heart Container! Max HP increased!'); } } else if (itemDef.id === 'arrows') { gameState.player.arrows += (loot.count || 10); showMessage(`+${loot.count || 10} Arrows!`); } else if (itemDef.id === 'bombs') { gameState.player.bombs += (loot.count || 10); showMessage(`+${loot.count || 10} Bombs!`); } else if (itemDef.id === 'key') { gameState.player.keys += (loot.count || 1); showMessage(`+${loot.count || 1} Key!`); } else if (itemDef.id === 'bow') { if (!gameState.player.weapons.find(w => w.name === 'Bow')) { const bowDef = WEAPONS.find(w => w.name === 'Bow'); if (bowDef) { gameState.player.weapons.push({ ...bowDef }); addWeapon('Bow'); showMessage('Got Bow!'); } } gameState.player.arrows += (loot.count || 10); showMessage(`+${loot.count || 10} Arrows!`); } else { gameState.player.items.push({ ...itemDef, count: loot.count || 1 }); showMessage(`Got ${itemDef.name}!`); } } } if (loot.type === 'upgrade') { if (loot.name === 'sword_upgrade' && gameState.player.activeWeapon) { gameState.player.activeWeapon.damage += 1; showMessage('Sword upgraded! (+1 damage)'); } } saveProgress(); } function collectFloorItem(item) { item.collected = true; const itemDef = ITEMS.find(i => i.id === item.id); if (!itemDef) return; spawnParticles(item.x * TILE + TILE / 2, item.y * TILE + TILE / 2, itemDef.color || '#FFD700', 5); if (itemDef.type === 'potion') { gameState.player.hp = Math.min(gameState.player.hp + (itemDef.healAmount || 4), gameState.player.maxHp); showMessage(`${itemDef.name}! (+${itemDef.healAmount} HP)`); } else if (itemDef.id === 'heart_piece') { addHeartPiece(); showMessage(`Heart Piece! (${saveData.heartPieces}/4)`); } else if (itemDef.id === 'arrows') { gameState.player.arrows += (item.count || 5); showMessage(`+${item.count || 5} Arrows!`); } else if (itemDef.id === 'bombs') { gameState.player.bombs += (item.count || 5); showMessage(`+${item.count || 5} Bombs!`); } else if (itemDef.id === 'key') { gameState.player.keys++; showMessage('+1 Key!'); } else { gameState.player.items.push({ ...itemDef }); showMessage(`Got ${itemDef.name}!`); } } function useItem(itemIdx) { if (!gameState.player.items[itemIdx]) return; const item = gameState.player.items[itemIdx]; const def = ITEMS.find(i => i.id === item.id); if (!def || def.type !== 'consumable') return; if (def.id.startsWith('potion')) { gameState.player.hp = Math.min(gameState.player.hp + (def.healAmount || 4), gameState.player.maxHp); showMessage(`Used ${def.name}! (+${def.healAmount} HP)`); spawnParticles(gameState.player.x * TILE + TILE / 2, gameState.player.y * TILE + TILE / 2, '#00FF00', 8); } else { showMessage(`Can't use ${def.name} here`); return; } item.count = (item.count || 1) - 1; if (item.count <= 0) { gameState.player.items.splice(itemIdx, 1); } } function switchWeapon() { if (gameState.player.weapons.length <= 1) return; const currentIdx = gameState.player.weapons.findIndex(w => w === gameState.player.activeWeapon); const nextIdx = (currentIdx + 1) % gameState.player.weapons.length; gameState.player.activeWeapon = gameState.player.weapons[nextIdx]; showMessage(`Switched to ${gameState.player.activeWeapon.name}`); } if (typeof module !== 'undefined' && module.exports) { module.exports = { openChest, collectFloorItem, useItem, switchWeapon }; }