diff options
| author | Dave Chapman <dave@dchapman.com> | 2006-03-28 15:44:01 +0000 |
|---|---|---|
| committer | Dave Chapman <dave@dchapman.com> | 2006-03-28 15:44:01 +0000 |
| commit | 47f4a458d636a889e955e68f896708f1276febc0 (patch) | |
| tree | 99f770c02ef606f0abbdcd332ac39e69830d8007 /apps/plugins/doom/m_random.h | |
| parent | fff7d6157d56f233cad5c2003475e47a5ff809a7 (diff) | |
| download | rockbox-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.h | 148 |
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 |