From 1c0cc775732201f4c4d3ee0d6772be786b3b4aa1 Mon Sep 17 00:00:00 2001 From: Uneven Prankster Date: Sun, 15 Oct 2023 21:28:29 -0300 Subject: A lot has certainly happened! --- src/gunner/rand_sys.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/gunner/rand_sys.c (limited to 'src/gunner/rand_sys.c') diff --git a/src/gunner/rand_sys.c b/src/gunner/rand_sys.c new file mode 100644 index 0000000..ffd2a25 --- /dev/null +++ b/src/gunner/rand_sys.c @@ -0,0 +1,41 @@ +typedef struct _FILETIME { + u32 dwLowDateTime; + u32 dwHighDateTime; +} FILETIME; + +#define W32(r) __declspec(dllimport) r __stdcall +W32(void) GetSystemTimeAsFileTime(FILETIME *); + +static u32 state[2]; + +void rand_seed(void) +{ + FILETIME t; + GetSystemTimeAsFileTime(&t); + + u32 val = t.dwLowDateTime; + val ^= val >> 16; + val *= 0x85ebca6b; + val ^= val >> 13; + val *= 0xc2b2ae35; + val ^= val >> 16; + + state[0] = val; + state[1] = val ^ 0x49616e42U; +} + +u32 rand_u32(void) +{ + state[0] = (state[0] << 16) + (state[0] >> 16); + state[0] += state[1]; + state[1] += state[0]; + return state[0]; +} + +i32 rand_range(i32 min, i32 max) +{ + u32 range = (u32)(max - min + 1); + u32 num = rand_u32() % range; + + return min + (i32)num; +} \ No newline at end of file -- cgit v1.2.3