Proper Subversion configuration.
[newkind] / random.c
1 /*
2 * Elite - The New Kind.
3 *
4 * Reverse engineered from the BBC disk version of Elite.
5 * Additional material by C.J.Pinder.
6 *
7 * The original Elite code is (C) I.Bell & D.Braben 1984.
8 * This version re-engineered in C by C.J.Pinder 1999-2001.
9 *
10 * email: <christian@newkind.co.uk>
11 *
12 *
13 */
14
15 /*
16 * random.c
17 */
18
19
20 #include <stdlib.h>
21 #include "allegro.h"
22
23 #include "random.h"
24
25 static int rand_seed;
26
27 /*
28 * Portable random number generator implementing the recursion:
29 * IX = 16807 * IX MOD (2**(31) - 1)
30 * Using only 32 bits, including sign.
31 *
32 * Taken from "A Guide to Simulation" by Bratley, Fox and Schrage.
33 */
34
35 int randint (void)
36 {
37 int k1;
38 int ix = rand_seed;
39
40 k1 = ix / 127773;
41 ix = 16807 * (ix - k1 * 127773) - k1 * 2836;
42 if (ix < 0)
43 ix += 2147483647;
44 rand_seed = ix;
45
46 return ix;
47 }
48
49
50 void set_rand_seed (int seed)
51 {
52 rand_seed = seed;
53 }
54
55
56 int get_rand_seed (void)
57 {
58 return rand_seed;
59 }
60
61 int rand255 (void)
62 {
63 return (randint() & 255);
64 }