Browse Source

bug fixes

main
Stephanie Gredell 4 months ago
parent
commit
74c63ff7e8
  1. 68
      src/main.js
  2. 34
      src/ui/render.js

68
src/main.js

@ -106,6 +106,12 @@ const root = {
this.nodeId = this.map.nodes.find(n => n.kind === "start").id; this.nodeId = this.map.nodes.find(n => n.kind === "start").id;
this.completedNodes = []; this.completedNodes = [];
this.log(`🎉 Act ${this.currentAct === "act2" ? "II" : "I"} Complete! Advancing to the next challenge...`); 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(); this.save();
await renderMap(this); await renderMap(this);
} else { } 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() { load() {
try { try {
const saveData = localStorage.getItem('birthday-spire-save'); const saveData = localStorage.getItem('birthday-spire-save');
@ -252,11 +318,13 @@ const root = {
clearSave() { clearSave() {
localStorage.removeItem('birthday-spire-save'); localStorage.removeItem('birthday-spire-save');
localStorage.removeItem('birthday-spire-act2-checkpoint'); // Also clear Act 2 checkpoint
}, },
// Clear any old saves with outdated card IDs // Clear any old saves with outdated card IDs
clearOldSaves() { clearOldSaves() {
localStorage.removeItem('birthday-spire-save'); localStorage.removeItem('birthday-spire-save');
localStorage.removeItem('birthday-spire-act2-checkpoint');
} }
}; };

34
src/ui/render.js

@ -1704,10 +1704,21 @@ Better luck on the next run!</p>
</div> </div>
<div class="defeat-actions"> <div class="defeat-actions">
${root.currentAct === "act2" && root.hasAct2Checkpoint() ? `
<button class="defeat-btn primary-btn" data-restart-act2>
<span class="btn-icon">🎯</span>
<span>Restart Act 2</span>
</button>
<button class="defeat-btn secondary-btn" data-replay>
<span class="btn-icon">🔄</span>
<span>Restart from Beginning</span>
</button>
` : `
<button class="defeat-btn primary-btn" data-replay> <button class="defeat-btn primary-btn" data-replay>
<span class="btn-icon">🔄</span> <span class="btn-icon">🔄</span>
<span>Try Again</span> <span>Try Again</span>
</button> </button>
`}
<button class="defeat-btn secondary-btn" data-menu> <button class="defeat-btn secondary-btn" data-menu>
<span class="btn-icon">🏠</span> <span class="btn-icon">🏠</span>
<span>Main Menu</span> <span>Main Menu</span>
@ -1718,12 +1729,31 @@ Better luck on the next run!</p>
`; `;
root.app.querySelector("[data-replay]").addEventListener("click", () => { // Add event listeners for restart options
const restartAct2Btn = root.app.querySelector("[data-restart-act2]");
if (restartAct2Btn) {
restartAct2Btn.addEventListener("click", async () => {
if (root.loadAct2Checkpoint()) {
await renderMap(root);
} else {
// Fallback to full reset if checkpoint fails
root.reset(); root.reset();
}
}); });
}
const replayBtn = root.app.querySelector("[data-replay]");
if (replayBtn) {
replayBtn.addEventListener("click", () => {
root.reset();
});
}
root.app.querySelector("[data-menu]").addEventListener("click", () => { const menuBtn = root.app.querySelector("[data-menu]");
if (menuBtn) {
menuBtn.addEventListener("click", () => {
root.reset(); root.reset();
}); });
} }
}

Loading…
Cancel
Save