aboutsummaryrefslogtreecommitdiff
path: root/src/rand_sys.c
blob: 679ac942b629ee6ee2700a2d277d3753604a400a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include "rand_sys.h"

#define WIN32_LEAN_AND_MEAN
#define NOSERVICE
#define NOMCX
#define NOIME
#include <windows.h>

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