Proper Subversion configuration.
[newkind] / random.c
CommitLineData
84bbd123 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
25static 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
35int 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
50void set_rand_seed (int seed)
51{
52 rand_seed = seed;
53}
54
55
56int get_rand_seed (void)
57{
58 return rand_seed;
59}
60
61int rand255 (void)
62{
63 return (randint() & 255);
64}