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; }