diff --git a/config/GMPE01_00/rels/m407dll/symbols.txt b/config/GMPE01_00/rels/m407dll/symbols.txt index 4098a254..edfc4c98 100644 --- a/config/GMPE01_00/rels/m407dll/symbols.txt +++ b/config/GMPE01_00/rels/m407dll/symbols.txt @@ -180,23 +180,23 @@ lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data: lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float -lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float -lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float -lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float -lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 data:float -lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 data:float -lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 data:float -lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 data:float -lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 data:float -lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 data:float -lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 data:float -lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 data:float -lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 data:float -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 data:double -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0xC data:4byte -lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0xC data:4byte -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data:float +lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 scope:local data:float +lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 scope:local data:float +lbl_1_rodata_19C = .rodata:0x0000019C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A4 = .rodata:0x000001A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1A8 = .rodata:0x000001A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1AC = .rodata:0x000001AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B0 = .rodata:0x000001B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B4 = .rodata:0x000001B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1B8 = .rodata:0x000001B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1BC = .rodata:0x000001BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_1DC = .rodata:0x000001DC; // type:object size:0xC scope:local data:4byte +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float diff --git a/configure.py b/configure.py index d099d8f9..dc33a548 100644 --- a/configure.py +++ b/configure.py @@ -840,7 +840,7 @@ config.libs = [ Object(NonMatching, "REL/m407dll/whomp.c"), Object(Matching, "REL/m407dll/whomp_score.c"), Object(Matching, "REL/m407dll/effect.c"), - Object(NonMatching, "REL/m407dll/main.c"), + Object(Matching, "REL/m407dll/main.c"), Object(NonMatching, "REL/m407dll/score.c"), } ), diff --git a/src/REL/m407dll/main.c b/src/REL/m407dll/main.c new file mode 100644 index 00000000..99f91349 --- /dev/null +++ b/src/REL/m407dll/main.c @@ -0,0 +1,575 @@ +#include "game/object.h" +#include "game/gamework_data.h" +#include "game/minigame_seq.h" +#include "game/wipe.h" +#include "game/audio.h" +#include "game/hsfman.h" + +s32 bssPad2; +Process* lbl_1_bss_3980; +omObjData* lbl_1_bss_397C; +s16 lbl_1_bss_3978; + +s32 fn_1_4C0(s32 arg0); + +void fn_1_4D0C(void); +void fn_1_4D54(void); +void fn_1_4E8C(void); +void fn_1_4FAC(void); +void fn_1_50E8(void); +void fn_1_51E4(void); +void fn_1_52AC(void); +void fn_1_53B8(void); +void fn_1_5574(void); +void fn_1_5630(void); +s16 fn_1_5804(void); +void fn_1_5A80(void); +void fn_1_5BB0(void); +void fn_1_4B7C(void); +void fn_1_4C6C(omObjData* obj); +void fn_1_4C3C(s32 arg0); +void fn_1_568(s16 arg0, s16 arg1, s16 arg2); +s32 fn_1_508(u8 arg0); +s32 fn_1_53C(u8 arg0); +void fn_1_3C4(u8 arg0); + +typedef void (*ObjFuncs)(void); +//data +ObjFuncs lbl_1_data_2A8[] = { + fn_1_4D0C, + fn_1_4D54, + fn_1_4E8C, + fn_1_4FAC, + fn_1_50E8, + fn_1_51E4, + fn_1_52AC, + fn_1_53B8, + fn_1_5574, + fn_1_5630, + fn_1_5A80, + fn_1_5BB0, + fn_1_4B7C +}; + +typedef struct unkDominationData5 { + u32 unk_00; + s16 unk_04; + s16 unk_06; + s16 unk_08; + char unk_0A[6]; + s16 unk_10; + char unk_12[10]; + s16 unk_1C[4]; + s16 unk_24; + char unk_26[2]; + Vec unk_28; + Vec unk_34; + f32 unk_40; + s32 unk_44; +} unkDominationData5; + +void fn_1_4980(Process* arg0) { + s32 i; + unkDominationData5* temp_r31; + + lbl_1_bss_3980 = arg0; + lbl_1_bss_397C = omAddObjEx(lbl_1_bss_3980, 0x40, 0U, 0U, 0, fn_1_4C6C); + lbl_1_bss_397C->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x48, 0x10000000U); + temp_r31 = lbl_1_bss_397C->data; + Hu3DShadowCreate(45.0f, 10.0f, 10000.0f); + Hu3DShadowTPLvlSet(0.6f); + fn_1_1B1C(lbl_1_bss_3980); + lbl_1_bss_3978 = GWMGRecordGet(1); + + if (lbl_1_bss_3978 == 0) { + lbl_1_bss_3978 = 0x96; + } + + fn_1_14F0(lbl_1_bss_3980, lbl_1_bss_3978); + fn_1_F4(lbl_1_bss_3980); + fn_1_2354(lbl_1_bss_3980); + fn_1_3AC8(lbl_1_bss_3980); + fn_1_41CC(lbl_1_bss_3980); + fn_1_5C5C(lbl_1_bss_3980, lbl_1_bss_3978); + WipeCreate(1, 0, 0x3C); + temp_r31->unk_06 = -1; + temp_r31->unk_08 = -1; + temp_r31->unk_24 = 0; + + for (i = 0; i < 4; i++) { + temp_r31->unk_1C[i] = -1; + } + + fn_1_5F40(0); + fn_1_4C3C(0); +} + +void fn_1_4B7C(void) { + unkDominationData5* temp_r31; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_04 == 0) { + WipeCreate(2, 0, 0x3C); + temp_r31->unk_04++; + } + if (WipeStatGet() == 0) { + HuAudFadeOut(100); + + if (temp_r31->unk_06 != -1) { + MGSeqKill(temp_r31->unk_06); + } + + if (temp_r31->unk_08 != -1) { + MGSeqKill(temp_r31->unk_08); + } + + fn_1_194(); + fn_1_1CA8(); + fn_1_15D8(); + fn_1_3B68(); + fn_1_44F4(); + fn_1_5ECC(); + omOvlReturnEx(1, 1); + } +} + +void fn_1_4C3C(s32 arg0) { + unkDominationData5* temp_r31; + + temp_r31 = lbl_1_bss_397C->data; + temp_r31->unk_00 = arg0; + temp_r31->unk_04 = 0; +} + +void fn_1_4C6C(omObjData* obj) { + unkDominationData5* temp_r30; + unkDominationData5* temp_r31; + + temp_r30 = lbl_1_bss_397C->data; + lbl_1_data_2A8[temp_r30->unk_00](); + + if (omSysExitReq != 0) { + temp_r31 = lbl_1_bss_397C->data; + temp_r31->unk_00 = 0xC; + temp_r31->unk_04 = 0; + omSysExitReq = 0; + } +} + +void fn_1_4D0C(void) { + unkDominationData5* sp8; + unkDominationData5* temp_r31; + + sp8 = lbl_1_bss_397C->data; + temp_r31 = lbl_1_bss_397C->data; + temp_r31->unk_00 = 1; + temp_r31->unk_04 = 0; +} + +f32 lbl_1_data_2DC[4] = {850.0f, 900.0f, 1300.0f, 1500.0f}; +Vec lbl_1_data_2EC = {540.0f, 0.0f, 10000.0f}; +Vec lbl_1_data_2F8 = {-50.0f, -360.0f, 0.0f}; +f32 lbl_1_data_304 = 2670.0f; +Vec lbl_1_data_308 = {437.0f, 0.0f, 5000.0f}; +Vec lbl_1_data_314 = {-50.0f, -360.0f, 0.0f}; +f32 lbl_1_data_320 = 2290.0f; +Vec lbl_1_data_324 = {0.0f, 0.0f, 100.0f}; +Vec lbl_1_data_330 = {-45.0f, -540.0f, 0.0f}; +f32 lbl_1_data_33C = 1910.0f; +Vec lbl_1_data_340 = {0.0f, 0.0f, 100.0f}; +Vec lbl_1_data_34C = {-53.0f, -680.0f, 0.0f}; +f32 lbl_1_data_358 = 1900.0f; + +void fn_1_4D54(void) { + s16 temp_r0; + unkDominationData5* temp_r30; + unkDominationData5* temp_r31; + + temp_r31 = lbl_1_bss_397C->data; + switch (temp_r31->unk_04) { + case 0: + HuAudFXPlay(0x545); + fn_1_1DB0(&lbl_1_data_2EC, &lbl_1_data_2F8, &lbl_1_data_304, 0, 0); + temp_r31->unk_04 = 1; + break; + case 1: + fn_1_1DB0(&lbl_1_data_308, &lbl_1_data_314, &lbl_1_data_320, 0x64, 1); + temp_r31->unk_04 = 2; + break; + case 2: + if (fn_1_1D88() == 0) { + fn_1_1DB0(&lbl_1_data_324, &lbl_1_data_330, &lbl_1_data_33C, 0x6E, 2); + temp_r31->unk_04 = 3; + case 3: + if (fn_1_1D88() == 0) { + temp_r30 = lbl_1_bss_397C->data; + temp_r30->unk_00 = 2; + temp_r30->unk_04 = 0; + return; + } + } + } +} + +void fn_1_4E8C(void) { + s32 i; + unkDominationData5* temp_r29; + unkDominationData5* temp_r31; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_06 == -1) { + temp_r31->unk_06 = MGSeqCreate(3, 0); + temp_r31->unk_44 = HuAudSeqPlay(0x46); + fn_1_2564(); + for (i = 0; i < 4; i++) { + fn_1_568(i, 1, 0x3C); + } + } + if (MGSeqStatGet(temp_r31->unk_06) == 0) { + MGSeqKill(temp_r31->unk_06); + temp_r31->unk_06 = -1; + temp_r31->unk_10 = 0x258; + temp_r31->unk_08 = MGSeqCreate(1, temp_r31->unk_10 / 60, -1, -1); + fn_1_1E4(); + temp_r29 = lbl_1_bss_397C->data; + temp_r29->unk_00 = 3; + temp_r29->unk_04 = 0; + } +} + +void fn_1_4FAC(void) { + s16 temp_r0; + unkDominationData5* temp_r31; + unkDominationData5* temp_r30; + unkDominationData5* temp_r29; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_10 > 0) { + if ((--temp_r31->unk_10 % 60) == 0) { + MGSeqParamSet(temp_r31->unk_08, 1, (temp_r31->unk_10 / 60)); + } + return; + } + + MGSeqParamSet(temp_r31->unk_08, 2, -1); + temp_r31->unk_08 = -1; + HuAudSeqFadeOut(temp_r31->unk_44, 0x64); + fn_1_238(); + fn_1_5804(); + + if (temp_r31->unk_24 > 0) { + temp_r30 = lbl_1_bss_397C->data; + temp_r30->unk_00 = 4; + temp_r30->unk_04 = 0; + return; + } + + temp_r29 = lbl_1_bss_397C->data; + temp_r29->unk_00 = 6; + temp_r29->unk_04 = 0; +} + +void fn_1_50E8(void) { + unkDominationData5* temp_r31; + unkDominationData5* temp_r30; + + temp_r31 = lbl_1_bss_397C->data; + switch (temp_r31->unk_04++) { /* irregular */ + case 0xA: + fn_1_1DB0(&lbl_1_data_340, &lbl_1_data_34C, &lbl_1_data_358, 0xB4, 4); + return; + case 0x32: + fn_1_28C(); + return; + case 0x78: + fn_1_2E0(); + return; + case 0x9A: + fn_1_334(); + return; + case 0xBE: + temp_r31->unk_44 = HuAudSeqPlay(0x3A); + fn_1_25C0(); + temp_r30 = lbl_1_bss_397C->data; + temp_r30->unk_00 = 5; + temp_r30->unk_04 = 0; + return; + } +} + +void fn_1_51E4(void) { + Vec sp8; + unkDominationData5* temp_r30; + unkDominationData5* temp_r31; + + temp_r30 = lbl_1_bss_397C->data; + if ((temp_r30->unk_04++ >= 0xF) || (fn_1_2880() != 0)) { + if (fn_1_2880() == 0) { + fn_1_1CD4(&sp8.z, &sp8.y, &sp8.x); + sp8.x += 33.5f; + fn_1_1CAC(sp8.z, sp8.y, sp8.x); + return; + } + temp_r31 = lbl_1_bss_397C->data; + temp_r31->unk_00 = 6; + temp_r31->unk_04 = 0; + } +} + +void fn_1_52AC(void) { + unkDominationData5* temp_r31; + unkDominationData5* temp_r30; + unkDominationData5* temp_r29; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_04 == 0) { + temp_r31->unk_06 = MGSeqCreate(3, 1); + temp_r31->unk_04++; + HuAudSeqFadeOut(temp_r31->unk_44, 0x64); + } + if (MGSeqStatGet(temp_r31->unk_06) == 0) { + MGSeqKill(temp_r31->unk_06); + temp_r31->unk_06 = -1; + if (temp_r31->unk_08 != 0) { + MGSeqKill(temp_r31->unk_08); + temp_r31->unk_08 = -1; + } + if (temp_r31->unk_24 > 0) { + temp_r30 = lbl_1_bss_397C->data; + temp_r30->unk_00 = 7; + temp_r30->unk_04 = 0; + return; + } + temp_r29 = lbl_1_bss_397C->data; + temp_r29->unk_00 = 0xA; + temp_r29->unk_04 = 0; + } +} + +void fn_1_53B8(void) { + s32 i; + unkDominationData5* temp_r31; + unkDominationData5* temp_r29; + unkDominationData5* temp_r28; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_04 == 0) { + fn_1_1DB0(&temp_r31->unk_28, &temp_r31->unk_34, &temp_r31->unk_40, 0x3C, 4); + temp_r31->unk_04++; + for (i = 0; i < 4; i++) { + if ((fn_1_508(i) == 0) && (fn_1_28B8(i) >= 0x64)) { + GWGameStat.present[0x38] = 1; + } + } + } + if (temp_r31->unk_04 == 0x28) { + fn_1_404(); + for (i = 0; i < temp_r31->unk_24; i++) { + fn_1_2770(temp_r31->unk_1C[i]); + fn_1_568(temp_r31->unk_1C[i], 2, 60); + } + } + if (temp_r31->unk_04 == 0x46) { + for (i = 0; i < temp_r31->unk_24; i++) { + if (!(fn_1_508(temp_r31->unk_1C[i])) && (lbl_1_bss_3978 < fn_1_28D4())) { + temp_r29 = lbl_1_bss_397C->data; + temp_r29->unk_00 = 8; + temp_r29->unk_04 = 0; + return; + } + } + temp_r28 = lbl_1_bss_397C->data; + temp_r28->unk_00 = 9; + temp_r28->unk_04 = 0; + } else { + temp_r31->unk_04++; + } + +} + +void fn_1_5574(void) { + unkDominationData5* temp_r31; + unkDominationData5* temp_r30; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_04 == 0) { + GWMGRecordSet(1, fn_1_28D4()); + temp_r31->unk_06 = MGSeqCreate(0xE, fn_1_28D4()); + fn_1_5F40(1); + temp_r31->unk_04++; + return; + } + if (MGSeqStatGet(temp_r31->unk_06) == 0) { + temp_r30 = lbl_1_bss_397C->data; + temp_r30->unk_00 = 9; + temp_r30->unk_04 = 0; + } +} + +void fn_1_5630(void) { + unkDominationData5* temp_r31; + unkDominationData5* temp_r29; + s32 temp_r28; + s16 temp_r27; + s32 temp_r26; + s32 coins; + s32 coins2; + s32 temp_r23; + s32 temp_r22; + s32 temp_r21; + s32 i; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_04 == 0) { + for (i = 0; i < 4; i++) { + if (fn_1_53C(i) == 0) { + return; + } + } + if (temp_r31->unk_24 == 0) { + temp_r31->unk_06 = MGSeqCreate(3, 2); + HuAudSStreamPlay(4); + } else { + temp_r21 = fn_1_4C0(temp_r31->unk_1C[3]); + temp_r22 = fn_1_4C0(temp_r31->unk_1C[2]); + temp_r23 = fn_1_4C0(temp_r31->unk_1C[1]); + temp_r31->unk_06 = MGSeqCreate(5, 3, fn_1_4C0(temp_r31->unk_1C[0]), temp_r23, temp_r22, temp_r21); + for (i = 0; i < 4; i++) { + if (temp_r31->unk_1C[i] != -1) { + + fn_1_3C4(temp_r31->unk_1C[i]); + temp_r26 = temp_r31->unk_1C[i]; + coins = GWPlayer[temp_r26].coin_win; + coins2 = coins; + temp_r27 = coins2 + 0xA; + temp_r28 = temp_r31->unk_1C[i]; + if (_CheckFlag(0x1000CU) == 0) { + GWPlayer[temp_r28].coin_win = temp_r27; + } + } + } + HuAudSStreamPlay(1); + } + + } + if (temp_r31->unk_04++ >= 0xD2) { + MGSeqKill(temp_r31->unk_06); + temp_r31->unk_06 = -1; + temp_r29 = lbl_1_bss_397C->data; + temp_r29->unk_00 = 0xC; + temp_r29->unk_04 = 0; + } +} + +s16 fn_1_5804(void) { + f32 var_f31; + f32 var_f30; + s16 temp_r28; + s16 temp_r3; + s16 var_r29; + s32 i; + s32 var_r27; + s32 var_r26; + + s32 var_r30; + unkDominationData5* temp_r31; + + var_r27 = 0; + var_r26 = 0; + temp_r31 = lbl_1_bss_397C->data; + var_r29 = 0; + + for (i = 0; i < 4; i++) { + temp_r28 = fn_1_28B8(i); + if (temp_r28 > var_r29) { + var_r29 = temp_r28; + } + } + + for (i = 0; i < 4; i++) { + temp_r28 = fn_1_28B8(i); + if (var_r29 == temp_r28) { + if (var_r29 > 0) { + temp_r31->unk_1C[temp_r31->unk_24++] = i; + fn_1_388((u8) i, 1); + } + if (var_r27 == 0) { + var_r27 = 1; + var_f31 = 400.0f * i; + } else { + var_r26 = 1; + var_f30 = 400.0f * i; + } + } else { + fn_1_388((u8) i, 2); + } + } + if (var_r26 == 0) { + var_f30 = var_f31; + } + temp_r31->unk_28.x = (600.0f - (0.5f * (var_f30 + var_f31))); + temp_r31->unk_28.y = 250.0f; + temp_r31->unk_28.z = (200.0f * ((s16) var_r29 + 2)); + temp_r31->unk_34.x = -42.0f; + temp_r31->unk_34.y = -720.0f; + temp_r31->unk_34.z = 0.0f; + temp_r31->unk_40 = lbl_1_data_2DC[(s32) ((var_f30 - var_f31) / 400.0f)]; + return var_r29; +} + +void fn_1_5A80(void) { + s32 sp20; + s32 sp1C; + Vec sp18 = {0.0f, 0.0f, -300.0f}; + Vec spC = {-40.0f, -720.0f, 0.0f}; + f32 sp8; + s16 temp_r0; + s16 temp_r3; + unkDominationData5* temp_r30; + unkDominationData5* temp_r31; + + sp8 = 1420.0f; + temp_r31 = lbl_1_bss_397C->data; + switch (temp_r31->unk_04++) { + case 0x0: + MGSeqKill(temp_r31->unk_08); + temp_r31->unk_08 = -1; + fn_1_1DB0(&sp18, &spC, &sp8, 0x78, 4); + return; + case 0xA: + fn_1_5F40(0); + fn_1_28C(); + return; + case 0x78: + fn_1_404(); + temp_r30 = lbl_1_bss_397C->data; + temp_r30->unk_00 = 9; + temp_r30->unk_04 = 0; + return; + /* fallthrough */ + case 0x3C: + break; + } + +} + +void fn_1_5BB0(void) { + unkDominationData5* temp_r30; + unkDominationData5* temp_r31; + + temp_r31 = lbl_1_bss_397C->data; + if (temp_r31->unk_04 == 0) { + temp_r31->unk_06 = MGSeqCreate(3, 2); + temp_r31->unk_04++; + } + if (MGSeqStatGet(temp_r31->unk_06) == 0) { + MGSeqKill(temp_r31->unk_06); + temp_r31->unk_06 = -1; + temp_r30 = lbl_1_bss_397C->data; + temp_r30->unk_00 = 0xC; + temp_r30->unk_04 = 0; + } +} + +f32 pad4[1] = {0.0f}; +const f32 pad5 = 0.0f; \ No newline at end of file diff --git a/src/REL/m407dll/player.c b/src/REL/m407dll/player.c index abe40dce..c907f00d 100644 --- a/src/REL/m407dll/player.c +++ b/src/REL/m407dll/player.c @@ -56,7 +56,7 @@ void fn_1_99C(omObjData*); void fn_1_A1C(omObjData* arg0); void fn_1_26CC(u8); void fn_1_4544(s32, s32, f32, f32, f32); -s16 fn_1_28B8(u8); +s16 fn_1_28B8(u8); //s32 fn_1_28B8(s32); s16 fn_1_28E4(u8); double cos(double x); double sin(double x);