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() ? `
+
+
+ ` : `
+
+ `}