[Medium] [Bug] Spire enemy armor/barrier use Math.random() — non-deterministic, breaks save/load #371

Closed
opened 2026-06-10 20:09:41 +02:00 by Anexim · 1 comment
Owner

Severity: Medium
File: src/lib/game/utils/spire-utils.ts (lines 241-249, 251-261)

Description:
getSpireEnemyArmor and getSpireEnemyBarrier use Math.random() directly instead of a seeded PRNG. While generateSpireFloorState uses a seeded PRNG for room type/count, enemy stats are non-deterministic. This means save/load or re-render could produce different enemy armor values if the room is regenerated.

Impact: State desync on save/load; non-reproducible combat outcomes. Enemy stats may change between sessions.

Fix needed: Use the seeded PRNG (passed as a parameter or derived from the seed) instead of Math.random() for enemy stat generation.

**Severity:** Medium **File:** `src/lib/game/utils/spire-utils.ts` (lines 241-249, 251-261) **Description:** `getSpireEnemyArmor` and `getSpireEnemyBarrier` use `Math.random()` directly instead of a seeded PRNG. While `generateSpireFloorState` uses a seeded PRNG for room type/count, enemy stats are non-deterministic. This means save/load or re-render could produce different enemy armor values if the room is regenerated. **Impact:** State desync on save/load; non-reproducible combat outcomes. Enemy stats may change between sessions. **Fix needed:** Use the seeded PRNG (passed as a parameter or derived from the seed) instead of `Math.random()` for enemy stat generation.
Anexim added the ai:todo label 2026-06-10 20:09:41 +02:00
n8n-gitea was assigned by Anexim 2026-06-10 20:09:41 +02:00
Anexim added ai:done and removed ai:todo labels 2026-06-11 11:38:04 +02:00
Author
Owner

Fixed: Replaced Math.random() with seeded PRNG (makeSeededRandom) in getSpireEnemyArmor and getSpireEnemyBarrier. Both functions now accept an optional seed parameter (defaults to floor-based seed for deterministic per-floor values).

Fixed: Replaced Math.random() with seeded PRNG (makeSeededRandom) in getSpireEnemyArmor and getSpireEnemyBarrier. Both functions now accept an optional seed parameter (defaults to floor-based seed for deterministic per-floor values).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Anexim/Mana-Loop#371