OSDN Git Service

Initial revision
[hengband/hengband.git] / src / z-rand.h
1 /* File: z-rand.h */
2
3 #ifndef INCLUDED_Z_RAND_H
4 #define INCLUDED_Z_RAND_H
5
6 #include "h-basic.h"
7
8
9
10 /**** Available constants ****/
11
12
13 /*
14  * Random Number Generator -- Degree of "complex" RNG -- see "misc.c"
15  * This value is hard-coded at 63 for a wide variety of reasons.
16  */
17 #define RAND_DEG 63
18
19
20
21
22 /**** Available macros ****/
23
24
25 /*
26  * Generates a random long integer X where O<=X<M.
27  * The integer X falls along a uniform distribution.
28  * For example, if M is 100, you get "percentile dice"
29  */
30 #define rand_int(M) \
31         ((s32b)Rand_div(M))
32
33 /*
34  * Generates a random long integer X where A<=X<=B
35  * The integer X falls along a uniform distribution.
36  * Note: rand_range(0,N-1) == rand_int(N)
37  */
38 #define rand_range(A,B) \
39         ((A) + (rand_int(1+(B)-(A))))
40
41 /*
42  * Generate a random long integer X where A-D<=X<=A+D
43  * The integer X falls along a uniform distribution.
44  * Note: rand_spread(A,D) == rand_range(A-D,A+D)
45  */
46 #define rand_spread(A,D) \
47         ((A) + (rand_int(1+(D)+(D))) - (D))
48
49
50 /*
51  * Generate a random long integer X where 1<=X<=M
52  * Also, "correctly" handle the case of M<=1
53  */
54 #define randint(M) \
55         (rand_int(M) + 1)
56
57
58 /*
59  * Evaluate to TRUE "P" percent of the time
60  */
61 #define magik(P) \
62         (rand_int(100) < (P))
63
64
65 #define one_in_(X) \
66         (rand_int(X) == 0)
67
68 /*
69  * Evaluate to TRUE "S" percent of the time
70  */
71 #define saving_throw(S) \
72         (rand_int(100) < (S))
73
74
75 /**** Available Variables ****/
76
77 extern bool Rand_quick;
78 extern u32b Rand_value;
79 extern u16b Rand_place;
80 extern u32b Rand_state[RAND_DEG];
81
82
83 /**** Available Functions ****/
84
85 extern void Rand_state_init(u32b seed);
86 extern s32b Rand_mod(s32b m);
87 extern s32b Rand_div(u32b m);
88 extern s16b randnor(int mean, int stand);
89 extern s16b damroll(int num, int sides);
90 extern s16b maxroll(int num, int sides);
91
92
93 #endif
94
95