Rearange menu of mpegplayer. Add new menu with "settings" and "quit", and remove...
[kugel-rb.git] / apps / plugins / doom / m_random.h
blob67c1a3ba4bc62912c05f3386e9c26f718281e8b4
1 /* Emacs style mode select -*- C++ -*-
2 *-----------------------------------------------------------------------------
5 * PrBoom a Doom port merged with LxDoom and LSDLDoom
6 * based on BOOM, a modified and improved DOOM engine
7 * Copyright (C) 1999 by
8 * id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
9 * Copyright (C) 1999-2000 by
10 * Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25 * 02111-1307, USA.
27 * DESCRIPTION:
28 * Functions to return random numbers.
30 *-----------------------------------------------------------------------------*/
33 #ifndef __M_RANDOM__
34 #define __M_RANDOM__
36 #include "doomtype.h"
38 // killough 1/19/98: rewritten to use to use a better random number generator
39 // in the new engine, although the old one is available for compatibility.
41 // killough 2/16/98:
43 // Make every random number generator local to each control-equivalent block.
44 // Critical for demo sync. Changing the order of this list breaks all previous
45 // versions' demos. The random number generators are made local to reduce the
46 // chances of sync problems. In Doom, if a single random number generator call
47 // was off, it would mess up all random number generators. This reduces the
48 // chances of it happening by making each RNG local to a control flow block.
50 // Notes to developers: if you want to reduce your demo sync hassles, follow
51 // this rule: for each call to P_Random you add, add a new class to the enum
52 // type below for each block of code which calls P_Random. If two calls to
53 // P_Random are not in "control-equivalent blocks", i.e. there are any cases
54 // where one is executed, and the other is not, put them in separate classes.
56 // Keep all current entries in this list the same, and in the order
57 // indicated by the #'s, because they're critical for preserving demo
58 // sync. Do not remove entries simply because they become unused later.
60 typedef enum {
61 pr_skullfly, // #1
62 pr_damage, // #2
63 pr_crush, // #3
64 pr_genlift, // #4
65 pr_killtics, // #5
66 pr_damagemobj, // #6
67 pr_painchance, // #7
68 pr_lights, // #8
69 pr_explode, // #9
70 pr_respawn, // #10
71 pr_lastlook, // #11
72 pr_spawnthing, // #12
73 pr_spawnpuff, // #13
74 pr_spawnblood, // #14
75 pr_missile, // #15
76 pr_shadow, // #16
77 pr_plats, // #17
78 pr_punch, // #18
79 pr_punchangle, // #19
80 pr_saw, // #20
81 pr_plasma, // #21
82 pr_gunshot, // #22
83 pr_misfire, // #23
84 pr_shotgun, // #24
85 pr_bfg, // #25
86 pr_slimehurt, // #26
87 pr_dmspawn, // #27
88 pr_missrange, // #28
89 pr_trywalk, // #29
90 pr_newchase, // #30
91 pr_newchasedir, // #31
92 pr_see, // #32
93 pr_facetarget, // #33
94 pr_posattack, // #34
95 pr_sposattack, // #35
96 pr_cposattack, // #36
97 pr_spidrefire, // #37
98 pr_troopattack, // #38
99 pr_sargattack, // #39
100 pr_headattack, // #40
101 pr_bruisattack, // #41
102 pr_tracer, // #42
103 pr_skelfist, // #43
104 pr_scream, // #44
105 pr_brainscream, // #45
106 pr_cposrefire, // #46
107 pr_brainexp, // #47
108 pr_spawnfly, // #48
109 pr_misc, // #49
110 pr_all_in_one, // #50
111 /* CPhipps - new entries from MBF, mostly unused for now */
112 pr_opendoor, // #51
113 pr_targetsearch, // #52
114 pr_friends, // #53
115 pr_threshold, // #54
116 pr_skiptarget, // #55
117 pr_enemystrafe, // #56
118 pr_avoidcrush, // #57
119 pr_stayonlift, // #58
120 pr_helpfriend, // #59
121 pr_dropoff, // #60
122 pr_randomjump, // #61
123 pr_defect, // #62 // Start new entries -- add new entries below
125 // End of new entries
126 NUMPRCLASS // MUST be last item in list
127 } pr_class_t;
129 // The random number generator's state.
130 typedef struct {
131 unsigned long seed[NUMPRCLASS]; // Each block's random seed
132 int rndindex, prndindex; // For compatibility support
133 } rng_t;
135 extern rng_t rng; // The rng's state
137 extern unsigned long rngseed; // The starting seed (not part of state)
139 // Returns a number from 0 to 255,
140 #define M_Random() P_Random(pr_misc)
142 // As M_Random, but used by the play simulation.
143 int P_Random(pr_class_t);
145 // Fix randoms for demos.
146 void M_ClearRandom(void);
148 #endif