Compare commits
5 Commits
fix/169-re
...
sprint/iss
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6803ef80af | ||
|
|
4f0b54a970 | ||
|
|
cff3d1715b | ||
|
|
f1bed950e6 | ||
|
|
4c162ed123 |
11
README.md
11
README.md
@@ -105,16 +105,7 @@ This game is a **decision simulator** for our actual work.
|
||||
## Files
|
||||
|
||||
- `index.html` — Game UI
|
||||
- `js/data.js` — Game data, buildings, projects, upgrades
|
||||
- `js/utils.js` — Utility functions and formatters
|
||||
- `js/combat.js` — Combat and corruption event logic
|
||||
- `js/strategy.js` — Strategy and decision systems
|
||||
- `js/sound.js` — Audio engine and sound effects
|
||||
- `js/engine.js` — Core engine (tick loop, resource generation, state)
|
||||
- `js/render.js` — DOM rendering and UI updates
|
||||
- `js/tutorial.js` — New player tutorial flow
|
||||
- `js/dismantle.js` — Dismantle/ending mechanics
|
||||
- `js/main.js` — Entry point, initialization, game loop
|
||||
- `game.js` — Core engine (tick loop, buildings, projects, events)
|
||||
- `DESIGN.md` — Full design document with narrative arc and mechanics
|
||||
- `README.md` — This file
|
||||
|
||||
|
||||
@@ -481,11 +481,6 @@ const Dismantle = {
|
||||
this.triggered = true;
|
||||
this.renderChoice();
|
||||
}
|
||||
|
||||
// Restore defer cooldown even if not triggered
|
||||
if (G.dismantleDeferUntilAt > 0) {
|
||||
this.deferUntilAt = G.dismantleDeferUntilAt;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -35,7 +35,7 @@ window.addEventListener('load', function () {
|
||||
if (G.driftEnding) {
|
||||
G.running = false;
|
||||
renderDriftEnding();
|
||||
} else if (typeof Dismantle !== 'undefined' && (G.dismantleTriggered || G.dismantleActive || G.dismantleComplete || G.dismantleDeferUntilAt > 0)) {
|
||||
} else if (typeof Dismantle !== 'undefined' && (G.dismantleTriggered || G.dismantleActive || G.dismantleComplete)) {
|
||||
Dismantle.restore();
|
||||
} else if (G.beaconEnding) {
|
||||
G.running = false;
|
||||
|
||||
@@ -409,46 +409,4 @@ test('restore re-renders an offered but not-yet-started Unbuilding prompt', () =
|
||||
Dismantle.restore();
|
||||
|
||||
assert.match(document.getElementById('alignment-ui').innerHTML, /THE UNBUILDING/);
|
||||
});
|
||||
|
||||
test('defer cooldown persists after save/load when dismantleTriggered is false', () => {
|
||||
const { G, Dismantle, saveGame, loadGame } = loadBeacon({ includeRender: true });
|
||||
|
||||
G.startedAt = Date.now();
|
||||
G.totalCode = 1_000_000_000;
|
||||
G.phase = 6;
|
||||
G.pactFlag = 1;
|
||||
|
||||
// Trigger the Unbuilding
|
||||
Dismantle.checkTrigger();
|
||||
assert.equal(G.dismantleTriggered, true);
|
||||
|
||||
// Defer it
|
||||
Dismantle.defer();
|
||||
assert.equal(G.dismantleTriggered, false);
|
||||
assert.ok((Dismantle.deferUntilAt || 0) > Date.now());
|
||||
assert.ok((G.dismantleDeferUntilAt || 0) > Date.now());
|
||||
|
||||
// Save the game
|
||||
saveGame();
|
||||
|
||||
// Clear state (simulate reload)
|
||||
G.dismantleTriggered = false;
|
||||
G.dismantleActive = false;
|
||||
G.dismantleComplete = false;
|
||||
G.dismantleDeferUntilAt = 0;
|
||||
Dismantle.triggered = false;
|
||||
Dismantle.deferUntilAt = 0;
|
||||
|
||||
// Load the game
|
||||
assert.equal(loadGame(), true);
|
||||
Dismantle.restore(); // Call restore to restore defer cooldown
|
||||
|
||||
// The cooldown should be restored
|
||||
assert.ok((Dismantle.deferUntilAt || 0) > Date.now(), 'deferUntilAt should be restored');
|
||||
assert.ok((G.dismantleDeferUntilAt || 0) > Date.now(), 'G.dismantleDeferUntilAt should be restored');
|
||||
|
||||
// checkTrigger should not trigger because cooldown is active
|
||||
Dismantle.checkTrigger();
|
||||
assert.equal(G.dismantleTriggered, false, 'dismantleTriggered should remain false during cooldown');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user