Precompute return values for RANDOMFRAC()

This commit is contained in:
Ryan Dwyer
2022-10-27 17:45:18 +10:00
parent 010a6851bf
commit ac1cde8b0d
3 changed files with 278 additions and 1 deletions
+275
View File
@@ -3,6 +3,7 @@
#include "game/utils.h"
#include "bss.h"
#include "lib/memp.h"
#include "lib/rng.h"
#include "data.h"
#include "types.h"
@@ -610,3 +611,277 @@ bool func0f177d5c(u8 *arg0, u8 *arg1)
return true;
}
/**
* randomfrac() returns a random float in the range 0.0 to 1.0.
*
* To avoid a bunch of FPU operations, we precompute 256 values within this
* range and then use random() to get an index into the array. It lowers the
* sample size but this is good enough.
*
* To prevent returning 0.0, we offset each value by 0.001953125
* which is half of one increment.
*/
f32 g_Fracs[256] = {
0.001953125f + 1.0f / 256.0f * 0,
0.001953125f + 1.0f / 256.0f * 1,
0.001953125f + 1.0f / 256.0f * 2,
0.001953125f + 1.0f / 256.0f * 3,
0.001953125f + 1.0f / 256.0f * 4,
0.001953125f + 1.0f / 256.0f * 5,
0.001953125f + 1.0f / 256.0f * 6,
0.001953125f + 1.0f / 256.0f * 7,
0.001953125f + 1.0f / 256.0f * 8,
0.001953125f + 1.0f / 256.0f * 9,
0.001953125f + 1.0f / 256.0f * 10,
0.001953125f + 1.0f / 256.0f * 11,
0.001953125f + 1.0f / 256.0f * 12,
0.001953125f + 1.0f / 256.0f * 13,
0.001953125f + 1.0f / 256.0f * 14,
0.001953125f + 1.0f / 256.0f * 15,
0.001953125f + 1.0f / 256.0f * 16,
0.001953125f + 1.0f / 256.0f * 17,
0.001953125f + 1.0f / 256.0f * 18,
0.001953125f + 1.0f / 256.0f * 19,
0.001953125f + 1.0f / 256.0f * 20,
0.001953125f + 1.0f / 256.0f * 21,
0.001953125f + 1.0f / 256.0f * 22,
0.001953125f + 1.0f / 256.0f * 23,
0.001953125f + 1.0f / 256.0f * 24,
0.001953125f + 1.0f / 256.0f * 25,
0.001953125f + 1.0f / 256.0f * 26,
0.001953125f + 1.0f / 256.0f * 27,
0.001953125f + 1.0f / 256.0f * 28,
0.001953125f + 1.0f / 256.0f * 29,
0.001953125f + 1.0f / 256.0f * 30,
0.001953125f + 1.0f / 256.0f * 31,
0.001953125f + 1.0f / 256.0f * 32,
0.001953125f + 1.0f / 256.0f * 33,
0.001953125f + 1.0f / 256.0f * 34,
0.001953125f + 1.0f / 256.0f * 35,
0.001953125f + 1.0f / 256.0f * 36,
0.001953125f + 1.0f / 256.0f * 37,
0.001953125f + 1.0f / 256.0f * 38,
0.001953125f + 1.0f / 256.0f * 39,
0.001953125f + 1.0f / 256.0f * 40,
0.001953125f + 1.0f / 256.0f * 41,
0.001953125f + 1.0f / 256.0f * 42,
0.001953125f + 1.0f / 256.0f * 43,
0.001953125f + 1.0f / 256.0f * 44,
0.001953125f + 1.0f / 256.0f * 45,
0.001953125f + 1.0f / 256.0f * 46,
0.001953125f + 1.0f / 256.0f * 47,
0.001953125f + 1.0f / 256.0f * 48,
0.001953125f + 1.0f / 256.0f * 49,
0.001953125f + 1.0f / 256.0f * 50,
0.001953125f + 1.0f / 256.0f * 51,
0.001953125f + 1.0f / 256.0f * 52,
0.001953125f + 1.0f / 256.0f * 53,
0.001953125f + 1.0f / 256.0f * 54,
0.001953125f + 1.0f / 256.0f * 55,
0.001953125f + 1.0f / 256.0f * 56,
0.001953125f + 1.0f / 256.0f * 57,
0.001953125f + 1.0f / 256.0f * 58,
0.001953125f + 1.0f / 256.0f * 59,
0.001953125f + 1.0f / 256.0f * 60,
0.001953125f + 1.0f / 256.0f * 61,
0.001953125f + 1.0f / 256.0f * 62,
0.001953125f + 1.0f / 256.0f * 63,
0.001953125f + 1.0f / 256.0f * 64,
0.001953125f + 1.0f / 256.0f * 65,
0.001953125f + 1.0f / 256.0f * 66,
0.001953125f + 1.0f / 256.0f * 67,
0.001953125f + 1.0f / 256.0f * 68,
0.001953125f + 1.0f / 256.0f * 69,
0.001953125f + 1.0f / 256.0f * 70,
0.001953125f + 1.0f / 256.0f * 71,
0.001953125f + 1.0f / 256.0f * 72,
0.001953125f + 1.0f / 256.0f * 73,
0.001953125f + 1.0f / 256.0f * 74,
0.001953125f + 1.0f / 256.0f * 75,
0.001953125f + 1.0f / 256.0f * 76,
0.001953125f + 1.0f / 256.0f * 77,
0.001953125f + 1.0f / 256.0f * 78,
0.001953125f + 1.0f / 256.0f * 79,
0.001953125f + 1.0f / 256.0f * 80,
0.001953125f + 1.0f / 256.0f * 81,
0.001953125f + 1.0f / 256.0f * 82,
0.001953125f + 1.0f / 256.0f * 83,
0.001953125f + 1.0f / 256.0f * 84,
0.001953125f + 1.0f / 256.0f * 85,
0.001953125f + 1.0f / 256.0f * 86,
0.001953125f + 1.0f / 256.0f * 87,
0.001953125f + 1.0f / 256.0f * 88,
0.001953125f + 1.0f / 256.0f * 89,
0.001953125f + 1.0f / 256.0f * 90,
0.001953125f + 1.0f / 256.0f * 91,
0.001953125f + 1.0f / 256.0f * 92,
0.001953125f + 1.0f / 256.0f * 93,
0.001953125f + 1.0f / 256.0f * 94,
0.001953125f + 1.0f / 256.0f * 95,
0.001953125f + 1.0f / 256.0f * 96,
0.001953125f + 1.0f / 256.0f * 97,
0.001953125f + 1.0f / 256.0f * 98,
0.001953125f + 1.0f / 256.0f * 99,
0.001953125f + 1.0f / 256.0f * 100,
0.001953125f + 1.0f / 256.0f * 101,
0.001953125f + 1.0f / 256.0f * 102,
0.001953125f + 1.0f / 256.0f * 103,
0.001953125f + 1.0f / 256.0f * 104,
0.001953125f + 1.0f / 256.0f * 105,
0.001953125f + 1.0f / 256.0f * 106,
0.001953125f + 1.0f / 256.0f * 107,
0.001953125f + 1.0f / 256.0f * 108,
0.001953125f + 1.0f / 256.0f * 109,
0.001953125f + 1.0f / 256.0f * 110,
0.001953125f + 1.0f / 256.0f * 111,
0.001953125f + 1.0f / 256.0f * 112,
0.001953125f + 1.0f / 256.0f * 113,
0.001953125f + 1.0f / 256.0f * 114,
0.001953125f + 1.0f / 256.0f * 115,
0.001953125f + 1.0f / 256.0f * 116,
0.001953125f + 1.0f / 256.0f * 117,
0.001953125f + 1.0f / 256.0f * 118,
0.001953125f + 1.0f / 256.0f * 119,
0.001953125f + 1.0f / 256.0f * 120,
0.001953125f + 1.0f / 256.0f * 121,
0.001953125f + 1.0f / 256.0f * 122,
0.001953125f + 1.0f / 256.0f * 123,
0.001953125f + 1.0f / 256.0f * 124,
0.001953125f + 1.0f / 256.0f * 125,
0.001953125f + 1.0f / 256.0f * 126,
0.001953125f + 1.0f / 256.0f * 127,
0.001953125f + 1.0f / 256.0f * 128,
0.001953125f + 1.0f / 256.0f * 129,
0.001953125f + 1.0f / 256.0f * 130,
0.001953125f + 1.0f / 256.0f * 131,
0.001953125f + 1.0f / 256.0f * 132,
0.001953125f + 1.0f / 256.0f * 133,
0.001953125f + 1.0f / 256.0f * 134,
0.001953125f + 1.0f / 256.0f * 135,
0.001953125f + 1.0f / 256.0f * 136,
0.001953125f + 1.0f / 256.0f * 137,
0.001953125f + 1.0f / 256.0f * 138,
0.001953125f + 1.0f / 256.0f * 139,
0.001953125f + 1.0f / 256.0f * 140,
0.001953125f + 1.0f / 256.0f * 141,
0.001953125f + 1.0f / 256.0f * 142,
0.001953125f + 1.0f / 256.0f * 143,
0.001953125f + 1.0f / 256.0f * 144,
0.001953125f + 1.0f / 256.0f * 145,
0.001953125f + 1.0f / 256.0f * 146,
0.001953125f + 1.0f / 256.0f * 147,
0.001953125f + 1.0f / 256.0f * 148,
0.001953125f + 1.0f / 256.0f * 149,
0.001953125f + 1.0f / 256.0f * 150,
0.001953125f + 1.0f / 256.0f * 151,
0.001953125f + 1.0f / 256.0f * 152,
0.001953125f + 1.0f / 256.0f * 153,
0.001953125f + 1.0f / 256.0f * 154,
0.001953125f + 1.0f / 256.0f * 155,
0.001953125f + 1.0f / 256.0f * 156,
0.001953125f + 1.0f / 256.0f * 157,
0.001953125f + 1.0f / 256.0f * 158,
0.001953125f + 1.0f / 256.0f * 159,
0.001953125f + 1.0f / 256.0f * 160,
0.001953125f + 1.0f / 256.0f * 161,
0.001953125f + 1.0f / 256.0f * 162,
0.001953125f + 1.0f / 256.0f * 163,
0.001953125f + 1.0f / 256.0f * 164,
0.001953125f + 1.0f / 256.0f * 165,
0.001953125f + 1.0f / 256.0f * 166,
0.001953125f + 1.0f / 256.0f * 167,
0.001953125f + 1.0f / 256.0f * 168,
0.001953125f + 1.0f / 256.0f * 169,
0.001953125f + 1.0f / 256.0f * 170,
0.001953125f + 1.0f / 256.0f * 171,
0.001953125f + 1.0f / 256.0f * 172,
0.001953125f + 1.0f / 256.0f * 173,
0.001953125f + 1.0f / 256.0f * 174,
0.001953125f + 1.0f / 256.0f * 175,
0.001953125f + 1.0f / 256.0f * 176,
0.001953125f + 1.0f / 256.0f * 177,
0.001953125f + 1.0f / 256.0f * 178,
0.001953125f + 1.0f / 256.0f * 179,
0.001953125f + 1.0f / 256.0f * 180,
0.001953125f + 1.0f / 256.0f * 181,
0.001953125f + 1.0f / 256.0f * 182,
0.001953125f + 1.0f / 256.0f * 183,
0.001953125f + 1.0f / 256.0f * 184,
0.001953125f + 1.0f / 256.0f * 185,
0.001953125f + 1.0f / 256.0f * 186,
0.001953125f + 1.0f / 256.0f * 187,
0.001953125f + 1.0f / 256.0f * 188,
0.001953125f + 1.0f / 256.0f * 189,
0.001953125f + 1.0f / 256.0f * 190,
0.001953125f + 1.0f / 256.0f * 191,
0.001953125f + 1.0f / 256.0f * 192,
0.001953125f + 1.0f / 256.0f * 193,
0.001953125f + 1.0f / 256.0f * 194,
0.001953125f + 1.0f / 256.0f * 195,
0.001953125f + 1.0f / 256.0f * 196,
0.001953125f + 1.0f / 256.0f * 197,
0.001953125f + 1.0f / 256.0f * 198,
0.001953125f + 1.0f / 256.0f * 199,
0.001953125f + 1.0f / 256.0f * 200,
0.001953125f + 1.0f / 256.0f * 201,
0.001953125f + 1.0f / 256.0f * 202,
0.001953125f + 1.0f / 256.0f * 203,
0.001953125f + 1.0f / 256.0f * 204,
0.001953125f + 1.0f / 256.0f * 205,
0.001953125f + 1.0f / 256.0f * 206,
0.001953125f + 1.0f / 256.0f * 207,
0.001953125f + 1.0f / 256.0f * 208,
0.001953125f + 1.0f / 256.0f * 209,
0.001953125f + 1.0f / 256.0f * 210,
0.001953125f + 1.0f / 256.0f * 211,
0.001953125f + 1.0f / 256.0f * 212,
0.001953125f + 1.0f / 256.0f * 213,
0.001953125f + 1.0f / 256.0f * 214,
0.001953125f + 1.0f / 256.0f * 215,
0.001953125f + 1.0f / 256.0f * 216,
0.001953125f + 1.0f / 256.0f * 217,
0.001953125f + 1.0f / 256.0f * 218,
0.001953125f + 1.0f / 256.0f * 219,
0.001953125f + 1.0f / 256.0f * 220,
0.001953125f + 1.0f / 256.0f * 221,
0.001953125f + 1.0f / 256.0f * 222,
0.001953125f + 1.0f / 256.0f * 223,
0.001953125f + 1.0f / 256.0f * 224,
0.001953125f + 1.0f / 256.0f * 225,
0.001953125f + 1.0f / 256.0f * 226,
0.001953125f + 1.0f / 256.0f * 227,
0.001953125f + 1.0f / 256.0f * 228,
0.001953125f + 1.0f / 256.0f * 229,
0.001953125f + 1.0f / 256.0f * 230,
0.001953125f + 1.0f / 256.0f * 231,
0.001953125f + 1.0f / 256.0f * 232,
0.001953125f + 1.0f / 256.0f * 233,
0.001953125f + 1.0f / 256.0f * 234,
0.001953125f + 1.0f / 256.0f * 235,
0.001953125f + 1.0f / 256.0f * 236,
0.001953125f + 1.0f / 256.0f * 237,
0.001953125f + 1.0f / 256.0f * 238,
0.001953125f + 1.0f / 256.0f * 239,
0.001953125f + 1.0f / 256.0f * 240,
0.001953125f + 1.0f / 256.0f * 241,
0.001953125f + 1.0f / 256.0f * 242,
0.001953125f + 1.0f / 256.0f * 243,
0.001953125f + 1.0f / 256.0f * 244,
0.001953125f + 1.0f / 256.0f * 245,
0.001953125f + 1.0f / 256.0f * 246,
0.001953125f + 1.0f / 256.0f * 247,
0.001953125f + 1.0f / 256.0f * 248,
0.001953125f + 1.0f / 256.0f * 249,
0.001953125f + 1.0f / 256.0f * 250,
0.001953125f + 1.0f / 256.0f * 251,
0.001953125f + 1.0f / 256.0f * 252,
0.001953125f + 1.0f / 256.0f * 253,
0.001953125f + 1.0f / 256.0f * 254,
0.001953125f + 1.0f / 256.0f * 255,
};
f32 randomfrac(void)
{
return g_Fracs[(random() & 0x3fc) >> 2];
}
+1 -1
View File
@@ -39,7 +39,7 @@
#define MIXCOLOUR(dialog, property) dialog->transitionfrac < 0.0f ? g_MenuColourPalettes[dialog->type].property : colourBlend(g_MenuColourPalettes[dialog->type2].property, g_MenuColourPalettes[dialog->type].property, dialog->colourweight)
#define MPCHR(index) ((index) < 4 ? &g_PlayerConfigsArray[index].base : &g_BotConfigsArray[(index) - 4].base)
#define PLAYERCOUNT() g_Vars.playercount
#define RANDOMFRAC() (random() * (1.0f / U32_MAX))
#define RANDOMFRAC() randomfrac()
#define SECSTOTIME240(secs) (secs * 240)
#define SECSTOTIME60(secs) (secs * 60)
#define PFS(device) (device == SAVEDEVICE_GAMEPAK ? NULL : &g_Pfses[device])
+2
View File
@@ -8,4 +8,6 @@ u32 random(void);
void rngSetSeed(u32 seed);
u32 rngRotateSeed(u64 *value);
f32 randomfrac(void);
#endif