RNG
rng(seed) returns a deterministic mulberry32 generator. Seed 0 is fine.
import { rng } from "@f0rbit/forge";
const r = rng(1);r.next(); // → number in [0, 1), uniformr.int(0, 9); // → integer in [0, 9] inclusiver.pick([1, 2, 3]); // → Result<T, EngineError>; err({ kind: "empty_array" }) on empty
const enemies = r.fork("enemies"); // independent substreamconst loot = r.fork("loot"); // independent substreamForking
Section titled “Forking”Forking mixes the parent state with a label hash to derive a child seed. Forks let you advance subsystems independently — if you reorder enemy code one day, the loot RNG stream isn’t disturbed. Use forks when you have a clearly-bounded subsystem; one root RNG is fine for small games.
State + restore for snapshot
Section titled “State + restore for snapshot”const s = r.state(); // → number (current internal state, not the seed)r.restore(s); // → identical sequence resumesr.seed; // → original seedSnapshot round-trips rng_state and rng_seed (see Storage / persistence).