/** Sorteio determinístico (mulberry32). Único ponto de aleatoriedade da lógica do jogo. */ /** Estado inicial uint32 a partir de uma semente; 0 vira 0x9e3779b9. */ export function semear(semente: number): number { const estado = semente >>> 0; return estado === 0 ? 0x9e3779b9 : estado; } /** Avança `p.rng` e devolve um número em [0, 1). */ export function sortear(p: { rng: number }): number { p.rng = (p.rng + 0x6d2b79f5) >>> 0; let t = p.rng; t = Math.imul(t ^ (t >>> 15), t | 1); t ^= t + Math.imul(t ^ (t >>> 7), t | 61); return ((t ^ (t >>> 14)) >>> 0) / 4294967296; } /** Inteiro de 0 a n−1. */ export function sortearInteiro(p: { rng: number }, n: number): number { return Math.floor(sortear(p) * n); }