UNPKG

squirrel-noise

Version:

A typescript implementation of Squirrel Eiserloh's noise based RNG explained at GDC

30 lines (27 loc) 910 B
/** * Outputs a pseudo-random number between 0 and 1 based on the seed and the step * @param seed the seed of the noise * @param step the step of the noise * @see https://www.youtube.com/watch?v=LWFzPP8ZbdU */ export function squirrelNoise(seed: number, step: number) { const BIT_NOISE1 = 0x68E31DA4; const BIT_NOISE2 = 0xB5297A4D; const BIT_NOISE3 = 0x1B56C4E9; let mangled_bits = step; mangled_bits *= BIT_NOISE1; mangled_bits += seed; mangled_bits ^= mangled_bits >> 8; mangled_bits += BIT_NOISE2; mangled_bits ^= mangled_bits << 8; mangled_bits *= BIT_NOISE3; mangled_bits ^= mangled_bits >> 8; return mangled_bits / (2**31 - 1); } /** * Creates a seeded random number generator with the given seed * @param seed the seed of the noise */ export function seededSquirrelNoise(seed: number) { return (step: number) => squirrelNoise(seed, step); }