Files
pmd-red/src/random.c
T
2025-11-18 12:51:01 +01:00

50 lines
1013 B
C

#include "global.h"
#include "globaldata.h"
#include "random.h"
static EWRAM_INIT s32 sPRNGState = {1};
void SeedRng(u8 seed[6])
{
sPRNGState = 54021 + (seed[0] * seed[1]) + (seed[2] * seed[3]) + (seed[4] * seed[5]);
}
static s16 Rand16Bit(void)
{
sPRNGState = (1566083941 * sPRNGState) + 1;
return sPRNGState >> 16;
}
s32 Rand32Bit(void)
{
s32 a = Rand16Bit();
s32 b = Rand16Bit();
return (a << 16) | b;
}
s32 RandInt(s32 maxExclusive)
{
return (((Rand32Bit() & 0xFFFF) * maxExclusive) >> 16) & 0xFFFF;
}
s32 RandRange(s32 minInclusive, s32 maxExclusive)
{
if (minInclusive == maxExclusive)
return minInclusive;
else if (minInclusive < maxExclusive)
return RandInt(maxExclusive - minInclusive) + minInclusive;
else // minclusive > maxExclusive
return RandInt(minInclusive - maxExclusive) + maxExclusive;
}
s32 GetRNGState(void)
{
return sPRNGState;
}
void SetRNGSeed(s32 state)
{
sPRNGState = state;
sPRNGState = Rand32Bit();
}