From 74c63ff7e811dedecdca1b426f240c12e8dc922e Mon Sep 17 00:00:00 2001 From: Stephanie Gredell Date: Thu, 4 Sep 2025 09:42:18 -0700 Subject: [PATCH] bug fixes --- src/main.js | 68 ++++++++++++++++++++++++++++++++++++++++++++++++ src/ui/render.js | 50 ++++++++++++++++++++++++++++------- 2 files changed, 108 insertions(+), 10 deletions(-) diff --git a/src/main.js b/src/main.js index 3020457..8d44a2b 100644 --- a/src/main.js +++ b/src/main.js @@ -106,6 +106,12 @@ const root = { this.nodeId = this.map.nodes.find(n => n.kind === "start").id; this.completedNodes = []; this.log(`🎉 Act ${this.currentAct === "act2" ? "II" : "I"} Complete! Advancing to the next challenge...`); + + // Save Act 2 checkpoint when first reaching it + if (nextAct === "act2") { + this.saveAct2Checkpoint(); + } + this.save(); await renderMap(this); } else { @@ -163,6 +169,66 @@ const root = { } }, + saveAct2Checkpoint() { + try { + const checkpointData = { + player: { + ...this.player, + hp: this.player.maxHp, // Start Act 2 with full HP + energy: this.player.maxEnergy, + block: 0, + weak: 0, + vuln: 0, + hand: [], + draw: [], + discard: [] + }, + currentAct: "act2", + relicStates: this.relicStates, + timestamp: Date.now() + }; + localStorage.setItem('birthday-spire-act2-checkpoint', JSON.stringify(checkpointData)); + this.log("🎯 Act 2 checkpoint saved!"); + } catch (e) { + console.warn('Failed to save Act 2 checkpoint:', e); + } + }, + + loadAct2Checkpoint() { + try { + const checkpointData = localStorage.getItem('birthday-spire-act2-checkpoint'); + if (checkpointData) { + const data = JSON.parse(checkpointData); + + // Restore checkpoint state + this.logs = []; + this.player = data.player; + this.currentAct = "act2"; + this.map = MAPS.act2; + this.nodeId = "n1"; // Start of Act 2 + this.completedNodes = []; + this.relicStates = data.relicStates || []; + this._battleInProgress = false; + + this.log("🎯 Restarting from Act 2 checkpoint..."); + return true; + } + return false; + } catch (e) { + console.warn('Failed to load Act 2 checkpoint:', e); + return false; + } + }, + + hasAct2Checkpoint() { + try { + const checkpointData = localStorage.getItem('birthday-spire-act2-checkpoint'); + return !!checkpointData; + } catch (e) { + return false; + } + }, + load() { try { const saveData = localStorage.getItem('birthday-spire-save'); @@ -252,11 +318,13 @@ const root = { clearSave() { localStorage.removeItem('birthday-spire-save'); + localStorage.removeItem('birthday-spire-act2-checkpoint'); // Also clear Act 2 checkpoint }, // Clear any old saves with outdated card IDs clearOldSaves() { localStorage.removeItem('birthday-spire-save'); + localStorage.removeItem('birthday-spire-act2-checkpoint'); } }; diff --git a/src/ui/render.js b/src/ui/render.js index 8350888..587e033 100644 --- a/src/ui/render.js +++ b/src/ui/render.js @@ -1704,10 +1704,21 @@ Better luck on the next run!

- + ${root.currentAct === "act2" && root.hasAct2Checkpoint() ? ` + + + ` : ` + + `}