More efficient Random calls in Shuffle
This commit is contained in:
parent
168b005406
commit
e9bd8979b0
1 changed files with 5 additions and 2 deletions
|
@ -1,5 +1,8 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
|
#if MODERN
|
||||||
|
#include <alloca.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
EWRAM_DATA static u8 sUnknown = 0;
|
EWRAM_DATA static u8 sUnknown = 0;
|
||||||
EWRAM_DATA static u32 sRandCount = 0;
|
EWRAM_DATA static u32 sRandCount = 0;
|
||||||
|
@ -37,7 +40,7 @@ u16 Random2(void)
|
||||||
--n; \
|
--n; \
|
||||||
while (n > 1) \
|
while (n > 1) \
|
||||||
{ \
|
{ \
|
||||||
int j = Random() % (n+1); \
|
int j = (Random() * (n+1)) >> 16; \
|
||||||
SWAP(data[n], data[j], tmp); \
|
SWAP(data[n], data[j], tmp); \
|
||||||
--n; \
|
--n; \
|
||||||
}
|
}
|
||||||
|
@ -66,7 +69,7 @@ void ShuffleN(void *data, size_t n, size_t size)
|
||||||
--n;
|
--n;
|
||||||
while (n > 1)
|
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(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 + n*size, (u8 *)data + j*size, size); // data[n] = data[j];
|
||||||
memcpy((u8 *)data + j*size, tmp, size); // data[j] = tmp;
|
memcpy((u8 *)data + j*size, tmp, size); // data[j] = tmp;
|
||||||
|
|
Loading…
Reference in a new issue