summaryrefslogtreecommitdiff
path: root/apps/plugins/doom/m_random.h
diff options
context:
space:
mode:
authorDave Chapman <dave@dchapman.com>2006-03-28 15:44:01 +0000
committerDave Chapman <dave@dchapman.com>2006-03-28 15:44:01 +0000
commit47f4a458d636a889e955e68f896708f1276febc0 (patch)
tree99f770c02ef606f0abbdcd332ac39e69830d8007 /apps/plugins/doom/m_random.h
parentfff7d6157d56f233cad5c2003475e47a5ff809a7 (diff)
downloadrockbox-47f4a458d636a889e955e68f896708f1276febc0.zip
rockbox-47f4a458d636a889e955e68f896708f1276febc0.tar.gz
rockbox-47f4a458d636a889e955e68f896708f1276febc0.tar.bz2
rockbox-47f4a458d636a889e955e68f896708f1276febc0.tar.xz
Patch #2969 - Doom! Currently only working on the H300.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9312 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/doom/m_random.h')
-rw-r--r--apps/plugins/doom/m_random.h148
1 files changed, 148 insertions, 0 deletions
diff --git a/apps/plugins/doom/m_random.h b/apps/plugins/doom/m_random.h
new file mode 100644
index 0000000..67c1a3b
--- /dev/null
+++ b/apps/plugins/doom/m_random.h
@@ -0,0 +1,148 @@
+/* Emacs style mode select -*- C++ -*-
+ *-----------------------------------------------------------------------------
+ *
+ *
+ * PrBoom a Doom port merged with LxDoom and LSDLDoom
+ * based on BOOM, a modified and improved DOOM engine
+ * Copyright (C) 1999 by
+ * id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
+ * Copyright (C) 1999-2000 by
+ * Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * DESCRIPTION:
+ * Functions to return random numbers.
+ *
+ *-----------------------------------------------------------------------------*/
+
+
+#ifndef __M_RANDOM__
+#define __M_RANDOM__
+
+#include "doomtype.h"
+
+// killough 1/19/98: rewritten to use to use a better random number generator
+// in the new engine, although the old one is available for compatibility.
+
+// killough 2/16/98:
+//
+// Make every random number generator local to each control-equivalent block.
+// Critical for demo sync. Changing the order of this list breaks all previous
+// versions' demos. The random number generators are made local to reduce the
+// chances of sync problems. In Doom, if a single random number generator call
+// was off, it would mess up all random number generators. This reduces the
+// chances of it happening by making each RNG local to a control flow block.
+//
+// Notes to developers: if you want to reduce your demo sync hassles, follow
+// this rule: for each call to P_Random you add, add a new class to the enum
+// type below for each block of code which calls P_Random. If two calls to
+// P_Random are not in "control-equivalent blocks", i.e. there are any cases
+// where one is executed, and the other is not, put them in separate classes.
+//
+// Keep all current entries in this list the same, and in the order
+// indicated by the #'s, because they're critical for preserving demo
+// sync. Do not remove entries simply because they become unused later.
+
+typedef enum {
+ pr_skullfly, // #1
+ pr_damage, // #2
+ pr_crush, // #3
+ pr_genlift, // #4
+ pr_killtics, // #5
+ pr_damagemobj, // #6
+ pr_painchance, // #7
+ pr_lights, // #8
+ pr_explode, // #9
+ pr_respawn, // #10
+ pr_lastlook, // #11
+ pr_spawnthing, // #12
+ pr_spawnpuff, // #13
+ pr_spawnblood, // #14
+ pr_missile, // #15
+ pr_shadow, // #16
+ pr_plats, // #17
+ pr_punch, // #18
+ pr_punchangle, // #19
+ pr_saw, // #20
+ pr_plasma, // #21
+ pr_gunshot, // #22
+ pr_misfire, // #23
+ pr_shotgun, // #24
+ pr_bfg, // #25
+ pr_slimehurt, // #26
+ pr_dmspawn, // #27
+ pr_missrange, // #28
+ pr_trywalk, // #29
+ pr_newchase, // #30
+ pr_newchasedir, // #31
+ pr_see, // #32
+ pr_facetarget, // #33
+ pr_posattack, // #34
+ pr_sposattack, // #35
+ pr_cposattack, // #36
+ pr_spidrefire, // #37
+ pr_troopattack, // #38
+ pr_sargattack, // #39
+ pr_headattack, // #40
+ pr_bruisattack, // #41
+ pr_tracer, // #42
+ pr_skelfist, // #43
+ pr_scream, // #44
+ pr_brainscream, // #45
+ pr_cposrefire, // #46
+ pr_brainexp, // #47
+ pr_spawnfly, // #48
+ pr_misc, // #49
+ pr_all_in_one, // #50
+ /* CPhipps - new entries from MBF, mostly unused for now */
+ pr_opendoor, // #51
+ pr_targetsearch, // #52
+ pr_friends, // #53
+ pr_threshold, // #54
+ pr_skiptarget, // #55
+ pr_enemystrafe, // #56
+ pr_avoidcrush, // #57
+ pr_stayonlift, // #58
+ pr_helpfriend, // #59
+ pr_dropoff, // #60
+ pr_randomjump, // #61
+ pr_defect, // #62 // Start new entries -- add new entries below
+
+ // End of new entries
+ NUMPRCLASS // MUST be last item in list
+} pr_class_t;
+
+// The random number generator's state.
+typedef struct {
+ unsigned long seed[NUMPRCLASS]; // Each block's random seed
+ int rndindex, prndindex; // For compatibility support
+} rng_t;
+
+extern rng_t rng; // The rng's state
+
+extern unsigned long rngseed; // The starting seed (not part of state)
+
+// Returns a number from 0 to 255,
+#define M_Random() P_Random(pr_misc)
+
+// As M_Random, but used by the play simulation.
+int P_Random(pr_class_t);
+
+// Fix randoms for demos.
+void M_ClearRandom(void);
+
+#endif