Fix frandom
Mario Party 7 left a copy of the function which revealed that it took a parameter
This commit is contained in:
parent
8c72dd1db5
commit
38ddfa01fc
1 changed files with 12 additions and 13 deletions
|
|
@ -2,26 +2,25 @@
|
|||
|
||||
static u32 frand_seed;
|
||||
|
||||
static inline u32 frandom(void)
|
||||
static inline u32 frandom(u32 param)
|
||||
{
|
||||
u32 rand = frand_seed;
|
||||
s32 rand2, rand3;
|
||||
|
||||
if (rand == 0) {
|
||||
rand = rand8();
|
||||
rand = rand ^ (s64)OSGetTime();
|
||||
rand ^= 0xD826BC89;
|
||||
if (param == 0) {
|
||||
param = rand8();
|
||||
param = param ^ (s64)OSGetTime();
|
||||
param ^= 0xD826BC89;
|
||||
}
|
||||
|
||||
rand2 = rand / (u32)0x1F31D;
|
||||
rand3 = rand - (rand2 * 0x1F31D);
|
||||
rand = rand2 * 0xB14;
|
||||
rand = rand - rand3 * 0x41A7;
|
||||
return rand;
|
||||
rand2 = param / (u32)0x1F31D;
|
||||
rand3 = param - (rand2 * 0x1F31D);
|
||||
param = rand2 * 0xB14;
|
||||
param = param - rand3 * 0x41A7;
|
||||
return param;
|
||||
}
|
||||
|
||||
u32 frand(void) {
|
||||
return frand_seed = frandom();
|
||||
return frand_seed = frandom(frand_seed);
|
||||
}
|
||||
|
||||
f32 frandf(void) {
|
||||
|
|
@ -34,7 +33,7 @@ f32 frandf(void) {
|
|||
|
||||
u32 frandmod(u32 arg0) {
|
||||
u32 ret;
|
||||
frand_seed = frandom();
|
||||
frand_seed = frandom(frand_seed);
|
||||
ret = (frand_seed & 0x7FFFFFFF)%arg0;
|
||||
return ret;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue