static u16 rng_state = 0; u32 hash16(u32 input, u32 key) { u32 hash = input * key; return ((hash >> 16) ^ hash) & 0xFFFF; } u16 rng16() { rng_state += 0xbadd; u32 ret = hash16(rng_state, 0x10de); rng_state += ret; return ret; } u32 rng32() { return (rng16() << 16) | rng16(); }