diff --git a/config/GMPE01_00/rels/m409Dll/symbols.txt b/config/GMPE01_00/rels/m409Dll/symbols.txt index 758e9c89..f1bcf978 100644 --- a/config/GMPE01_00/rels/m409Dll/symbols.txt +++ b/config/GMPE01_00/rels/m409Dll/symbols.txt @@ -198,81 +198,81 @@ lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 scope:local data: 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:0x30 data:4byte -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x100 -lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 data:float -lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 data:float -lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 data:float -lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 data:float -lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 data:float -lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 data:float -lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 data:float -lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 data:float -lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 data:float -lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 data:double -lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 data:float -lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 data:float -lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 data:float -lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 data:float -lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 data:double -lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 data:float -lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 data:double -lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 data:double -lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 data:float -lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 data:float -lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 data:float -lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 data:float -lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 data:float -lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 data:float -lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 data:float -lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 data:float -lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x8 data:double -lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 data:float -lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 data:float -lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 data:float -lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 data:float -lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 data:float -lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 data:float -lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 data:float -lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 data:float -lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 data:float -lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 data:float -lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 data:float -lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 data:float -lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 data:float -lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 data:float -lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 data:float -lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 data:float -lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 data:float -lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 data:float -lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 data:float -lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 data:float -lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 data:float -lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 data:float -lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 data:float -lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 data:float -lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 data:float -lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 data:float -lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 data:float -lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 data:float -lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x8 data:double -lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x4 data:float -lbl_1_rodata_3D4 = .rodata:0x000003D4; // type:object size:0x4 data:float -lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 data:float -lbl_1_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 data:float -lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 data:float -lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 data:float -lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x8 data:double -lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x8 data:double -lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 data:float -lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 data:float -lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x8 data:double -lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 data:float -lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 data:double -lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x8 data:double -lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x8 data:double -lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x4 data:float -lbl_1_rodata_42C = .rodata:0x0000042C; // type:object size:0x4 data:float +lbl_1_rodata_1A0 = .rodata:0x000001A0; // type:object size:0x30 scope:local data:4byte +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x100 scope:local +lbl_1_rodata_2D0 = .rodata:0x000002D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D4 = .rodata:0x000002D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2D8 = .rodata:0x000002D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2DC = .rodata:0x000002DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E0 = .rodata:0x000002E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E4 = .rodata:0x000002E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2E8 = .rodata:0x000002E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2EC = .rodata:0x000002EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F0 = .rodata:0x000002F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2F8 = .rodata:0x000002F8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_300 = .rodata:0x00000300; // type:object size:0x4 scope:local data:float +lbl_1_rodata_304 = .rodata:0x00000304; // type:object size:0x4 scope:local data:float +lbl_1_rodata_308 = .rodata:0x00000308; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30C = .rodata:0x0000030C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_310 = .rodata:0x00000310; // type:object size:0x8 scope:local data:double +lbl_1_rodata_318 = .rodata:0x00000318; // type:object size:0x4 scope:local data:float +lbl_1_rodata_320 = .rodata:0x00000320; // type:object size:0x8 scope:local data:double +lbl_1_rodata_328 = .rodata:0x00000328; // type:object size:0x8 scope:local data:double +lbl_1_rodata_330 = .rodata:0x00000330; // type:object size:0x4 scope:local data:float +lbl_1_rodata_334 = .rodata:0x00000334; // type:object size:0x4 scope:local data:float +lbl_1_rodata_338 = .rodata:0x00000338; // type:object size:0x4 scope:local data:float +lbl_1_rodata_33C = .rodata:0x0000033C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_340 = .rodata:0x00000340; // type:object size:0x4 scope:local data:float +lbl_1_rodata_344 = .rodata:0x00000344; // type:object size:0x4 scope:local data:float +lbl_1_rodata_348 = .rodata:0x00000348; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34C = .rodata:0x0000034C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_350 = .rodata:0x00000350; // type:object size:0x8 scope:local data:double +lbl_1_rodata_358 = .rodata:0x00000358; // type:object size:0x4 scope:local data:float +lbl_1_rodata_35C = .rodata:0x0000035C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_360 = .rodata:0x00000360; // type:object size:0x4 scope:local data:float +lbl_1_rodata_364 = .rodata:0x00000364; // type:object size:0x4 scope:local data:float +lbl_1_rodata_368 = .rodata:0x00000368; // type:object size:0x4 scope:local data:float +lbl_1_rodata_36C = .rodata:0x0000036C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_370 = .rodata:0x00000370; // type:object size:0x4 scope:local data:float +lbl_1_rodata_374 = .rodata:0x00000374; // type:object size:0x4 scope:local data:float +lbl_1_rodata_378 = .rodata:0x00000378; // type:object size:0x4 scope:local data:float +lbl_1_rodata_37C = .rodata:0x0000037C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_380 = .rodata:0x00000380; // type:object size:0x4 scope:local data:float +lbl_1_rodata_384 = .rodata:0x00000384; // type:object size:0x4 scope:local data:float +lbl_1_rodata_388 = .rodata:0x00000388; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38C = .rodata:0x0000038C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_390 = .rodata:0x00000390; // type:object size:0x4 scope:local data:float +lbl_1_rodata_394 = .rodata:0x00000394; // type:object size:0x4 scope:local data:float +lbl_1_rodata_398 = .rodata:0x00000398; // type:object size:0x4 scope:local data:float +lbl_1_rodata_39C = .rodata:0x0000039C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A0 = .rodata:0x000003A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A4 = .rodata:0x000003A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3A8 = .rodata:0x000003A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3AC = .rodata:0x000003AC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B0 = .rodata:0x000003B0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B4 = .rodata:0x000003B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3B8 = .rodata:0x000003B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3BC = .rodata:0x000003BC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C0 = .rodata:0x000003C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C4 = .rodata:0x000003C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C8 = .rodata:0x000003C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3D0 = .rodata:0x000003D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D4 = .rodata:0x000003D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3D8 = .rodata:0x000003D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3DC = .rodata:0x000003DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E0 = .rodata:0x000003E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E4 = .rodata:0x000003E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3E8 = .rodata:0x000003E8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3F0 = .rodata:0x000003F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_3F8 = .rodata:0x000003F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3FC = .rodata:0x000003FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_400 = .rodata:0x00000400; // type:object size:0x8 scope:local data:double +lbl_1_rodata_408 = .rodata:0x00000408; // type:object size:0x4 scope:local data:float +lbl_1_rodata_410 = .rodata:0x00000410; // type:object size:0x8 scope:local data:double +lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x8 scope:local data:double +lbl_1_rodata_420 = .rodata:0x00000420; // type:object size:0x8 scope:local data:double +lbl_1_rodata_428 = .rodata:0x00000428; // type:object size:0x4 scope:local data:float +lbl_1_rodata_42C = .rodata:0x0000042C; // type:object size:0x4 scope:local data:float lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 data:float lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 data:float lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 data:float @@ -300,7 +300,7 @@ lbl_1_data_13C = .data:0x0000013C; // type:object size:0x1C lbl_1_data_158 = .data:0x00000158; // type:object size:0x20 lbl_1_data_178 = .data:0x00000178; // type:object size:0x20 lbl_1_data_198 = .data:0x00000198; // type:object size:0x20 -lbl_1_data_1B8 = .data:0x000001B8; // type:object size:0x14 +lbl_1_data_1B8 = .data:0x000001B8; // type:object size:0x14 scope:local jumptable_1_data_1CC = .data:0x000001CC; // type:object size:0x20 scope:local lbl_1_data_1EC = .data:0x000001EC; // type:object size:0x4 data:4byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte diff --git a/configure.py b/configure.py index 0520b41d..60848d77 100644 --- a/configure.py +++ b/configure.py @@ -895,7 +895,7 @@ config.libs = [ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m409Dll/main.c"), Object(Matching, "REL/m409Dll/player.c"), - Object(NonMatching, "REL/m409Dll/cursor.c"), + Object(Matching, "REL/m409Dll/cursor.c"), }, ), Rel( diff --git a/include/REL/m409Dll.h b/include/REL/m409Dll.h index 513ef87e..d79dee5c 100644 --- a/include/REL/m409Dll.h +++ b/include/REL/m409Dll.h @@ -136,45 +136,80 @@ typedef struct _unkStruct7 { typedef struct _unkStruct8Sub { Vec unk0; - char unkC[0xC]; - f32 unk18; - f32 unk1C; - f32 unk20; - char unk24[0x10]; + Vec unkC; + Vec unk18; + char unk24[0xC]; + u8 unk30; + u8 unk31; + u8 unk32; u32 unk34; - char unk38[0x20]; + s16 unk38; + void* unk3C; + void* unk40; + void* unk44; + Vec* unk48; + GXColor unk4C; + GXColor unk50; + struct _unkStruct12* unk54; Vec unk58; Vec unk64; - s16 unk70; - s16 unk72; union { + s16 unk70[0x10]; struct { - s16 unk74; - s16 unk76; + s16 unk70s; + f32 unk74; + f32 unk78; + f32 unk7C; }; - f32 unk74f; }; - f32 unk78; - f32 unk7C; - char unk80[0x10]; } unkStruct8Sub; // sizeof 0x90 typedef struct _unkStruct8 { - char unk0[0x30]; + s16 unk0; + s16 unk2; + u8 unk4; + s16 unk6; + u32 unk8; + Vec unkC; + Vec unk18; + Vec unk24; m409PlayerFunc8 unk30; - char unk34[0x8]; + s16* unk34; + char unk38[0x4]; unkStruct8Sub* unk3C; - char unk40[0x60]; + char unk40[0x8]; + Vec unk48; + Vec unk54; + s16 unk60[0x20]; } unkStruct8; // sizeof 0xA0 +typedef struct _unkStruct9Sub { + AnimData* unk0; + s16 unk4; + s16 unk6; + u32 unk8; + Vec unkC; + Mtx unk18; + GXColor unk48; + u8 unk4C; + s16 unk4E; + s16 unk50; + f32 unk54; + f32 unk58; + f32 unk5C; + f32 unk60; +} unkStruct9Sub; // sizeof 0x64 + typedef struct _unkStruct9 { - char unk0[0x6]; + s16 unk0; + s16 unk2; + s16 unk4; s16 unk6; s16 unk8; s16 unkA; - char unkC[0x4]; + unkStruct9Sub* unkC; unkStruct8* unk10; -} unkStruct9; +} unkStruct9; // sizeof 0x14 typedef struct _unkStruct10 { u8 unk0; @@ -194,6 +229,24 @@ typedef struct _unkStruct10 { f32 unk4C; } unkStruct10; // sizeof 0x50 +typedef struct unkStruct11 { + Vec unk0; + Vec unkC; + Vec unk18; + Vec unk24; +} unkStruct11; // sizeof 0x30 + +typedef struct _unkStruct12 { + s8 unk0; + s8 unk1; + s16 unk2; + HsfVector2f* unk4; + u8 unk8; + s16 unkA; + f32 unkC; + f32 unk10; +} unkStruct12; + // bss // player.c extern omObjData* lbl_1_bss_3A0[4]; @@ -306,28 +359,57 @@ extern void fn_1_B0A0(f32*, f32*, f32*, f32*, f32); extern f32 fn_1_B378(Vec*); extern f32 fn_1_B6A4(Vec*, Vec*, Vec*); extern f32 fn_1_B9E0(Vec*, Vec*, Vec*, Vec*, Vec*); -// ... extern f32 fn_1_BF38(s16); // cursor.c -extern void fn_1_BF88(s32, s32); +extern void fn_1_BF88(s16, s16); extern void fn_1_C0C0(void); +extern void fn_1_C164(unkStruct8*); +extern void fn_1_CB98(ModelData* model, Mtx matrix); +extern unkStruct8* fn_1_CCB0(s16 idx); extern unkStruct8Sub* fn_1_CCCC(s16, s16); -extern s16 fn_1_DA48(s32, s32); -extern void fn_1_DEF4(s16, s32, s32); -extern void fn_1_DF20(s32, s32, s32); -extern void fn_1_E2A8(s16, s32, s32, s32, s32); -extern s32 fn_1_E7C8(s16, s32, s32); -extern void fn_1_E99C(s16, s16, f32, f32, f32); +extern void fn_1_CCF8(unkStruct11**, s16, f32, f32); +extern void fn_1_CE7C(Vec**, s16, Vec*); +extern void fn_1_CF1C(GXColor**, s16, GXColor*); +extern void fn_1_CFC4(Vec**, s16, Vec*); +extern void fn_1_D050(HsfVector2f**, s16, HsfVector2f*); +extern void fn_1_D0E8(unkStruct8Sub*); +extern void fn_1_D430(unkStruct8*); +extern s16 fn_1_DA48(u8, u8); +extern void fn_1_DDB8(s16); +extern void fn_1_DEF4(s16, s16, u8); +extern s16 fn_1_DF20(u32, s16, s16); +extern void fn_1_E228(s16); +extern s32 fn_1_E2A8(s16, u8, u32, s16, s16); +extern s32 fn_1_E7C8(s16, u8, u32); +extern void fn_1_E818(s16, f32, f32, f32); extern void fn_1_E85C(s16, s16, f32, f32, f32); +extern void fn_1_E8CC(s16, f32, f32, f32); +extern void fn_1_E940(s16, f32, f32, f32); +extern void fn_1_E99C(s16, s16, f32, f32, f32); +extern void fn_1_E940(s16, f32, f32, f32); +extern void fn_1_EA24(s16, f32, f32, f32); +extern void fn_1_EAB0(s16, f32, f32, f32); +extern void fn_1_EAF4(s16, s16, f32, f32, f32); +extern void fn_1_EB64(s16, f32, f32, f32); +extern void fn_1_EBD8(s16, f32, f32, f32); extern void fn_1_EC1C(s16, s16, f32, f32, f32); -extern void fn_1_ED00(u8, s32); +extern void fn_1_EC8C(s16, f32, f32, f32); +extern void fn_1_ED00(s16, s32); extern void fn_1_ED44(s16, s16, s32); -extern void fn_1_EE24(u8, s32); -extern void fn_1_EE68(s16, s16, s32); +extern void fn_1_EDB4(s16, s32); +extern void fn_1_EE24(s16, u32); +extern void fn_1_EE68(s16, s16, u32); +extern void fn_1_EED8(s16, u32); +extern s32 fn_1_EF48(s16, s32); +extern s32 fn_1_EFA4(s16, s16, s32); extern void fn_1_F024(s16, s16, u8, u8, u8, u8); extern void fn_1_F098(s16, u8, u8, u8, u8); +extern void fn_1_F110(s16, s16, u8); extern void fn_1_F17C(s16, s16, u8, u8); +extern void fn_1_F1F4(s16, u8); +extern void fn_1_F28C(s16, s16, f32); extern void fn_1_F2F8(s16, s16, u8, f32); -extern void fn_1_F408(s16, s32, s32); -extern void fn_1_F2F8(s16, s16, u8, f32); -extern void fn_1_F478(s16, s16, u8, s32); \ No newline at end of file +extern void fn_1_F370(s16, f32); +extern void fn_1_F408(s16, s16, u8); +extern void fn_1_F478(s16, s16, u8, u8); +extern void fn_1_F4F0(s16, u8); \ No newline at end of file diff --git a/src/REL/m409Dll/cursor.c b/src/REL/m409Dll/cursor.c new file mode 100644 index 00000000..b7a816d0 --- /dev/null +++ b/src/REL/m409Dll/cursor.c @@ -0,0 +1,1208 @@ +#define HUSPR_USE_OLD_DEFS +#include "REL/m409Dll.h" + +#include "game/hsfdraw.h" +#include "game/sprite.h" + +void fn_1_BF88(s16 arg0, s16 arg1) { + s32 var_r31; + s32 var_r31_2; + unkStruct8* var_r29; + unkStruct9Sub* var_r30; + + lbl_1_bss_F0.unk4 = Hu3DHookFuncCreate(fn_1_CB98); + Hu3DModelLayerSet(lbl_1_bss_F0.unk4, 6); + lbl_1_bss_F0.unk0 = arg0; + var_r29 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 * sizeof(unkStruct8), 0x10000000); + lbl_1_bss_F0.unk10 = var_r29; + lbl_1_bss_F0.unk2 = arg1; + var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(unkStruct9Sub), 0x10000000); + lbl_1_bss_F0.unkC = var_r30; + + for (var_r31 = 0; var_r31 < arg0; var_r31++, var_r29++) { + var_r29->unk8 = 0; + } + + for (var_r31 = 0; var_r31 < arg1; var_r31++, var_r30++) { + var_r30->unk6 = 0; + var_r30->unk8 = 0; + } + + lbl_1_bss_F0.unk6 = lbl_1_bss_F0.unk8 = lbl_1_bss_F0.unkA = 0; +} + +void fn_1_C0C0(void) { + s32 var_r31; + + for (var_r31 = 1; var_r31 < lbl_1_bss_F0.unk0; var_r31++) { + fn_1_DDB8(var_r31); + } + + for (var_r31 = 1; var_r31 < lbl_1_bss_F0.unk2; var_r31++) { + fn_1_E228(var_r31); + } + HuMemDirectFree(lbl_1_bss_F0.unk10); + HuMemDirectFree(lbl_1_bss_F0.unkC); + Hu3DModelKill(lbl_1_bss_F0.unk4); +} + +extern u8 texMtxTbl[]; + +void fn_1_C164(unkStruct8* arg0) { + ModelData spEC; + Mtx spBC; + Mtx sp8C; + Mtx sp5C; + Mtx sp2C; + GXColor sp28; + s16 sp8; + GXColorSrc var_r25; + s32 var_r26; + s16 temp_r23; + unkStruct9Sub* temp_r28; + s16 var_r27; + s16 var_r30; + s32 var_r24; + s32 var_r22; + s32 var_r21; + s32 var_r20; + unkStruct8Sub* var_r31; + + mtxRot(sp2C, arg0->unk18.x, arg0->unk18.y, arg0->unk18.z); + PSMTXScale(sp5C, arg0->unk24.x, arg0->unk24.y, arg0->unk24.z); + PSMTXConcat(sp2C, sp5C, sp5C); + mtxTransCat(sp5C, arg0->unkC.x, arg0->unkC.y, arg0->unkC.z); + PSMTXConcat(Hu3DCameraMtx, sp5C, sp8C); + var_r30 = 0; + var_r27 = 0; + sp8 = 0; + + for (var_r26 = GX_TEXMAP0; var_r26 < arg0->unk4; var_r26++) { + temp_r28 = &lbl_1_bss_F0.unkC[arg0->unk34[var_r26]]; + PSMTXRotRad(temp_r28->unk18, 0x5A, 0.0f); + mtxTransCat(temp_r28->unk18, temp_r28->unkC.x, temp_r28->unkC.y, temp_r28->unkC.z); + switch (temp_r28->unk4) { + case 0: + GXLoadTexMtxImm(temp_r28->unk18, texMtxTbl[var_r27], GX_MTX2x4); + var_r22 = texMtxTbl[var_r27]; + GXSetTexCoordGen2(var_r27, GX_TG_MTX2x4, var_r26 + GX_TG_TEX0, var_r22, GX_FALSE, 0x7D); + GXSetTevOrder(var_r30, var_r27, var_r26, GX_COLOR0A0); + if (var_r26 == GX_TEXMAP0) { + if ((temp_r28->unk0->bmp->dataFmt == 7) || (temp_r28->unk0->bmp->dataFmt == 8)) { + GXSetTevColor(GX_TEVREG2, temp_r28->unk48); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_C2, GX_CC_RASC, GX_CC_ZERO); + } else { + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + } + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + } else { + sp28.a = temp_r28->unk48.a; + GXSetTevColor(GX_TEVREG2, sp28); + GXSetTevColorIn(var_r30, GX_CC_CPREV, GX_CC_TEXC, GX_CC_A2, GX_CC_ZERO); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO); + } + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + break; + case 1: + GXLoadTexMtxImm(temp_r28->unk18, texMtxTbl[var_r27], GX_MTX2x4); + var_r21 = texMtxTbl[var_r27]; + GXSetTexCoordGen2(var_r27, GX_TG_MTX2x4, var_r26 + GX_TG_TEX0, var_r21, GX_FALSE, 0x7D); + GXSetTevOrder(var_r30, var_r27, var_r26, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXA, GX_CC_ZERO); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO); + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + break; + case 2: + sp28.a = 0xE0; + GXSetTevColor(GX_TEVREG1, sp28); + GXSetTexCoordGen2(var_r27 + GX_TEXCOORD1, GX_TG_BUMP0, var_r27, 0x3C, GX_FALSE, 0x7D); + GXSetTevOrder(var_r30, var_r27, var_r26, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_RASC); + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + var_r30++; + GXSetTevOrder(var_r30, var_r27 + GX_TEXCOORD1, GX_TEXMAP0, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_TEXC, GX_CC_A1, GX_CC_CPREV); + GXSetTevColorOp(var_r30, GX_TEV_SUB, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_FALSE, GX_TEVPREV); + break; + case 3: + var_r27--; + GXLoadTexMtxImm(temp_r28->unk18, texMtxTbl[var_r27], GX_MTX2x4); + var_r20 = texMtxTbl[var_r27]; + GXSetTexCoordGen2(var_r27, GX_TG_MTX2x4, var_r26 + GX_TG_TEX0, var_r20, GX_FALSE, 0x7D); + GXSetTevOrder(var_r30, var_r27, var_r26, GX_COLOR0A0); + GXSetTevColorIn(var_r30, GX_CC_ZERO, GX_CC_CPREV, GX_CC_TEXC, GX_CC_ZERO); + GXSetTevColorOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(var_r30, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_TEXA); + GXSetTevAlphaOp(var_r30, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + var_r27++; + break; + } + var_r30++; + var_r27++; + HuSprTexLoad(temp_r28->unk0, 0, var_r26, GX_REPEAT, GX_REPEAT, GX_LINEAR); + } + GXSetNumTevStages((s32)var_r30); + GXSetNumTexGens((s32)var_r27); + var_r31 = arg0->unk3C; + + for (var_r24 = 0; var_r24 < arg0->unk2; var_r24++, var_r31++) { + if ((var_r31->unk34 != 0) && ((var_r31->unk34 & 4) == 0)) { + switch (var_r31->unk30) { + case 0: + mtxRot(sp2C, var_r31->unkC.x, var_r31->unkC.y, var_r31->unkC.z); + PSMTXIdentity(sp5C); + HmfInverseMtxF3X3(Hu3DCameraMtx, sp5C); + PSMTXConcat(sp5C, sp2C, sp2C); + PSMTXScale(sp5C, var_r31->unk18.x, var_r31->unk18.y, var_r31->unk18.z); + PSMTXConcat(sp2C, sp5C, sp5C); + mtxTransCat(sp5C, var_r31->unk0.x, var_r31->unk0.y, var_r31->unk0.z); + PSMTXConcat(Hu3DCameraMtx, sp5C, spBC); + break; + case 1: + PSMTXCopy(sp8C, sp2C); + mtxRotCat(sp2C, var_r31->unkC.x, var_r31->unkC.y, var_r31->unkC.z); + PSMTXScale(sp5C, var_r31->unk18.x, var_r31->unk18.y, var_r31->unk18.z); + PSMTXConcat(sp2C, sp5C, sp5C); + mtxTransCat(sp5C, var_r31->unk0.x, var_r31->unk0.y, var_r31->unk0.z); + PSMTXCopy(sp5C, spBC); + break; + } + GXLoadPosMtxImm(spBC, 0); + PSMTXInverse(spBC, sp5C); + PSMTXTranspose(sp5C, sp2C); + GXLoadNrmMtxImm(sp2C, 0); + GXSetChanAmbColor(GX_COLOR0A0, var_r31->unk4C); + GXSetChanMatColor(GX_COLOR0A0, var_r31->unk50); + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + if ((var_r31->unk34 & 0x10) != 0) { + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_TRUE); + } else { + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + } + spEC.attr = 0; + temp_r23 = Hu3DLightSet(&spEC, &Hu3DCameraMtx, &Hu3DCameraMtxXPose, 0.0f); + GXSetNumChans(1); + if ((var_r31->unk34 & 8) != 0) { + var_r25 = GX_SRC_VTX; + } else { + var_r25 = GX_SRC_REG; + } + switch (var_r31->unk31) { + case 0: + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, var_r25, 0, GX_DF_CLAMP, GX_AF_NONE); + break; + case 1: + GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, var_r25, temp_r23, GX_DF_CLAMP, GX_AF_SPOT); + break; + case 2: + GXSetChanCtrl(GX_COLOR0A0, GX_TRUE, GX_SRC_REG, var_r25, temp_r23, GX_DF_CLAMP, GX_AF_SPEC); + break; + } + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(GX_VA_POS, var_r31->unk40, 0xC); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_TEX_ST, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, var_r31->unk44, 4); + for (var_r26 = 0; var_r26 < var_r31->unk32; var_r26++) { + GXSetVtxDesc(var_r26 + GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, var_r26 + GX_VA_TEX0, GX_TEX_ST, GX_RGBA6, 0); + GXSetArray(var_r26 + GX_VA_TEX0, var_r31->unk54[var_r26].unk4, 8); + } + GXSetVtxDesc(GX_VA_NRM, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_TEX_S, GX_RGBA6, 0); + GXSetArray(GX_VA_NRM, var_r31->unk48, 0xC); + GXCallDisplayList(var_r31->unk3C, var_r31->unk38); + } + } +} + +void fn_1_CB98(ModelData* model, Mtx matrix) { + Mtx sp38; + Mtx sp8; + s32 var_r30; + unkStruct8* var_r31; + + var_r31 = lbl_1_bss_F0.unk10; + GXLoadPosMtxImm(matrix, 0); + PSMTXInverse(matrix, sp38); + PSMTXTranspose(sp38, sp8); + GXLoadNrmMtxImm(sp8, 0); + + for (var_r30 = 0; var_r30 < lbl_1_bss_F0.unk0; var_r30++, var_r31++) { + if ((var_r31->unk8 == 0) || ((var_r31->unk8 & 2) == 0) || ((var_r31->unk8 & 4) != 0)) { + continue; + } + if (omPauseChk() == 0) { + if (var_r31->unk30) { + var_r31->unk30(var_r31); + } + if (var_r31->unk8 == 0) continue; + fn_1_D430(var_r31); + if (var_r31->unk8 == 0) continue; + } + fn_1_C164(var_r31); + } +} + +unkStruct8* fn_1_CCB0(s16 idx) { + return &lbl_1_bss_F0.unk10[idx]; +} + +unkStruct8Sub* fn_1_CCCC(s16 arg0, s16 arg1) { + return &lbl_1_bss_F0.unk10[arg0].unk3C[arg1]; +} + +void fn_1_CCF8(unkStruct11** arg0, s16 arg1, f32 arg8, f32 arg9) { + s32 var_r30; + unkStruct11* var_r31; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(unkStruct11), 0x10000000); + + for (var_r30 = 0; var_r30 < arg1; var_r31++, var_r30++) { + var_r31->unk0.x = (-0.5f * arg8); + var_r31->unk0.y = (0.5f * arg9); + var_r31->unk0.z = 0.0f; + var_r31->unkC.x = (0.5f * arg8); + var_r31->unkC.y = (0.5f * arg9); + var_r31->unkC.z = 0.0f; + var_r31->unk18.x = (0.5f * arg8); + var_r31->unk18.y = (-0.5f * arg9); + var_r31->unk18.z = 0.0f; + var_r31->unk24.x = (-0.5f * arg8); + var_r31->unk24.y = (-0.5f * arg9); + var_r31->unk24.z = 0.0f; + } +} + +void fn_1_CE7C(Vec** arg0, s16 arg1, Vec* arg2) { + s32 var_r29; + s32 var_r28; + Vec* var_r31; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(Vec[4]), 0x10000000); + + for (var_r29 = 0; var_r29 < arg1; var_r29++) { + for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { + var_r31->x = arg2->x; + var_r31->y = arg2->y; + var_r31->z = arg2->z; + } + } +} + +void fn_1_CF1C(GXColor** arg0, s16 arg1, GXColor* arg2) { + s32 var_r29; + s32 var_r28; + GXColor* var_r31; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(GXColor[4]), 0x10000000U); + + for (var_r29 = 0; var_r29 < arg1; var_r29++) { + for (var_r28 = 0; var_r28 < 4; var_r31++, arg2++, var_r28++) { + var_r31->r = arg2->r; + var_r31->g = arg2->g; + var_r31->b = arg2->b; + var_r31->a = arg2->a; + } + } +} + +void fn_1_CFC4(Vec** arg0, s16 arg1, Vec* arg2) { + s32 var_r29; + Vec* var_r31; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(Vec), 0x10000000U); + + for (var_r29 = 0; var_r29 < arg1; var_r31++, arg2++, var_r29++) { + var_r31->x = arg2->x; + var_r31->y = arg2->y; + var_r31->z = arg2->z; + } +} + +void fn_1_D050(HsfVector2f** arg0, s16 arg1, HsfVector2f* arg2) { + s32 var_r28; + s32 var_r29; + HsfVector2f* var_r31; + + var_r31 = *arg0 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(HsfVector2f[4]), 0x10000000U); + + for (var_r28 = 0; var_r28 < arg1; var_r28++) { + for (var_r29 = 0; var_r29 < 4; var_r31++, arg2++, var_r29++) { + var_r31->x = arg2->x; + var_r31->y = arg2->y; + } + } +} + +void fn_1_D0E8(unkStruct8Sub* arg0) { + Vec sp18[4] = { + { -50.0f, 50.0f, 0.0f }, + { 50.0f, 50.0f, 0.0f }, + { 50.0f, -50.0f, 0.0f }, + { -50.0f, -50.0f, 0.0f } + }; + GXColor sp8[4] = { + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF }, + { 0xFF, 0xFF, 0xFF, 0xFF } + }; + s32 var_r26; + s32 var_r25; + void* temp_r3_3; + + if (arg0->unk40 != NULL) { + HuMemDirectFree(arg0->unk40); + } + fn_1_CE7C((Vec**)&arg0->unk40, 1, &sp18[0]); + if (arg0->unk44 != NULL) { + HuMemDirectFree(arg0->unk44); + } + fn_1_CF1C((GXColor**)&arg0->unk44, 1, &sp8[0]); + if (arg0->unk48 != NULL) { + HuMemDirectFree(arg0->unk48); + } + arg0->unk48 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Vec), 0x10000000); + arg0->unk48->x = 0.0f; + arg0->unk48->y = 0.0f; + arg0->unk48->z = 1.0f; + if (arg0->unk3C != NULL) { + HuMemDirectFree(arg0->unk3C); + } + temp_r3_3 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x1000, 0x10000000); + arg0->unk3C = temp_r3_3; + DCFlushRange(arg0->unk3C, 0x1000); + GXBeginDisplayList(temp_r3_3, 0x1000); + GXBegin(GX_QUADS, GX_VTXFMT0, 4); + + for (var_r26 = 0; var_r26 < 4; var_r26++) { + GXPosition1x16(var_r26); + GXColor1x16(0); + GXNormal1x16(var_r26); + + for (var_r25 = 0; var_r25 < arg0->unk32; var_r25++) { + GXTexCoord1x16(var_r26); + } + } + arg0->unk38 = GXEndDisplayList(); +} + +void fn_1_D430(unkStruct8* arg0) { + s32 var_r25; + s32 var_r26; + s32 var_r27; + unkStruct8Sub* var_r28; + unkStruct12* var_r31; + unkStruct9Sub* temp_r30; + + var_r27 = 0; + var_r28 = arg0->unk3C; + + for (var_r25 = 0; var_r25 < arg0->unk2; var_r25++, var_r28++) { + if ((var_r28->unk34 & 4) != 0) { + var_r27++; + } else { + var_r31 = var_r28->unk54; + + for (var_r26 = 0; var_r26 < var_r28->unk32; var_r26++, var_r31++) { + temp_r30 = &lbl_1_bss_F0.unkC[arg0->unk34[var_r26]]; + var_r31->unk8 &= ~4; + switch (var_r31->unk8 & 0xF) { + case 1: + var_r31->unk10 += var_r31->unkC; + if (var_r31->unk10 >= 1.0f) { + var_r31->unk0++; + var_r31->unk10--; + } + break; + case 2: + var_r31->unk10 += var_r31->unkC; + if (var_r31->unk10 >= 1.0f) { + var_r31->unk0--; + var_r31->unk10--; + } + break; + } + if (var_r31->unk0 >= temp_r30->unk4C) { + if ((var_r31->unk8 & 0x10) != 0) { + var_r31->unk8 |= 8; + var_r31->unk0--; + } else if ((var_r31->unk8 & 0x40) != 0) { + var_r31->unk8 = (var_r31->unk8 & 0xF0) | 2; + var_r31->unk0 -= 2; + } else if ((var_r31->unk8 & 0x20) != 0) { + var_r31->unk0 = 0; + } + var_r31->unk8 |= 4; + } else if (var_r31->unk0 < 0) { + if ((var_r31->unk8 & 0x10) != 0) { + var_r31->unk8 |= 8; + var_r31->unk0 = 0; + } else if ((var_r31->unk8 & 0x20) != 0) { + if ((var_r31->unk8 & 0x40) != 0) { + var_r31->unk8 = ((var_r31->unk8 & 0xF0) | 1); + var_r31->unk0 = 1U; + } else { + var_r31->unk0 = (temp_r30->unk4C - 1); + } + } else if ((var_r31->unk8 & 0x40) != 0) { + var_r31->unk8 |= 8; + var_r31->unk0 = 0; + } + var_r31->unk8 |= 4; + } else { + var_r31->unk8 &= ~8; + } + if (var_r31->unk0 != var_r31->unk1) { + var_r31->unk4[0].x = (var_r31->unk0 * temp_r30->unk54); + var_r31->unk4[0].y = (var_r31->unk0 * temp_r30->unk58); + var_r31->unk4[1].x = ((var_r31->unk0 + 1) * temp_r30->unk54); + var_r31->unk4[1].y = (var_r31->unk0 * temp_r30->unk58); + var_r31->unk4[2].x = ((var_r31->unk0 + 1) * temp_r30->unk54); + var_r31->unk4[2].y = ((var_r31->unk0 + 1) * temp_r30->unk58); + var_r31->unk4[3].x = (var_r31->unk0 * temp_r30->unk54); + var_r31->unk4[3].y = ((var_r31->unk0 + 1) * temp_r30->unk58); + if ((var_r31->unk0 + 1) < temp_r30->unk4C) { + var_r31->unk4[2].y -= temp_r30->unk60; + var_r31->unk4[3].y -= temp_r30->unk60; + } + var_r31->unk1 = var_r31->unk0; + } + if ((var_r31->unk8 & 8) != 0) { + if ((var_r28->unk34 & 0x40000000) != 0) { + var_r28->unk34 |= 4; + if ((var_r31->unk8 & 0x40) == 0) { + if (var_r31->unk0 <= 0) { + var_r31->unk0 = temp_r30->unk4C; + } else { + var_r31->unk0 = 0U; + } + } + } else if ((var_r28->unk34 & 0x80000000) != 0) { + fn_1_DDB8(arg0->unk0); + } + var_r27++; + } + } + } + } + if (var_r27 >= arg0->unk2) { + if ((arg0->unk8 & 0x40000000) != 0) { + arg0->unk8 |= 4; + return; + } + if ((arg0->unk8 & 0x80000000) != 0) { + fn_1_DDB8(arg0->unk0); + } + } +} + +s16 fn_1_DA48(u8 arg0, u8 arg1) { + s32 var_r29; + s32 var_r28; + unkStruct8* var_r30; + unkStruct8Sub* var_r31; + + var_r30 = &lbl_1_bss_F0.unk10[1]; + + for (var_r29 = 1; var_r29 < lbl_1_bss_F0.unk0; var_r29++, var_r30++) { + if (var_r30->unk8 == 0) break; + + } + + if (var_r29 == lbl_1_bss_F0.unk0) return 0; + + var_r30->unk0 = var_r29; + var_r30->unk8 = 1; + var_r30->unk30 = NULL; + var_r30->unk2 = arg0; + var_r30->unk4 = arg1; + var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, arg0 * sizeof(unkStruct8Sub), 0x10000000); + var_r30->unk3C = var_r31; + var_r30->unk34 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(s16), 0x10000000); + var_r30->unkC.x = var_r30->unkC.y = var_r30->unkC.z = 0.0f; + var_r30->unk18.x = var_r30->unk18.y = var_r30->unk18.z = 0.0f; + var_r30->unk24.x = var_r30->unk24.y = var_r30->unk24.z = 1.0f; + var_r30->unk54.x = var_r30->unk54.y = var_r30->unk54.z = 0.0f; + var_r30->unk48.x = var_r30->unk48.y = var_r30->unk48.z = 0.0f; + + for (var_r29 = 0; var_r29 < 0x20; var_r29++) { + var_r30->unk60[var_r29] = 0; + } + for (var_r29 = 0; var_r29 < arg1; var_r29++) { + var_r30->unk34[var_r29] = 0; + } + + for (var_r29 = 0; var_r29 < arg0; var_r29++, var_r31++) { + var_r31->unk34 = 1; + var_r31->unk32 = arg1; + var_r31->unk30 = 0; + var_r31->unk31 = 0; + var_r31->unk4C.r = var_r31->unk4C.g = var_r31->unk4C.b = 0; + var_r31->unk4C.a = 0xFF; + var_r31->unk50.r = var_r31->unk50.g = var_r31->unk50.b = 0xFF; + var_r31->unk50.a = 0xFF; + var_r31->unk54 = HuMemDirectMallocNum(HEAP_SYSTEM, arg1 * sizeof(unkStruct12), 0x10000000); + + for (var_r28 = 0; var_r28 < arg1; var_r28++) { + var_r31->unk54[var_r28].unk0 = var_r31->unk54[var_r28].unk1 = 0; + var_r31->unk54[var_r28].unk4 = NULL; + var_r31->unk54[var_r28].unkC = 1.0f; + var_r31->unk54[var_r28].unk10 = 0.0f; + } + var_r31->unk0.x = var_r31->unk0.y = var_r31->unk0.z = 0.0f; + var_r31->unkC.x = var_r31->unkC.y = var_r31->unkC.z = 0.0f; + var_r31->unk18.x = var_r31->unk18.y = var_r31->unk18.z = 1.0f; + var_r31->unk64.x = var_r31->unk64.y = var_r31->unk64.z = 0.0f; + var_r31->unk58.x = var_r31->unk58.y = var_r31->unk58.z = 0.0f; + + for (var_r28 = 0; var_r28 < 0x10; var_r28++) { + var_r31->unk70[var_r28] = 0; + } + var_r31->unk40 = var_r31->unk44 = var_r31->unk48 = NULL; + var_r31->unk3C = NULL; + fn_1_D0E8(var_r31); + } + return var_r30->unk0; +} + +void fn_1_DDB8(s16 arg0) { + unkStruct12* var_r28; + s32 var_r29; + unkStruct8* temp_r30; + unkStruct8Sub* var_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r30->unk8 != 0) { + var_r31 = temp_r30->unk3C; + + for (var_r29 = 0; var_r29 < temp_r30->unk2; var_r29++, var_r31++) { + if (var_r31->unk40 != NULL) { + HuMemDirectFree(var_r31->unk40); + } + if (var_r31->unk44 != NULL) { + HuMemDirectFree(var_r31->unk44); + } + if (var_r31->unk48 != NULL) { + HuMemDirectFree(var_r31->unk48); + } + if (var_r31->unk3C != NULL) { + HuMemDirectFree(var_r31->unk3C); + } + var_r28 = var_r31->unk54; + HuMemDirectFree(var_r28->unk4); + HuMemDirectFree(var_r31->unk54); + } + + for (var_r29 = 0; var_r29 < temp_r30->unk4; var_r29++) { + fn_1_E228(temp_r30->unk34[var_r29]); + } + HuMemDirectFree(temp_r30->unk3C); + HuMemDirectFree(temp_r30->unk34); + temp_r30->unk8 = 0; + temp_r30->unk0 = 0; + } + } +} + +void fn_1_DEF4(s16 arg0, s16 arg1, u8 arg2) { + lbl_1_bss_F0.unk6 = arg0; + lbl_1_bss_F0.unk8 = arg1; + lbl_1_bss_F0.unkA = arg2; +} + +s16 fn_1_DF20(u32 arg0, s16 arg1, s16 arg2) { + AnimData* temp_r30; + f32 var_f31; + f32 var_f30; + s32 var_r29; + unkStruct9Sub* var_r31; + + var_r31 = &lbl_1_bss_F0.unkC[1]; + + for (var_r29 = 1; var_r29 < lbl_1_bss_F0.unk2; var_r29++, var_r31++) { + if ((var_r31->unk6 != 0) && (var_r31->unk8 == arg0)) break; + } + if (var_r29 < lbl_1_bss_F0.unk2) { + var_r31->unk6++; + return var_r29; + } + var_r31 = &lbl_1_bss_F0.unkC[1]; + + for (var_r29 = 1; var_r29 < lbl_1_bss_F0.unk2; var_r29++, var_r31++) { + if (var_r31->unk6 == 0) break; + } + var_r31->unk8 = arg0; + var_r31->unk6 = 1; + temp_r30 = HuSprAnimRead(HuDataReadNum(arg0, 0x10000000)); + if ((arg1 == 0) || (arg2 == 0)) { + arg1 = temp_r30->bmp->sizeX; + arg2 = temp_r30->bmp->sizeY; + var_f31 = var_f30 = 1.0f; + } else { + var_f31 = arg1 / (f32)temp_r30->bmp->sizeX; + var_f30 = arg2 / (f32)temp_r30->bmp->sizeY; + } + var_r31->unk0 = temp_r30; + var_r31->unk4E = arg1; + var_r31->unk50 = arg2; + var_r31->unk54 = var_f31; + var_r31->unk58 = var_f30; + var_r31->unk5C = (1.0f / temp_r30->bmp->sizeX); + var_r31->unk60 = 1.0f / temp_r30->bmp->sizeY; + var_r31->unk4 = 0; + var_r31->unk4C = (temp_r30->bmp->sizeY / arg2); + var_r31->unk48.r = var_r31->unk48.g = var_r31->unk48.b = 0xFF; + var_r31->unk48.a = 0xFF; + PSMTXIdentity(var_r31->unk18); + var_r31->unkC.x = var_r31->unkC.y = var_r31->unkC.z = 0.0f; + return var_r29; +} + +void fn_1_E228(s16 arg0) { + unkStruct9Sub* temp_r31; + + temp_r31 = &lbl_1_bss_F0.unkC[arg0]; + if (temp_r31->unk8 != 0) { + if (temp_r31->unk6 != 0) { + temp_r31->unk6 -= 1; + } + if (temp_r31->unk6 == 0) { + HuSprAnimKill(temp_r31->unk0); + temp_r31->unk8 = 0; + } + } +} + +s32 fn_1_E2A8(s16 arg0, u8 arg1, u32 arg2, s16 arg3, s16 arg4) { + f32 temp_f31; + f32 temp_f30; + s32 var_r26; + s32 var_r25; + s32 var_r24; + unkStruct12* temp_r31; + unkStruct8* temp_r27; + unkStruct8Sub* var_r28; + unkStruct9Sub* temp_r30; + unkStruct11* var_r29; + + if (arg0 == 0) { + return 0; + } + temp_r27 = &lbl_1_bss_F0.unk10[arg0]; + var_r24 = fn_1_DF20(arg2, arg3, arg4); + if (var_r24 == 0) { + return 0; + } + temp_r27->unk8 |= 2; + temp_r27->unk34[arg1] = var_r24; + temp_r30 = &lbl_1_bss_F0.unkC[var_r24]; + var_r28 = temp_r27->unk3C; + + for (var_r26 = 0; var_r26 < temp_r27->unk2; var_r26++, var_r28++) { + if (arg1 == 0) { + if (var_r28->unk40) { + HuMemDirectFree(var_r28->unk40); + } + temp_f30 = temp_r30->unk50; + temp_f31 = temp_r30->unk4E; + var_r29 = var_r28->unk40 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x30, 0x10000000); + + for (var_r25 = 0; var_r25 < 1; var_r29++, var_r25++) { + var_r29->unk0.x = (-0.5f * temp_f31); + var_r29->unk0.y = (0.5f * temp_f30); + var_r29->unk0.z = 0.0f; + var_r29->unkC.x = (0.5f * temp_f31); + var_r29->unkC.y = (0.5f * temp_f30); + var_r29->unkC.z = 0.0f; + var_r29->unk18.x = (0.5f * temp_f31); + var_r29->unk18.y = (-0.5f * temp_f30); + var_r29->unk18.z = 0.0f; + var_r29->unk24.x = (-0.5f * temp_f31); + var_r29->unk24.y = (-0.5f * temp_f30); + var_r29->unk24.z = 0.0f; + } + } + temp_r31 = &var_r28->unk54[arg1]; + temp_r31->unk8 = 0; + temp_r31->unk0 = temp_r31->unk1 = 0; + temp_r31->unkC = 1.0f; + temp_r31->unk10 = 0.0f; + if (temp_r31->unk4 == NULL) { + temp_r31->unk4 = HuMemDirectMallocNum(HEAP_SYSTEM, 0x20, 0x10000000U); + } + temp_r31->unk4[0].x = temp_r31->unk0 * temp_r30->unk54; + temp_r31->unk4[0].y = temp_r31->unk0 * temp_r30->unk58; + temp_r31->unk4[1].x = ((temp_r31->unk0 + 1) * temp_r30->unk54); + temp_r31->unk4[1].y = (temp_r31->unk0 * temp_r30->unk58); + temp_r31->unk4[2].x = ((temp_r31->unk0 + 1) * temp_r30->unk54); + temp_r31->unk4[2].y = ((temp_r31->unk0 + 1) * temp_r30->unk58); + temp_r31->unk4[3].x = (temp_r31->unk0 * temp_r30->unk54); + temp_r31->unk4[3].y = ((temp_r31->unk0 + 1) * temp_r30->unk58); + if ((temp_r31->unk0 + 1) < temp_r30->unk4C) { + temp_r31->unk4[2].y -= temp_r30->unk60; + temp_r31->unk4[3].y -= temp_r30->unk60; + } + } + return 1; +} + +s32 fn_1_E7C8(s16 arg0, u8 arg1, u32 arg2) { + s32 var_r31; + + var_r31 = fn_1_E2A8(arg0, arg1, arg2, 0, 0); + return var_r31; +} + +void fn_1_E818(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r31; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r31->unkC.x = arg8; + temp_r31->unkC.y = arg9; + temp_r31->unkC.z = argA; + } +} + +void fn_1_E85C(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r30; + unkStruct8Sub* temp_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r30->unk2 > arg1) { + temp_r31 = &temp_r30->unk3C[arg1]; + temp_r31->unk0.x = arg8; + temp_r31->unk0.y = arg9; + temp_r31->unk0.z = argA; + } + } +} + +void fn_1_E8CC(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + s32 var_r29; + unkStruct8* temp_r30; + unkStruct8Sub* var_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + var_r31 = temp_r30->unk3C; + + for (var_r29 = 0; var_r29 < temp_r30->unk2; var_r29++, var_r31++) { + var_r31->unk0.x = arg8; + var_r31->unk0.y = arg9; + var_r31->unk0.z = argA; + } + } +} + +void fn_1_E940(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r31; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r31->unkC.x += arg8; + temp_r31->unkC.y += arg9; + temp_r31->unkC.z += argA; + } +} + +void fn_1_E99C(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r30; + unkStruct8Sub* temp_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r30->unk2 > arg1) { + temp_r31 = &temp_r30->unk3C[arg1]; + temp_r31->unk0.x += arg8; + temp_r31->unk0.y += arg9; + temp_r31->unk0.z += argA; + } + } +} + +void fn_1_EA24(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + s32 var_r29; + unkStruct8* temp_r30; + unkStruct8Sub* var_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + var_r31 = temp_r30->unk3C; + + for (var_r29 = 0; var_r29 < temp_r30->unk2; var_r29++, var_r31++) { + var_r31->unk0.x += arg8; + var_r31->unk0.y += arg9; + var_r31->unk0.z += argA; + } + } +} + +void fn_1_EAB0(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r31; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r31->unk18.x = arg8; + temp_r31->unk18.y = arg9; + temp_r31->unk18.z = argA; + } +} + +void fn_1_EAF4(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r30; + unkStruct8Sub* temp_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r30->unk2 > arg1) { + temp_r31 = &temp_r30->unk3C[arg1]; + temp_r31->unkC.x = arg8; + temp_r31->unkC.y = arg9; + temp_r31->unkC.z = argA; + } + } +} + +void fn_1_EB64(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + s32 var_r29; + unkStruct8* temp_r30; + unkStruct8Sub* var_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + var_r31 = temp_r30->unk3C; + + for (var_r29 = 0; var_r29 < temp_r30->unk2; var_r29++, var_r31++) { + var_r31->unkC.x = arg8; + var_r31->unkC.y = arg9; + var_r31->unkC.z = argA; + } + } +} + +void fn_1_EBD8(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r31; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r31->unk24.x = arg8; + temp_r31->unk24.y = arg9; + temp_r31->unk24.z = argA; + } +} + +void fn_1_EC1C(s16 arg0, s16 arg1, f32 arg8, f32 arg9, f32 argA) { + unkStruct8* temp_r30; + unkStruct8Sub* temp_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r30->unk2 > arg1) { + temp_r31 = &temp_r30->unk3C[arg1]; + temp_r31->unk18.x = arg8; + temp_r31->unk18.y = arg9; + temp_r31->unk18.z = argA; + } + } +} + +void fn_1_EC8C(s16 arg0, f32 arg8, f32 arg9, f32 argA) { + s32 var_r29; + unkStruct8* temp_r30; + unkStruct8Sub* var_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + var_r31 = temp_r30->unk3C; + + for (var_r29 = 0; var_r29 < temp_r30->unk2; var_r29++, var_r31++) { + var_r31->unk18.x = arg8; + var_r31->unk18.y = arg9; + var_r31->unk18.z = argA; + } + } +} + +void fn_1_ED00(s16 arg0, s32 arg1) { + unkStruct8* temp_r31; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r31->unk8 |= arg1; + } +} + +void fn_1_ED44(s16 arg0, s16 arg1, s32 arg2) { + unkStruct8* temp_r31; + unkStruct8Sub* temp_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + temp_r30 = &temp_r31->unk3C[arg1]; + temp_r30->unk34 |= arg2; + } + } +} + +void fn_1_EDB4(s16 arg0, s32 arg1) { + s32 var_r30; + unkStruct8* temp_r31; + unkStruct8Sub* temp_r29; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r29 = temp_r31->unk3C; + + for (var_r30 = 0; var_r30 < temp_r31->unk2; var_r30++) { + temp_r29->unk34 |= arg1; + } + } +} + +void fn_1_EE24(s16 arg0, u32 arg1) { + unkStruct8* temp_r31; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r31->unk8 &= ~arg1; + } +} + +void fn_1_EE68(s16 arg0, s16 arg1, u32 arg2) { + unkStruct8* temp_r31; + unkStruct8Sub* temp_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + temp_r30 = &temp_r31->unk3C[arg1]; + temp_r30->unk34 &= ~arg2; + } + } +} + +void fn_1_EED8(s16 arg0, u32 arg1) { + s32 var_r30; + unkStruct8* temp_r31; + unkStruct8Sub* temp_r29; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + temp_r29 = temp_r31->unk3C; + + for (var_r30 = 0; var_r30 < temp_r31->unk2; var_r30++) { + temp_r29->unk34 &= ~arg1; + } + } +} + +s32 fn_1_EF48(s16 arg0, s32 arg1) { + unkStruct8* var_r31; + + if (arg0 == 0) { + return 0; + } + + var_r31 = &lbl_1_bss_F0.unk10[arg0]; + if ((var_r31->unk8 & arg1) != 0) { + return 1; + } + return 0; +} + +s32 fn_1_EFA4(s16 arg0, s16 arg1, s32 arg2) { + unkStruct8Sub* var_r30; + unkStruct8* temp_r31; + + if (arg0 == 0) return; + + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 <= arg1) return; + + var_r30 = &temp_r31->unk3C[arg1]; + if ((var_r30->unk34 & arg2) != 0) { + return 1; + } else { + return 0; + } +} + +void fn_1_F024(s16 arg0, s16 arg1, u8 arg2, u8 arg3, u8 arg4, u8 arg5) { + unkStruct8* temp_r30; + unkStruct8Sub* temp_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r30->unk2 > arg1) { + temp_r31 = &temp_r30->unk3C[arg1]; + temp_r31->unk50.r = arg2; + temp_r31->unk50.g = arg3; + temp_r31->unk50.b = arg4; + temp_r31->unk50.a = arg5; + } + } +} + +void fn_1_F098(s16 arg0, u8 arg1, u8 arg2, u8 arg3, u8 arg4) { + s32 var_r29; + unkStruct8* temp_r30; + unkStruct8Sub* var_r31; + + if (arg0 != 0) { + temp_r30 = &lbl_1_bss_F0.unk10[arg0]; + var_r31 = temp_r30->unk3C; + + for (var_r29 = 0; var_r29 < temp_r30->unk2; var_r29++, var_r31++) { + var_r31->unk50.r = arg1; + var_r31->unk50.g = arg2; + var_r31->unk50.b = arg3; + var_r31->unk50.a = arg4; + } + } +} + +void fn_1_F110(s16 arg0, s16 arg1, u8 arg2) { + unkStruct8* temp_r31; + unkStruct8Sub* var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + var_r30 = &temp_r31->unk3C[arg1]; + var_r30->unk54->unk8 = arg2; + } + } +} + +void fn_1_F17C(s16 arg0, s16 arg1, u8 arg2, u8 arg3) { + unkStruct8* temp_r31; + unkStruct8Sub* var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + var_r30 = &temp_r31->unk3C[arg1]; + var_r30->unk54[arg2].unk8 = arg3; + } + } +} + +void fn_1_F1F4(s16 arg0, u8 arg1) { + s32 var_r28; + s32 var_r30; + unkStruct8* temp_r29; + unkStruct8Sub* var_r31; + + if (arg0 != 0) { + temp_r29 = &lbl_1_bss_F0.unk10[arg0]; + var_r31 = (unkStruct8Sub *)(&temp_r29->unk3C); + (void)temp_r29; + + for (var_r28 = 0; var_r28 < temp_r29->unk2; var_r28++, var_r31++) { + for (var_r30 = 0; var_r30 < var_r31->unk32; var_r30++) { + var_r31->unk54[var_r30].unk8 = arg1; + } + } + } +} + +void fn_1_F28C(s16 arg0, s16 arg1, f32 arg8) { + unkStruct8* temp_r31; + unkStruct8Sub* var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + var_r30 = &temp_r31->unk3C[arg1]; + var_r30->unk54->unkC = arg8; + } + } +} + +void fn_1_F2F8(s16 arg0, s16 arg1, u8 arg2, f32 arg8) { + unkStruct8* temp_r31; + unkStruct8Sub* var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + var_r30 = &temp_r31->unk3C[arg1]; + var_r30->unk54[arg2].unkC = arg8; + } + } +} + +void fn_1_F370(s16 arg0, f32 arg8) { + unkStruct8* temp_r31; + s32 var_r29; + s32 var_r30; + unkStruct8Sub* volatile sp8; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + sp8 = &temp_r31->unk3C[0]; + + for (var_r29 = 0; var_r29 < temp_r31->unk2; var_r29++) { + for (var_r30 = 0; var_r30 < sp8->unk32; var_r30++) { + sp8->unk54[var_r30].unkC = arg8; + } + } + } +} + +void fn_1_F408(s16 arg0, s16 arg1, u8 arg2) { + unkStruct8* temp_r31; + unkStruct8Sub* var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + var_r30 = &temp_r31->unk3C[arg1]; + var_r30->unk54->unk0 = arg2; + } + } +} + +void fn_1_F478(s16 arg0, s16 arg1, u8 arg2, u8 arg3) { + unkStruct8* temp_r31; + unkStruct8Sub* var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + if (temp_r31->unk2 > arg1) { + var_r30 = &temp_r31->unk3C[arg1]; + var_r30->unk54[arg2].unk0 = arg3; + } + } +} + +void fn_1_F4F0(s16 arg0, u8 arg1) { + unkStruct8Sub* volatile sp8; + s32 var_r29; + unkStruct8* temp_r31; + s32 var_r30; + + if (arg0 != 0) { + temp_r31 = &lbl_1_bss_F0.unk10[arg0]; + sp8 = temp_r31->unk3C; + for (var_r29 = 0; var_r29 < temp_r31->unk2; var_r29++) { + for (var_r30 = 0; var_r30 < sp8->unk32; var_r30++) { + sp8->unk54[var_r30].unk0 = arg1; + } + } + } +} \ No newline at end of file diff --git a/src/REL/m409Dll/main.c b/src/REL/m409Dll/main.c index 35b2eede..6b73472e 100644 --- a/src/REL/m409Dll/main.c +++ b/src/REL/m409Dll/main.c @@ -2,6 +2,7 @@ #include "rel_sqrt_consts.h" #include "math.h" +#include "ext_math.h" #include "game/hsfman.h" #include "game/objsub.h" #include "game/audio.h" @@ -154,15 +155,15 @@ s8 fn_1_524(void) { if (var_f30 > 1.0f) { var_f30 = 1.0f; } - temp_f31 = cos((M_PI * (-45.0f + (135.0f * var_f30))) / 180.0); + temp_f31 = cosd(-45.0f + (135.0f * var_f30)); Hu3DTexScrollPosSet(lbl_1_bss_24.unk12, lbl_1_bss_24.unk14, 0.0f, 0.0f); lbl_1_bss_24.unk14 -= 0.01f * temp_f31; Hu3DTexScrollPosMoveSet(lbl_1_bss_24.unkC, -0.0001f - (0.005f * temp_f31), 0.0f, 0.0f); Hu3DTexScrollPosMoveSet(lbl_1_bss_24.unkE, -0.0002f - (0.005f * temp_f31), 0.0f, 0.0f); Hu3DTexScrollPosMoveSet(lbl_1_bss_24.unk10, -0.0003f - (0.005f * temp_f31), 0.0f, 0.0f); - sp8.x = -(sin((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)); + sp8.x = -(sin((M_PI * CRot.y) / 180.0) * cosd(CRot.x)); sp8.y = sin((M_PI * CRot.x) / 180.0); - sp8.z = -(cos((M_PI * CRot.y) / 180.0) * cos((M_PI * CRot.x) / 180.0)); + sp8.z = -(cosd(CRot.y) * cosd(CRot.x)); HuAudFXListnerUpdate(&Hu3DCamera->pos, &sp8); return var_r30; } @@ -916,7 +917,7 @@ void fn_1_44F0(s16 arg0, f32 arg8, f32 arg9, f32 argA, s8 arg1, s16 arg2) { temp_f31 = (((rand8() << 8) | rand8()) % 361); var_r31->unk0.x = (2.0 + (3.0 * sin((M_PI * temp_f31) / 180.0))); var_r31->unk0.y = (0.1f * ((((rand8() << 8) | rand8()) % 31) + 40)); - var_r31->unk0.z = (3.5 * cos((M_PI * temp_f31) / 180.0)); + var_r31->unk0.z = (3.5 * cosd(temp_f31)); var_r31->unk28 = 0; var_r31->unk2A = ((((rand8() << 8) | rand8()) % 3) + 2); var_r31->unk18 = (f32)spA.r; @@ -973,7 +974,7 @@ void fn_1_4FFC(s16 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4) { temp_r31->unk4C = -1; temp_f31 = ((((rand8() << 8) | rand8()) % 81) - 40); - temp_r31->unk0.x = (13.0 * cos((M_PI * temp_f31) / 180.0)); + temp_r31->unk0.x = (13.0 * cosd(temp_f31)); temp_r31->unk0.y = 0.1f * ((((rand8() << 8) | rand8()) % 21) + 20); temp_r31->unk0.z = (9.0 * sin((M_PI * temp_f31) / 180.0)); temp_r31->unkC.x = (0.05f * temp_r31->unk0.x); diff --git a/src/REL/m409Dll/player.c b/src/REL/m409Dll/player.c index acb2231c..9e0a7b69 100644 --- a/src/REL/m409Dll/player.c +++ b/src/REL/m409Dll/player.c @@ -2,6 +2,7 @@ #include "math.h" #include "ext_math.h" +#include "ext_math.h" #include "game/audio.h" #include "game/chrman.h" #include "game/gamework_data.h" @@ -152,8 +153,8 @@ void fn_1_6928(omObjData* arg0) { var_r31->unk58 = var_r30; lbl_1_bss_F0.unk10[var_r30].unk30 = &fn_1_8D6C; fn_1_ED44(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 4); - lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk70 = var_r31->unk0; - lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk72 = -1; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk70[0] = var_r31->unk0; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk70[1] = -1; fn_1_EC1C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 0.5f, 0.5f, 1.0f); var_r31->unk59 = 0; var_r31->unk60 = 0; @@ -252,9 +253,9 @@ void fn_1_7344(omObjData* arg0) { temp_r23 = fn_1_8D08(temp_r31->unk0); fn_1_DEF4(temp_r31->unk58, 0, 0); fn_1_EE68(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, 4); - lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk72 = temp_r23; - lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk74 = 0; - lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk76 = 0; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk70[1] = temp_r23; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk70[2] = 0; + lbl_1_bss_F0.unk10[lbl_1_bss_F0.unk6].unk3C[lbl_1_bss_F0.unk8].unk70[3] = 0; fn_1_E85C(lbl_1_bss_F0.unk6, lbl_1_bss_F0.unk8, temp_r31->unk24.x, 100.0f + temp_r31->unk24.y, temp_r31->unk24.z); if (temp_r23 == -1) { lbl_1_bss_F0.unk10[temp_r31->unk58].unk3C[0].unk58.x = temp_r30->unk0.x; @@ -518,30 +519,30 @@ void fn_1_8838(unkStruct8* arg0) { var_r28 = fn_1_A9C0(var_r26, &sp8); temp_r31 = &arg0->unk3C[1]; if (var_r28 == -1) { - if (temp_r31->unk70 != -1) { - temp_r31->unk70 = -1; - temp_r31->unk74f = 0.0f; + if (temp_r31->unk70[0] != -1) { + temp_r31->unk70[0] = -1; + temp_r31->unk74 = 0.0f; temp_r31->unk58.x = temp_r31->unk0.x; temp_r31->unk58.y = temp_r31->unk0.y; temp_r31->unk58.z = temp_r31->unk0.z; - temp_r31->unk78 = temp_r31->unk18; + temp_r31->unk78 = temp_r31->unk18.x; } - if (temp_r31->unk74f < 90.0f) { - temp_r31->unk74f += 9.0f; - if (temp_r31->unk74f > 90.0f) { - temp_r31->unk74f = 90.0f; + if (temp_r31->unk74 < 90.0f) { + temp_r31->unk74 += 9.0f; + if (temp_r31->unk74 > 90.0f) { + temp_r31->unk74 = 90.0f; } - temp_f31 = sin((M_PI * temp_r31->unk74f) / 180.0); - temp_f30 = cos((M_PI * temp_r31->unk74f) / 180.0); + temp_f31 = sin((M_PI * temp_r31->unk74) / 180.0); + temp_f30 = cosd(temp_r31->unk74); sp18.x = temp_r30->unk0.x - temp_r31->unk58.x; sp18.y = temp_r30->unk0.y - temp_r31->unk58.y; sp18.z = temp_r30->unk0.z - temp_r31->unk58.z; temp_r31->unk0.x = (temp_r31->unk58.x + (sp18.x * temp_f31)); temp_r31->unk0.y = (temp_r31->unk58.y + (sp18.y * temp_f31)); temp_r31->unk0.z = (temp_r31->unk58.z + (sp18.z * temp_f31)); - temp_r31->unk18 = (0.001f + (temp_r31->unk78 * temp_f30)); - temp_r31->unk1C = (0.001f + (temp_r31->unk78 * temp_f30)); - temp_r31->unk20 = 1.0f; + temp_r31->unk18.x = (0.001f + (temp_r31->unk78 * temp_f30)); + temp_r31->unk18.y = (0.001f + (temp_r31->unk78 * temp_f30)); + temp_r31->unk18.z = 1.0f; return; } temp_r31->unk34 |= 4; @@ -551,30 +552,30 @@ void fn_1_8838(unkStruct8* arg0) { return; } temp_r29 = &lbl_1_bss_10C[var_r28]; - if (temp_r31->unk70 != var_r28) { - temp_r31->unk70 = var_r28; - temp_r31->unk74f = 0.0f; + if (temp_r31->unk70[0] != var_r28) { + temp_r31->unk70[0] = var_r28; + temp_r31->unk74 = 0.0f; temp_r31->unk58.x = temp_r31->unk0.x; temp_r31->unk58.y = temp_r31->unk0.y; temp_r31->unk58.z = temp_r31->unk0.z; - temp_r31->unk78 = temp_r31->unk18; - temp_r31->unk7C = (2.5f - temp_r31->unk18); + temp_r31->unk78 = temp_r31->unk18.x; + temp_r31->unk7C = (2.5f - temp_r31->unk18.x); } - if (temp_r31->unk74f < 90.0f) { - temp_r31->unk74f += 9.0f; - if (temp_r31->unk74f > 90.0f) { - temp_r31->unk74f = 90.0f; + if (temp_r31->unk74 < 90.0f) { + temp_r31->unk74 += 9.0f; + if (temp_r31->unk74 > 90.0f) { + temp_r31->unk74 = 90.0f; } - temp_f31 = sin((M_PI * temp_r31->unk74f) / 180.0); + temp_f31 = sin((M_PI * temp_r31->unk74) / 180.0); sp18.x = temp_r29->unkC.x - temp_r31->unk58.x; sp18.y = temp_r29->unkC.y - temp_r31->unk58.y; sp18.z = temp_r29->unkC.z - temp_r31->unk58.z; temp_r31->unk0.x = (temp_r31->unk58.x + (sp18.x * temp_f31)); temp_r31->unk0.y = (temp_r31->unk58.y + (sp18.y * temp_f31)); temp_r31->unk0.z = (temp_r31->unk58.z + (sp18.z * temp_f31)); - temp_r31->unk18 = (temp_r31->unk78 + (temp_r31->unk7C * temp_f31)); - temp_r31->unk1C = (temp_r31->unk78 + (temp_r31->unk7C * temp_f31)); - temp_r31->unk20 = 1.0f; + temp_r31->unk18.x = (temp_r31->unk78 + (temp_r31->unk7C * temp_f31)); + temp_r31->unk18.y = (temp_r31->unk78 + (temp_r31->unk7C * temp_f31)); + temp_r31->unk18.z = 1.0f; } else { temp_r31->unk0.x = temp_r29->unkC.x; temp_r31->unk0.y = temp_r29->unkC.y; @@ -589,7 +590,7 @@ s8 fn_1_8D08(u8 arg0) { data = (unkStruct7*)lbl_1_bss_3A0[arg0]->data; var_r30 = fn_1_CCCC(data->unk57, 1); - return var_r30->unk70; + return var_r30->unk70[0]; } void fn_1_8D6C(unkStruct8* arg0) { @@ -605,8 +606,8 @@ void fn_1_8D6C(unkStruct8* arg0) { temp_r31 = &arg0->unk3C[0]; if ((temp_r31->unk34 & 4) == 0) { - temp_r28 = temp_r31->unk72; - if (temp_r31->unk74 == 0) { + temp_r28 = temp_r31->unk70[1]; + if (temp_r31->unk70[2] == 0) { if (temp_r28 == -1) { sp8.x = temp_r31->unk58.x - temp_r31->unk0.x; sp8.y = temp_r31->unk58.y - temp_r31->unk0.y; @@ -616,9 +617,9 @@ void fn_1_8D6C(unkStruct8* arg0) { temp_r31->unk64.y = sp8.y; temp_r31->unk64.z = sp8.z; } - temp_r31->unk74 = 0x10; + temp_r31->unk70[2] = 0x10; } - if (temp_r31->unk76 == 0) { + if (temp_r31->unk70[3] == 0) { if (temp_r28 != -1) { var_r29 = &lbl_1_bss_10C[temp_r28]; if ((var_r29->unk2 != 0) && (var_r29->unk2 <= 4)) { @@ -640,7 +641,7 @@ void fn_1_8D6C(unkStruct8* arg0) { if (!(var_f31 >= 2250.0f) && (var_r29->unk2 == 3)) { var_r29->unk2 = 4; temp_r31->unk34 |= 4; - temp_r30 = (unkStruct7*)lbl_1_bss_3A0[temp_r31->unk70]->data; + temp_r30 = (unkStruct7*)lbl_1_bss_3A0[temp_r31->unk70[0]]->data; if (var_r29->unk48 == lbl_1_bss_106) { espAttrSet(temp_r30->unk5A[temp_r30->unk59][0], 4); espAttrReset(temp_r30->unk5A[temp_r30->unk59][1], 4); @@ -668,14 +669,14 @@ void fn_1_8D6C(unkStruct8* arg0) { temp_r31->unk64.x = sp8.x; temp_r31->unk64.y = sp8.y; temp_r31->unk64.z = sp8.z; - temp_r31->unk76 = 1; + temp_r31->unk70[3] = 1; return; } } temp_r31->unk0.x = (temp_r31->unk0.x + (200.0f * temp_r31->unk64.x)); temp_r31->unk0.y = (temp_r31->unk0.y + (200.0f * temp_r31->unk64.y)); temp_r31->unk0.z = (temp_r31->unk0.z + (200.0f * temp_r31->unk64.z)); - if (--temp_r31->unk74 == 0) { + if (--temp_r31->unk70[2] == 0) { temp_r31->unk34 |= 4; } } @@ -861,8 +862,8 @@ void fn_1_962C(omObjData* arg0) { if (var_r31->unkC.y >= 375.0f) { var_r31->unk8 -= 0.000001f * var_r31->unkC.y; } - var_r31->unkC.x += sin((M_PI * var_r31->unk18.z) / 180.0) * var_r31->unk8; - var_r31->unkC.y += cos((M_PI * var_r31->unk18.z) / 180.0) * var_r31->unk8; + var_r31->unkC.x += sind(var_r31->unk18.z) * var_r31->unk8; + var_r31->unkC.y += cosd(var_r31->unk18.z) * var_r31->unk8; if (var_r31->unkC.y >= 200.0) { Hu3DModelAttrReset(var_r31->unk0, 1); } diff --git a/src/REL/m440Dll/main.c b/src/REL/m440Dll/main.c index 720df69a..a8b56af9 100644 --- a/src/REL/m440Dll/main.c +++ b/src/REL/m440Dll/main.c @@ -219,8 +219,8 @@ void fn_1_AE0(omObjData* arg0) { if (temp_r31->unkA != 0) { temp_r31->unkA++; temp_f31 = (((rand8() << 8) | rand8()) % 361); - Center.x = (lbl_1_data_78[1].center.x + (10.0 * sin((M_PI * temp_f31) / 180.0))); - Center.y = (lbl_1_data_78[1].center.y + (10.0 * cos((M_PI * temp_f31) / 180.0))); + Center.x = (lbl_1_data_78[1].center.x + (10.0 * sind(temp_f31))); + Center.y = (lbl_1_data_78[1].center.y + (10.0 * cosd(temp_f31))); if (temp_r31->unkA > 0x28) { temp_r31->unkA = 0; return; @@ -453,8 +453,8 @@ void fn_1_19B0(void) { for (var_r31 = 1; var_r31 < 4; var_r31++, var_f30+=120.0f) { temp_f31 = 0.01f * ((((rand8() << 8) | rand8()) % 51) + 50); - temp_f29 = (temp_f31 * (200.0 * sin((M_PI * var_f30) / 180.0))); - var_f28 = (temp_f31 * (200.0 * cos((M_PI * var_f30) / 180.0))); + temp_f29 = (temp_f31 * (200.0 * sind(var_f30))); + var_f28 = (temp_f31 * (200.0 * cosd(var_f30))); var_f27 = 0.0f; Hu3DModelPosSet(lbl_1_bss_10[var_r31], temp_f29, 300.0f + var_f28, var_f27); temp_f31 = 0.1f * ((((rand8() << 8) | rand8()) % 11) + 25); @@ -486,8 +486,8 @@ void fn_1_1D54(f32 arg8, f32 arg9, f32 argA, s16 arg0, f32 argB, s16 arg1) { for (var_r30 = 0; var_r30 < arg0; var_r30++) { temp_f31 = argB + ((((rand8() << 8) | rand8()) % 11) - 5); - temp_f30 = sin((M_PI * temp_f31) / 180.0); - temp_f29 = cos((M_PI * temp_f31) / 180.0); + temp_f30 = sind(temp_f31); + temp_f29 = cosd(temp_f31); sp30.x = arg8 + ((((rand8() << 8) | rand8()) % 21) - 10); sp30.y = arg9 + ((((rand8() << 8) | rand8()) % 21) - 10); sp30.z = argA; @@ -862,8 +862,8 @@ void fn_1_3DD8(omObjData* object) { for (var_r29 = 1; var_r29 < 4; var_r29++, var_f30 += 120.0f) { var_f31 = 0.01f * ((((rand8() << 8) | rand8()) % 51) + 0x32); - var_f27 = (var_f31 * (200.0 * sin((M_PI * var_f30) / 180.0))); - var_f28 = var_f31 * (200.0 * cos((M_PI * var_f30) / 180.0)); + var_f27 = (var_f31 * (200.0 * sind(var_f30))); + var_f28 = (var_f31 * (200.0 * cosd(var_f30))); var_f29 = 0.0f; Hu3DModelPosSet(lbl_1_bss_10[var_r29], var_f27, 300.0f + var_f28, var_f29); var_f31 = 0.1f * ((((rand8() << 8) | rand8()) % 11) + 0x19); diff --git a/src/REL/m440Dll/object.c b/src/REL/m440Dll/object.c index 69cbeaf1..d26d048a 100644 --- a/src/REL/m440Dll/object.c +++ b/src/REL/m440Dll/object.c @@ -244,8 +244,8 @@ void fn_1_B884(omObjData* arg0, unkObjStruct* arg1) { lbl_1_bss_74++; } arg1->unk24 = arg1->unk18; - arg1->unk18.x = (700.0 * cos((M_PI * lbl_1_data_250) / 180.0)); - arg1->unk18.z = (700.0 * sin((M_PI * lbl_1_data_250) / 180.0)); + arg1->unk18.x = (700.0 * cosd(lbl_1_data_250)); + arg1->unk18.z = (700.0 * sind(lbl_1_data_250)); var_f29 = (arg1->unk18.x - arg1->unk24.x); var_f28 = (arg1->unk18.z - arg1->unk24.z); var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); @@ -299,8 +299,8 @@ void fn_1_B884(omObjData* arg0, unkObjStruct* arg1) { lbl_1_bss_74++; } arg1->unk24 = arg1->unk18; - arg1->unk18.x = (arg1->unk5C * cos((M_PI * lbl_1_data_250) / 180.0)); - arg1->unk18.z = (arg1->unk5C * sin((M_PI * lbl_1_data_250) / 180.0)); + arg1->unk18.x = (arg1->unk5C * cosd(lbl_1_data_250)); + arg1->unk18.z = (arg1->unk5C * sind(lbl_1_data_250)); var_f29 = (arg1->unk18.x - arg1->unk24.x); var_f28 = (arg1->unk18.z - arg1->unk24.z); var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); @@ -528,8 +528,8 @@ void fn_1_C944(omObjData* arg0, unkObjStruct* arg1) { } } arg1->unk24 = arg1->unk18; - arg1->unk18.x = (arg1->unk5C * cos((M_PI * arg1->unk68) / 180.0)); - arg1->unk18.z = (arg1->unk5C * sin((M_PI * arg1->unk68) / 180.0)); + arg1->unk18.x = (arg1->unk5C * cosd(arg1->unk68)); + arg1->unk18.z = (arg1->unk5C * sind(arg1->unk68)); if ((arg1->unk48 & 3) != 0) { arg1->unk48 = arg1->unk48 & ~4; var_f26 = (arg1->unk18.x - arg1->unk24.x); @@ -704,8 +704,8 @@ void fn_1_D34C(omObjData* arg0, unkObjStruct* arg1) { fn_1_4E00(arg1->unk4A, var_f31); } } - arg1->unk18.x = (410.0 * cos((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); - arg1->unk18.z = (410.0 * sin((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + arg1->unk18.x = (410.0 * cosd(lbl_1_data_0[arg1->unk4A])); + arg1->unk18.z = (410.0 * sind(lbl_1_data_0[arg1->unk4A])); } } @@ -748,8 +748,8 @@ void fn_1_D7F8(omObjData* arg0, unkObjStruct* arg1) { } var_f31 = (temp_r29->unk_64 - temp_f29) / temp_f28; fn_1_4E00(arg1->unk4A, var_f31); - arg1->unk18.x = (410.0 * cos((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); - arg1->unk18.z = (410.0 * sin((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + arg1->unk18.x = (410.0 * cosd(lbl_1_data_0[arg1->unk4A])); + arg1->unk18.z = (410.0 * sind(lbl_1_data_0[arg1->unk4A])); if (arg1->unk68 >= 150.0f) { arg1->unk68 = 150.0f; if (temp_r29->unk_64 == var_f30) { @@ -781,8 +781,8 @@ void fn_1_D7F8(omObjData* arg0, unkObjStruct* arg1) { case 2: arg1->unkC++; var_f31 = arg1->unkC / 30.0f; - arg1->unk18.x = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * cos((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); - arg1->unk18.z = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * sin((M_PI * lbl_1_data_0[arg1->unk4A]) / 180.0)); + arg1->unk18.x = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * cosd(lbl_1_data_0[arg1->unk4A])); + arg1->unk18.z = ((410.0f + (var_f31 * (arg1->unk5C - 410.0f))) * sind(lbl_1_data_0[arg1->unk4A])); if (var_f31 >= 1.0f) { arg1->unkC = 0; var_f31 = 1.0f; @@ -874,8 +874,8 @@ void fn_1_E034(omObjData* arg0, unkObjStruct* arg1) { arg1->unk60++; } arg1->unk24 = arg1->unk18; - arg1->unk18.x = (arg1->unk5C * cos((M_PI * lbl_1_bss_84) / 180.0)); - arg1->unk18.z = (arg1->unk5C * sin((M_PI * lbl_1_bss_84) / 180.0)); + arg1->unk18.x = (arg1->unk5C * cosd(lbl_1_bss_84)); + arg1->unk18.z = (arg1->unk5C * sind(lbl_1_bss_84)); var_f29 = (arg1->unk18.x - arg1->unk24.x); var_f28 = (arg1->unk18.z - arg1->unk24.z); var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); @@ -932,8 +932,8 @@ void fn_1_E034(omObjData* arg0, unkObjStruct* arg1) { fn_1_F4D4(arg1, 15, 1); } arg1->unk24 = arg1->unk18; - arg1->unk18.x = (700.0 * cos((M_PI * lbl_1_bss_84) / 180.0)); - arg1->unk18.z = (700.0 * sin((M_PI * lbl_1_bss_84) / 180.0)); + arg1->unk18.x = (700.0 * cosd(lbl_1_bss_84)); + arg1->unk18.z = (700.0 * sind(lbl_1_bss_84)); var_f29 = (arg1->unk18.x - arg1->unk24.x); var_f28 = (arg1->unk18.z - arg1->unk24.z); var_f30 = (180.0 * (atan2(var_f29, var_f28) / M_PI)); @@ -972,13 +972,13 @@ u8 fn_1_E8AC(omObjData* arg0, unkObjStruct* arg1) { var_f31 = lbl_1_data_0[arg1->unk4A]; lbl_1_bss_78 = arg1->unk18; if ((arg1->unk4A == 4) || (arg1->unk4A == 3)) { - arg1->unk24.x = (840.0000610351563 * cos((M_PI * var_f31) / 180.0)); + arg1->unk24.x = (840.0000610351563 * cosd(var_f31)); arg1->unk24.y = 0.0f; - arg1->unk24.z = (840.0000610351563 * sin((M_PI * var_f31) / 180.0)); + arg1->unk24.z = (840.0000610351563 * sind(var_f31)); } else { - arg1->unk24.x = (1050.0 * cos((M_PI * var_f31) / 180.0)); + arg1->unk24.x = (1050.0 * cosd(var_f31)); arg1->unk24.y = 0.0f; - arg1->unk24.z = (1050.0 * sin((M_PI * var_f31) / 180.0)); + arg1->unk24.z = (1050.0 * sind(var_f31)); } arg1->unk30.y = 0.0f; PSMTXRotRad(temp_r29->unk_F0, 0x59, 0.017453292f * arg1->unk68); diff --git a/src/REL/m446Dll/camera.c b/src/REL/m446Dll/camera.c index 85c39250..ef322bf3 100644 --- a/src/REL/m446Dll/camera.c +++ b/src/REL/m446Dll/camera.c @@ -1,6 +1,7 @@ #include "REL/m446Dll.h" #include "math.h" +#include "ext_math.h" #include "game/hsfman.h" #include "game/printfunc.h" #include "game/pad.h" @@ -70,15 +71,15 @@ void fn_1_68DC(void) { temp_f30 = lbl_1_bss_80.x; temp_f29 = lbl_1_bss_80.y; sp10 = lbl_1_bss_80.z; - sp2C.x = (lbl_1_bss_8C.x + (lbl_1_bss_7C * (sin((M_PI * temp_f29) / 180.0) * cos((M_PI * temp_f30) / 180.0)))); - sp2C.y = (lbl_1_bss_8C.y + (lbl_1_bss_7C * -sin((M_PI * temp_f30) / 180.0))); - sp2C.z = (lbl_1_bss_8C.z + (lbl_1_bss_7C * (cos((M_PI * temp_f29) / 180.0) * cos((M_PI * temp_f30) / 180.0)))); + sp2C.x = (lbl_1_bss_8C.x + (lbl_1_bss_7C * (sind(temp_f29) * cosd(temp_f30)))); + sp2C.y = (lbl_1_bss_8C.y + (lbl_1_bss_7C * -sind(temp_f30))); + sp2C.z = (lbl_1_bss_8C.z + (lbl_1_bss_7C * (cosd(temp_f29) * cosd(temp_f30)))); sp20.x = lbl_1_bss_8C.x; sp20.y = lbl_1_bss_8C.y; sp20.z = lbl_1_bss_8C.z; - sp14.x = (sin((M_PI * temp_f29) / 180.0) * sin((M_PI * temp_f30) / 180.0)); - sp14.y = cos((M_PI * temp_f30) / 180.0); - sp14.z = (cos((M_PI * temp_f29) / 180.0) * sin((M_PI * temp_f30) / 180.0)); + sp14.x = (sind(temp_f29) * sind(temp_f30)); + sp14.y = cosd(temp_f30); + sp14.z = (cosd(temp_f29) * sind(temp_f30)); Hu3DCameraPosSet(1, sp2C.x, sp2C.y, sp2C.z, sp14.x, sp14.y, sp14.z, sp20.x, sp20.y, sp20.z); } diff --git a/src/REL/m446Dll/deck.c b/src/REL/m446Dll/deck.c index df75516a..dfa9d846 100644 --- a/src/REL/m446Dll/deck.c +++ b/src/REL/m446Dll/deck.c @@ -1,6 +1,7 @@ #include "REL/m446Dll.h" #include "math.h" +#include "ext_math.h" // bss u32 lbl_1_bss_20; @@ -69,8 +70,8 @@ void fn_1_31D8(unkStruct2** arg0, unkStruct4** arg1, s32* arg2, s32 arg3) { while (fn_1_1D6C(*arg0, &spC) != 0) { if (arg3 != 0) { sp10 = spC->unk10; - sp10.x = ((25.0 * cos((M_PI * var_f31) / 180.0)) - (25.0 * sin((M_PI * var_f31) / 180.0))); - sp10.z = ((25.0 * cos((M_PI * var_f31) / 180.0)) + (25.0 * sin((M_PI * var_f31) / 180.0))); + sp10.x = ((25.0 * cosd(var_f31)) - (25.0 * sind(var_f31))); + sp10.z = ((25.0 * cosd(var_f31)) + (25.0 * sind(var_f31))); sp10.y = 81.0f + (0.1f * var_r31); fn_1_2890(spC, &sp10, 0x12, var_r29 += 3); var_f31 += var_f30; diff --git a/src/game/board/basic_space.c b/src/game/board/basic_space.c index 95bc962e..678ff3a6 100644 --- a/src/game/board/basic_space.c +++ b/src/game/board/basic_space.c @@ -9,6 +9,7 @@ #include "game/objsub.h" #include "game/gamework_data.h" #include "math.h" +#include "ext_math.h" #include "stdlib.h" typedef struct bit_copy { @@ -409,11 +410,11 @@ static void CoinChgDisappear(omObjData* object, coinChg* coin_chg) { OSu16tof32(&angle, &rot); if (angle <= 90.0f) { - object->scale.x = 0.5 * cos((M_PI * rot) / 180.0); - object->scale.y = 2.5 * sin((M_PI * rot) / 180.0); + object->scale.x = 0.5 * cosd(rot); + object->scale.y = 2.5 * sind(rot); } else { - object->scale.x = 2.5 * sin((M_PI * rot) / 180.0); - object->scale.y = 0.5 * cos((M_PI * rot) / 180.0); + object->scale.x = 2.5 * sind(rot); + object->scale.y = 0.5 * cosd(rot); } if (0.0f == object->scale.x) { object->scale.x = 0.0001f; diff --git a/src/game/board/mushroom.c b/src/game/board/mushroom.c index 3f182af2..5bbe9a22 100644 --- a/src/game/board/mushroom.c +++ b/src/game/board/mushroom.c @@ -10,6 +10,7 @@ #include "game/objsub.h" #include "math.h" +#include "ext_math.h" extern s32 boardTutorialData[4]; @@ -277,7 +278,7 @@ static void ShowBox(ItemGiveWork2* arg0, omObjData* arg1) { } OSs16tof32(&arg0->unk_06, &arg1->rot.y); - arg1->trans.y = (sp8.y + (700.0f * cos((M_PI * (f64) arg0->unk_08) / 180.0))); + arg1->trans.y = (sp8.y + (700.0f * cosd(arg0->unk_08))); arg0->unk_08 += 1.5f; arg0->unk_06 += 30; } @@ -298,7 +299,7 @@ static void ExitBox(ItemGiveWork2* arg0, omObjData* arg1) { arg0->unk00_field2 = 1; } - arg1->trans.y = spC.y + (700.0f * cos((M_PI * arg0->unk_08) / 180.0)); + arg1->trans.y = spC.y + (700.0f * cosd(arg0->unk_08)); arg1->rot.y = sin((M_PI * temp) / 180.0); arg0->unk_08 -= 1.5f; arg0->unk_06 -= 30; diff --git a/src/game/board/player.c b/src/game/board/player.c index 87d106bc..5fb7a7b7 100644 --- a/src/game/board/player.c +++ b/src/game/board/player.c @@ -17,6 +17,7 @@ #include "game/pad.h" #include "stdlib.h" #include "math.h" +#include "ext_math.h" static void InitJunction(s32, s32, f32); static void UpdateJunctionGfx(omObjData*); @@ -1042,7 +1043,7 @@ static void InitJunction(s32 arg0, s32 arg1, f32 arg8) { BoardModelLayerSet(temp_r29->unk_06[var_r27], 6); sp5C.x = sp68.x + (100.0 * sin((M_PI * angle) / 180.0)); sp5C.y = 300.0f + sp68.y; - sp5C.z = (var_f29 + (sp68.z + (100.0 * cos((M_PI * angle) / 180.0)))); + sp5C.z = (var_f29 + (sp68.z + (100.0 * cosd(angle)))); BoardModelPosSetV(temp_r29->unk_06[var_r27], &sp5C); BoardModelScaleSet(temp_r29->unk_06[var_r27], var_r28->scale.x, var_r28->scale.y, var_r28->scale.z); var_r27++; diff --git a/src/game/hsfman.c b/src/game/hsfman.c index cc318ea5..f695dedf 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -13,6 +13,7 @@ #include "dolphin/gx/GXVert.h" #include "math.h" +#include "ext_math.h" ModelData Hu3DData[0x200]; CameraData Hu3DCamera[0x10]; @@ -1277,9 +1278,9 @@ BOOL Hu3DModelCameraInfoSet(s16 arg0, u16 arg1) { PSVECSubtract((Point3d* ) &obj_copy->camera.target, (Point3d* ) &obj_copy->camera.pos, &sp8); - sp14.x = ((sp8.x * sp8.y * (1.0 - cos((M_PI * temp_f31) / 180.0))) - (sp8.z * sin((M_PI * temp_f31) / 180.0))); - sp14.y = ((sp8.y * sp8.y) + (1.0f - (sp8.y * sp8.y)) * cos((M_PI * temp_f31) / 180.0)); - sp14.z = (((sp8.y * sp8.z) * (1.0 - cos((M_PI * (f64) temp_f31) / 180.0))) + (sp8.x * sin((M_PI * temp_f31) / 180.0))); + sp14.x = ((sp8.x * sp8.y * (1.0 - cosd(temp_f31))) - (sp8.z * sind(temp_f31))); + sp14.y = ((sp8.y * sp8.y) + (1.0f - (sp8.y * sp8.y)) * cosd(temp_f31)); + sp14.z = (((sp8.y * sp8.z) * (1.0 - cosd(temp_f31))) + (sp8.x * sind(temp_f31))); PSVECNormalize(&sp14, &sp8); Hu3DCameraPosSet(arg1, obj_copy->camera.target.x, obj_copy->camera.target.y, obj_copy->camera.target.z,