123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #ifdef JA2_PRECOMPILED_HEADERS
- #include "JA2 SGP ALL.H"
- #elif defined( WIZ8_PRECOMPILED_HEADERS )
- #include "WIZ8 SGP ALL.H"
- #else
- #include "Random.h"
- #endif
- #ifdef PRERANDOM_GENERATOR
- UINT32 guiPreRandomIndex = 0;
- UINT32 guiPreRandomNums[ MAX_PREGENERATED_NUMS ];
- #ifdef JA2BETAVERSION
- UINT32 guiRandoms = 0;
- UINT32 guiPreRandoms = 0;
- BOOLEAN gfCountRandoms = FALSE;
- #endif
- #endif
- void InitializeRandom()
- {
- // Seed the random-number generator with current time so that
- // the numbers will be different every time we run.
- srand( (unsigned) time(NULL) );
- #ifdef PRERANDOM_GENERATOR
- //Pregenerate all of the random numbers.
- for( guiPreRandomIndex = 0; guiPreRandomIndex < MAX_PREGENERATED_NUMS; guiPreRandomIndex++ )
- {
- guiPreRandomNums[ guiPreRandomIndex ] = rand();
- }
- guiPreRandomIndex = 0;
- #endif
- }
- // Returns a pseudo-random integer between 0 and uiRange
- UINT32 Random(UINT32 uiRange)
- {
- // Always return 0, if no range given (it's not an error)
- #ifdef JA2BETAVERSION
- if( gfCountRandoms )
- {
- guiRandoms++;
- }
- #endif
- if (uiRange == 0)
- return(0);
- return rand() * uiRange / RAND_MAX % uiRange;
- }
- BOOLEAN Chance( UINT32 uiChance )
- {
- return (BOOLEAN)(Random( 100 ) < uiChance);
- }
- #ifdef PRERANDOM_GENERATOR
- UINT32 PreRandom( UINT32 uiRange )
- {
- UINT32 uiNum;
- #ifdef JA2BETAVERSION
- if( gfCountRandoms )
- {
- guiPreRandoms++;
- }
- #endif
- if( !uiRange )
- return 0;
- //Extract the current pregenerated number
- uiNum = guiPreRandomNums[ guiPreRandomIndex ] * uiRange / RAND_MAX % uiRange;
- //Replace the current pregenerated number with a new one.
- //This was removed in the name of optimization. Uncomment if you hate recycling.
- //guiPreRandomNums[ guiPreRandomIndex ] = rand();
- //Go to the next index.
- guiPreRandomIndex++;
- if( guiPreRandomIndex >= (UINT32)MAX_PREGENERATED_NUMS )
- guiPreRandomIndex = 0;
- return uiNum;
- }
- BOOLEAN PreChance( UINT32 uiChance )
- {
- return (BOOLEAN)(PreRandom( 100 ) < uiChance);
- }
- #ifdef JA2BETAVERSION
- void CountRandomCalls( BOOLEAN fStart )
- {
- gfCountRandoms = fStart;
- if( fStart )
- {
- guiRandoms = 0;
- guiPreRandoms = 0;
- }
- }
- void GetRandomCalls( UINT32 *puiRandoms, UINT32 *puiPreRandoms )
- {
- *puiRandoms = guiRandoms;
- *puiPreRandoms = guiPreRandoms;
- }
- #endif
- #endif
|