'use strict'; // === SAVE SYSTEM === const SAVE_KEY = 'zelda_dungeon_save_v1'; let saveData = { completedDungeons: [], weapons: [], heartPieces: 0, totalRoomsCleared: 0, totalEnemiesDefeated: 0, dungeonsBeaten: 0, playTime: 0, }; function loadSaveData() { try { const raw = localStorage.getItem(SAVE_KEY); if (raw) { saveData = JSON.parse(raw); console.log('Save loaded:', saveData); } } catch (e) { console.warn('Failed to load save:', e); } // Check for electron API (for Electron builds) if (window.electronAPI && window.electronAPI.loadSave) { try { const electronSave = window.electronAPI.loadSave(); if (electronSave) saveData = electronSave; } catch (e) { /* fallback to localStorage */ } } } function saveProgress() { try { localStorage.setItem(SAVE_KEY, JSON.stringify(saveData)); console.log('Save written:', saveData); } catch (e) { console.warn('Failed to save:', e); } if (window.electronAPI && window.electronAPI.saveData) { try { window.electronAPI.saveData(saveData); } catch (e) { /* fallback to localStorage */ } } } function markDungeonComplete(dungeonIdx) { if (!saveData.completedDungeons.includes(dungeonIdx)) { saveData.completedDungeons.push(dungeonIdx); saveData.dungeonsBeaten++; } } function addWeapon(name) { if (!saveData.weapons.includes(name)) { saveData.weapons.push(name); } } function addHeartPiece() { saveData.heartPieces++; // Every 4 heart pieces = 1 new heart (2 HP) if (saveData.heartPieces % 4 === 0) { if (gameState && gameState.player) { if (gameState.player.maxHp < MAX_HEARTS * 2) { gameState.player.maxHp += 2; gameState.player.hp = gameState.player.maxHp; showMessage('Heart Container! Max HP increased!'); } } } } function addStats(rooms, enemies) { saveData.totalRoomsCleared += rooms; saveData.totalEnemiesDefeated += enemies; } function isDungeonCompleted(dungeonIdx) { return saveData.completedDungeons.includes(dungeonIdx); } function isDungeonUnlocked(dungeonIdx) { if (dungeonIdx === 0) return true; return saveData.completedDungeons.includes(dungeonIdx - 1); } function getSaveSummary() { return { dungeonsCompleted: saveData.completedDungeons.length, dungeonsBeaten: saveData.dungeonsBeaten, weapons: saveData.weapons.length, heartPieces: saveData.heartPieces, roomsCleared: saveData.totalRoomsCleared, enemiesDefeated: saveData.totalEnemiesDefeated, }; } function clearSave() { saveData = { completedDungeons: [], weapons: [], heartPieces: 0, totalRoomsCleared: 0, totalEnemiesDefeated: 0, dungeonsBeaten: 0, playTime: 0, }; localStorage.removeItem(SAVE_KEY); console.log('Save cleared'); } if (typeof module !== 'undefined' && module.exports) { module.exports = { saveData, loadSaveData, saveProgress, markDungeonComplete, addWeapon, addHeartPiece, addStats, isDungeonCompleted, isDungeonUnlocked, getSaveSummary, clearSave }; }