mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
OIV Graphic alignment correction. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@2242 3b4a5df2-a311-0410-b5c6-a8a6f20db521
123 lines
2.8 KiB
C++
123 lines
2.8 KiB
C++
#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;
|
|
// WDS 07/06/2008 fix prerandom
|
|
if (guiPreRandomIndex == MAX_PREGENERATED_NUMS / 2) {
|
|
// [0..(MAX_PREGENERATED_NUMS/2) -1]
|
|
for( unsigned idx = 0; idx < MAX_PREGENERATED_NUMS / 2; ++idx ) {
|
|
guiPreRandomNums[ idx ] = rand();
|
|
}
|
|
} else if (guiPreRandomIndex >= (UINT32)MAX_PREGENERATED_NUMS ) {
|
|
// MAX_PREGENERATED_NUMS/2 .. MAX_PREGENERATED_NUMS-1]
|
|
for( unsigned idx = MAX_PREGENERATED_NUMS / 2; idx < MAX_PREGENERATED_NUMS; ++idx ) {
|
|
guiPreRandomNums[ idx ] = rand();
|
|
}
|
|
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
|