diff options
| author | Uneven Prankster <unevenprankster@protonmail.com> | 2023-10-15 21:28:29 -0300 |
|---|---|---|
| committer | Uneven Prankster <unevenprankster@protonmail.com> | 2023-10-15 21:28:29 -0300 |
| commit | 1c0cc775732201f4c4d3ee0d6772be786b3b4aa1 (patch) | |
| tree | f5d692d046868261275c7430a624c3ea9ed75d3d /src/gunner/rand_sys.c | |
| parent | a89f892640cf12f75c7ce18e6e88c70a8d3965ed (diff) | |
A lot has certainly happened!
Diffstat (limited to 'src/gunner/rand_sys.c')
| -rw-r--r-- | src/gunner/rand_sys.c | 41 |
1 files changed, 41 insertions, 0 deletions
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 |
