diff --git a/sc2/src/sc2code/libs/math/Makeinfo b/sc2/src/sc2code/libs/math/Makeinfo index fc6d5aae7..ac0a85a91 100644 --- a/sc2/src/sc2code/libs/math/Makeinfo +++ b/sc2/src/sc2code/libs/math/Makeinfo @@ -1 +1 @@ -uqm_CFILES="random.c sqrt.c" +uqm_CFILES="random.c random2.c sqrt.c" diff --git a/sc2/src/sc2code/libs/math/random.c b/sc2/src/sc2code/libs/math/random.c index d21cab427..83fcff8cd 100644 --- a/sc2/src/sc2code/libs/math/random.c +++ b/sc2/src/sc2code/libs/math/random.c @@ -61,7 +61,8 @@ static DWORD seed = 12345L; /* random number seed */ DWORD TFB_Random (void) { - if ((seed = A * (seed % Q) - R * (seed / Q)) > M) + seed = A * (seed % Q) - R * (seed / Q); + if (seed > M) return (seed -= M); else if (seed) return (seed); diff --git a/sc2/src/sc2code/libs/math/random.h b/sc2/src/sc2code/libs/math/random.h index b2ac4ec9f..fd982e195 100644 --- a/sc2/src/sc2code/libs/math/random.h +++ b/sc2/src/sc2code/libs/math/random.h @@ -26,6 +26,9 @@ * Copyright (c) 1989, Robert Leyland and Scott Anderson ****************************************************************************/ +#ifndef _RANDOM_H +#define _RANDOM_H + /* ----------------------------DEFINES------------------------------------ */ #define RAND(n) ( (int) ( (unsigned int)TFB_Random() % (n) ) ) @@ -38,3 +41,22 @@ DWORD TFB_SeedRandom (DWORD seed); DWORD TFB_Random (void); + +typedef struct RandomContext RandomContext; + +#ifdef RANDOM2_INTERNAL +struct RandomContext { + DWORD seed; +}; +#endif + +RandomContext *RandomContext_New (void); +void RandomContext_Delete (RandomContext *context); +RandomContext *RandomContext_Copy (const RandomContext *source); +DWORD RandomContext_Random (RandomContext *context); +DWORD RandomContext_SeedRandom (RandomContext *context, DWORD new_seed); + + +#endif /* _RANDOM_H */ + +