More efficient Random calls in Shuffle

This commit is contained in:
Martin Griffin 2023-07-12 20:07:39 +01:00 committed by Philipp AUER
parent 168b005406
commit e9bd8979b0

View File

@ -1,5 +1,8 @@
#include "global.h"
#include "random.h"
#if MODERN
#include <alloca.h>
#endif
EWRAM_DATA static u8 sUnknown = 0;
EWRAM_DATA static u32 sRandCount = 0;
@ -37,7 +40,7 @@ u16 Random2(void)
--n; \
while (n > 1) \
{ \
int j = Random() % (n+1); \
int j = (Random() * (n+1)) >> 16; \
SWAP(data[n], data[j], tmp); \
--n; \
}
@ -66,7 +69,7 @@ void ShuffleN(void *data, size_t n, size_t size)
--n;
while (n > 1)
{
int j = Random() % (n+1);
int j = (Random() * (n+1)) >> 16;
memcpy(tmp, (u8 *)data + n*size, size); // tmp = data[n];
memcpy((u8 *)data + n*size, (u8 *)data + j*size, size); // data[n] = data[j];
memcpy((u8 *)data + j*size, tmp, size); // data[j] = tmp;