mirror of
https://github.com/pret/pokeemerald.git
synced 2026-05-11 05:24:50 -05:00
50 lines
933 B
C
50 lines
933 B
C
#include "global.h"
|
|
#include "random.h"
|
|
|
|
EWRAM_DATA static u8 sUnknown = 0;
|
|
EWRAM_DATA static u32 sRandCount = 0;
|
|
|
|
// IWRAM common
|
|
u32 gRngValue;
|
|
u32 gRng2Value;
|
|
|
|
u16 Random(void)
|
|
{
|
|
gRngValue = ISO_RANDOMIZE1(gRngValue);
|
|
sRandCount++;
|
|
return gRngValue >> 16;
|
|
}
|
|
|
|
void SeedRng(u16 seed)
|
|
{
|
|
gRngValue = seed;
|
|
sUnknown = 0;
|
|
}
|
|
|
|
void SeedRng2(u16 seed)
|
|
{
|
|
gRng2Value = seed;
|
|
}
|
|
|
|
u16 Random2(void)
|
|
{
|
|
gRng2Value = ISO_RANDOMIZE1(gRng2Value);
|
|
return gRng2Value >> 16;
|
|
}
|
|
|
|
// Returns a random index according to a list of weights
|
|
u8 RandomWeightedIndex(u8 *weights, u8 length) {
|
|
u32 i;
|
|
u16 randomValue;
|
|
u16 weightSum = 0;
|
|
for (i = 0; i < length; i++)
|
|
weightSum += weights[i];
|
|
randomValue = weightSum > 0 ? Random() % weightSum : 0;
|
|
weightSum = 0;
|
|
for (i = 0; i < length; i++) {
|
|
weightSum += weights[i];
|
|
if (randomValue <= weightSum)
|
|
return i;
|
|
}
|
|
}
|