mirror of
https://gitlab.com/ryandwyer/perfect-dark
synced 2026-07-03 03:42:52 -04:00
93 lines
2.1 KiB
C
93 lines
2.1 KiB
C
#include <ultra64.h>
|
|
#include "constants.h"
|
|
#include "game/acosasin.h"
|
|
#include "bss.h"
|
|
#include "data.h"
|
|
#include "types.h"
|
|
|
|
u16 var8006ae90[] = {
|
|
0x8000, 0x7eba, 0x7d74, 0x7c2d, 0x7ae7, 0x79a0, 0x7859, 0x7711,
|
|
0x75c9, 0x7480, 0x7337, 0x71ec, 0x70a1, 0x6f55, 0x6e07, 0x6cb8,
|
|
0x6b68, 0x6a17, 0x68c4, 0x6770, 0x661a, 0x64c1, 0x6367, 0x620b,
|
|
0x60ad, 0x5f4c, 0x5de9, 0x5c83, 0x5b1a, 0x59ae, 0x583e, 0x56cb,
|
|
0x5555, 0x53db, 0x525c, 0x50d9, 0x4f51, 0x4dc5, 0x4c32, 0x4a9a,
|
|
0x48fc, 0x4757, 0x45ab, 0x43f7, 0x423a, 0x4075, 0x3ea5, 0x3ccb,
|
|
0x3ae5, 0x38f1, 0x36ef, 0x34dc, 0x32b7, 0x307d, 0x2e2b, 0x2bbd,
|
|
0x292e, 0x2678, 0x2391, 0x206c, 0x1cf6, 0x0000,
|
|
};
|
|
|
|
u16 var8006af0c[] = {
|
|
0x1cf6, 0x1cbb, 0x1c80, 0x1c45, 0x1c08, 0x1bcc, 0x1b8f, 0x1b51,
|
|
0x1b13, 0x1ad4, 0x1a95, 0x1a55, 0x1a14, 0x19d3, 0x1992, 0x194f,
|
|
0x190c, 0x18c9, 0x1884, 0x183f, 0x17f9, 0x17b3, 0x176b, 0x1723,
|
|
0x16da, 0x1690, 0x1645, 0x15f9, 0x15ac, 0x155e, 0x150f, 0x14be,
|
|
0x146d, 0x141a, 0x13c6, 0x1370, 0x1319, 0x12c1, 0x1267, 0x120b,
|
|
0x11ad, 0x114e, 0x10ec, 0x1088, 0x1022, 0x0fb9, 0x0f4d, 0x0ede,
|
|
0x0e6c, 0x0df7, 0x0d7d, 0x0d00, 0x0c7d, 0x0bf4, 0x0b66, 0x0ad0,
|
|
0x0a31, 0x0989, 0x08d3, 0x080e, 0x0734, 0x063d, 0x0518, 0x039a,
|
|
};
|
|
|
|
u16 var8006af8c[] = {
|
|
0x039a, 0x031e, 0x028c, 0x01cd,
|
|
};
|
|
|
|
s32 func0f096890(s32 arg0)
|
|
{
|
|
u16 *array;
|
|
s32 shiftamount;
|
|
s32 mask;
|
|
s32 index;
|
|
s32 value;
|
|
s32 nextvalue;
|
|
|
|
if (arg0 >= 32736) {
|
|
mask = 0x07;
|
|
shiftamount = 3;
|
|
array = var8006af8c;
|
|
arg0 -= 32736;
|
|
} else if (arg0 >= 30720) {
|
|
mask = 0x1f;
|
|
shiftamount = 5;
|
|
array = var8006af0c;
|
|
arg0 -= 30720;
|
|
} else {
|
|
mask = 0x1ff;
|
|
shiftamount = 9;
|
|
array = var8006ae90;
|
|
}
|
|
|
|
index = arg0 >> shiftamount;
|
|
value = array[index];
|
|
nextvalue = array[index + 1];
|
|
|
|
return value - (((value - nextvalue) * (arg0 & mask)) >> shiftamount);
|
|
}
|
|
|
|
u16 acos(s16 arg0)
|
|
{
|
|
s32 value = arg0 >= 0 ? arg0 : -arg0;
|
|
|
|
value = func0f096890(value);
|
|
|
|
if (arg0 < 0) {
|
|
value = 0xffff - value;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
s16 asin(s16 arg0)
|
|
{
|
|
s32 value = arg0 >= 0 ? arg0 : -arg0;
|
|
|
|
value = func0f096890(value);
|
|
|
|
if (arg0 >= 0) {
|
|
value = 0x7fff - value;
|
|
} else {
|
|
value -= 0x8000;
|
|
}
|
|
|
|
return value;
|
|
}
|