diff options
Diffstat (limited to 'src/rng.c')
-rw-r--r-- | src/rng.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/rng.c b/src/rng.c new file mode 100644 index 0000000..96760b8 --- /dev/null +++ b/src/rng.c | |||
@@ -0,0 +1,15 @@ | |||
1 | u16 rng_state; | ||
2 | |||
3 | u32 hash16(u32 input, u32 key) { | ||
4 | u32 hash = input * key; | ||
5 | return ((hash >> 16) ^ hash) & 0xFFFF; | ||
6 | } | ||
7 | |||
8 | u16 rng16() { | ||
9 | rng_state += 0xbadd; | ||
10 | return hash16(rng_state, 0x10de); | ||
11 | } | ||
12 | |||
13 | u32 rng32() { | ||
14 | return (rng16() << 16) | rng16(); | ||
15 | } | ||