RANDOM.H (3858B)
1 // 2 // Copyright 2020 Electronic Arts Inc. 3 // 4 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is free 5 // software: you can redistribute it and/or modify it under the terms of 6 // the GNU General Public License as published by the Free Software Foundation, 7 // either version 3 of the License, or (at your option) any later version. 8 9 // TiberianDawn.DLL and RedAlert.dll and corresponding source code is distributed 10 // in the hope that it will be useful, but with permitted additional restrictions 11 // under Section 7 of the GPL. See the GNU General Public License in LICENSE.TXT 12 // distributed with this program. You should have received a copy of the 13 // GNU General Public License along with permitted additional restrictions 14 // with this program. If not, see https://github.com/electronicarts/CnC_Remastered_Collection 15 16 /* $Header: /CounterStrike/RANDOM.H 1 3/03/97 10:25a Joe_bostic $ */ 17 /*********************************************************************************************** 18 *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S *** 19 *********************************************************************************************** 20 * * 21 * Project Name : Command & Conquer * 22 * * 23 * File Name : RANDOM.H * 24 * * 25 * Programmer : Joe L. Bostic * 26 * * 27 * Start Date : 02/27/96 * 28 * * 29 * Last Update : February 27, 1996 [JLB] * 30 * * 31 *---------------------------------------------------------------------------------------------* 32 * Functions: * 33 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 34 35 #ifndef RANDOM_H 36 #define RANDOM_H 37 38 /********************************************************************** 39 ** Enable this define to turn on the random # counters. This must not 40 ** be defined for the release version, or saved games won't work! 41 */ 42 //#define RANDOM_COUNT 43 44 45 /* 46 ** This class functions like a 'magic' int value that returns a random number 47 ** every time it is read. To set the "random seed" for this, just assign a number 48 ** to the object (just as you would if it were a true 'int' value). Take note that although 49 ** this class will return an 'int', the actual significance of the random number is 50 ** limited to 15 bits (0..32767). 51 */ 52 class RandomClass { 53 public: 54 RandomClass(unsigned seed=0); 55 56 operator int(void) {return(operator()());}; 57 int operator() (void); 58 int operator() (int minval, int maxval); 59 60 enum { 61 SIGNIFICANT_BITS=15 // Random number bit significance. 62 }; 63 64 unsigned long Seed; 65 66 #ifdef RANDOM_COUNT 67 unsigned long Count1; 68 unsigned long Count2; 69 #endif 70 71 protected: 72 /* 73 ** Internal working constants that are used to generate the next 74 ** random number. 75 */ 76 enum { 77 MULT_CONSTANT=0x41C64E6D, // K multiplier value. 78 ADD_CONSTANT=0x00003039, // K additive value. 79 THROW_AWAY_BITS=10 // Low bits to throw away. 80 }; 81 }; 82 83 #endif