#include #include "constants.h" #include "game/utils.h" #include "bss.h" #include "lib/memp.h" #include "lib/rng.h" #include "data.h" #include "types.h" bool func0f177164(struct coord *arg0, struct coord *arg1) { f32 sqdist = arg0->x * arg0->x + arg0->y * arg0->y + arg0->z * arg0->z; f32 mult; if (sqdist < 0.00001f) { arg0->x = 0; arg0->y = 0; arg0->z = 1; return false; } mult = 1.0f / sqrtf(sqdist); arg1->x = arg0->x * mult; arg1->y = arg0->y * mult; arg1->z = arg0->z * mult; 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]; }