From 88aa365b9734017edc77d7f6325b0172014847d0 Mon Sep 17 00:00:00 2001 From: CreateSource Date: Wed, 31 Jul 2024 21:53:10 -0400 Subject: [PATCH 1/2] 2/3rds m412, fix previous headers --- config/GMPE01_00/rels/m409Dll/symbols.txt | 14 +- config/GMPE01_00/rels/m412Dll/symbols.txt | 5 +- configure.py | 4 +- include/REL/m409Dll.h | 270 ++--- include/REL/m412Dll.h | 108 ++ include/REL/m440Dll.h | 237 ++-- include/REL/m446Dll.h | 308 ++--- src/REL/m412Dll/main.c | 1305 +++++++++++++++++++++ src/libhu/setvf.c | 7 + src/libhu/subvf.c | 7 + 10 files changed, 1767 insertions(+), 498 deletions(-) create mode 100644 include/REL/m412Dll.h create mode 100644 src/REL/m412Dll/main.c create mode 100644 src/libhu/setvf.c create mode 100644 src/libhu/subvf.c diff --git a/config/GMPE01_00/rels/m409Dll/symbols.txt b/config/GMPE01_00/rels/m409Dll/symbols.txt index f1bcf978..871d7d04 100644 --- a/config/GMPE01_00/rels/m409Dll/symbols.txt +++ b/config/GMPE01_00/rels/m409Dll/symbols.txt @@ -273,13 +273,13 @@ lbl_1_rodata_418 = .rodata:0x00000418; // type:object size:0x8 scope:local data: 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 -lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x30 data:4byte -lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x10 data:byte -lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 data:float -lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 data:double +lbl_1_rodata_430 = .rodata:0x00000430; // type:object size:0x4 scope:local data:float +lbl_1_rodata_434 = .rodata:0x00000434; // type:object size:0x4 scope:local data:float +lbl_1_rodata_438 = .rodata:0x00000438; // type:object size:0x4 scope:local data:float +lbl_1_rodata_43C = .rodata:0x0000043C; // type:object size:0x30 scope:local data:4byte +lbl_1_rodata_46C = .rodata:0x0000046C; // type:object size:0x10 scope:local data:byte +lbl_1_rodata_47C = .rodata:0x0000047C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_480 = .rodata:0x00000480; // type:object size:0x8 scope:local data:double lbl_1_data_0 = .data:0x00000000; // type:object size:0xC lbl_1_data_C = .data:0x0000000C; // type:object size:0xC lbl_1_data_18 = .data:0x00000018; // type:object size:0x10 diff --git a/config/GMPE01_00/rels/m412Dll/symbols.txt b/config/GMPE01_00/rels/m412Dll/symbols.txt index 6731c9cb..be43ffa3 100644 --- a/config/GMPE01_00/rels/m412Dll/symbols.txt +++ b/config/GMPE01_00/rels/m412Dll/symbols.txt @@ -167,7 +167,8 @@ lbl_1_data_348 = .data:0x00000348; // type:object size:0x18 lbl_1_data_360 = .data:0x00000360; // type:object size:0x9 data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0xC data:float lbl_1_bss_C = .bss:0x0000000C; // type:object size:0xC data:float -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x10 data:float +lbl_1_bss_18 = .bss:0x00000018; // type:object size:0xC data:float +lbl_1_bss_24 = .bss:0x00000024; // type:object size:0x4 lbl_1_bss_28 = .bss:0x00000028; // type:object size:0x114 lbl_1_bss_13C = .bss:0x0000013C; // type:object size:0x114 lbl_1_bss_250 = .bss:0x00000250; // type:object size:0xC data:float @@ -184,7 +185,7 @@ lbl_1_bss_77C = .bss:0x0000077C; // type:object size:0x4 data:float lbl_1_bss_780 = .bss:0x00000780; // type:object size:0x10 data:4byte lbl_1_bss_790 = .bss:0x00000790; // type:object size:0x4 data:4byte lbl_1_bss_794 = .bss:0x00000794; // type:object size:0x4 data:4byte -lbl_1_bss_798 = .bss:0x00000798; // type:object size:0x2 data:2byte +lbl_1_bss_798 = .bss:0x00000798; // type:object size:0x4 data:2byte lbl_1_bss_79C = .bss:0x0000079C; // type:object size:0x2 data:2byte lbl_1_bss_79E = .bss:0x0000079E; // type:object size:0x2 data:2byte lbl_1_bss_7A0 = .bss:0x000007A0; // type:object size:0x2 data:2byte diff --git a/configure.py b/configure.py index 1694e975..89ae9792 100644 --- a/configure.py +++ b/configure.py @@ -762,8 +762,8 @@ def Rel(lib_name, objects): "cflags": cflags_libhu, "host": False, "objects": [ - Object(NonMatching, "libhu/setvf.c"), - Object(NonMatching, "libhu/subvf.c"), + Object(Matching, "libhu/setvf.c"), + Object(Matching, "libhu/subvf.c"), ], }, { diff --git a/include/REL/m409Dll.h b/include/REL/m409Dll.h index d79dee5c..d1f5cce2 100644 --- a/include/REL/m409Dll.h +++ b/include/REL/m409Dll.h @@ -248,168 +248,118 @@ typedef struct _unkStruct12 { } unkStruct12; // bss -// player.c -extern omObjData* lbl_1_bss_3A0[4]; -extern omObjData* lbl_1_bss_39C; -extern s32 lbl_1_bss_38C[4]; -extern unkStruct10 lbl_1_bss_10C[8]; -extern s16 lbl_1_bss_108; -extern s16 lbl_1_bss_106; -extern s16 lbl_1_bss_104; extern unkStruct9 lbl_1_bss_F0; -// main.c -extern Process* lbl_1_bss_E8; -extern s16 lbl_1_bss_E4; -extern omObjData* lbl_1_bss_E0; -extern omObjData* lbl_1_bss_DC; -extern Vec lbl_1_bss_D0; -extern unkStruct4 lbl_1_bss_40[4]; -extern s32 lbl_1_bss_3C; -extern unkStruct3 lbl_1_bss_24; -extern s8 lbl_1_bss_21; -extern u8 lbl_1_bss_20; -extern f32 lbl_1_bss_1C; -extern f32 lbl_1_bss_18; -extern s16 lbl_1_bss_16; -extern s8 lbl_1_bss_14; -extern f32 lbl_1_bss_10; -extern f32 lbl_1_bss_C; -extern s8 lbl_1_bss_A; -extern s16 lbl_1_bss_8; -extern s8 lbl_1_bss_6; -extern s16 lbl_1_bss_4; -extern s16 lbl_1_bss_2; -extern s8 lbl_1_bss_0; - -// data -// main.c -extern Vec lbl_1_data_0; -extern Vec lbl_1_data_C; -extern unkStruct2 lbl_1_data_18; -extern Vec lbl_1_data_28; -extern Vec lbl_1_data_34; -extern Vec lbl_1_data_40; -extern unkStruct lbl_1_data_4C[4]; -extern u32 lbl_1_data_BC; -extern s32 lbl_1_data_C0; -// player.c -extern u32 lbl_1_data_138; // unk -extern s32 lbl_1_data_13C[7]; -extern GXColor lbl_1_data_158[8]; -extern HsfVector2f lbl_1_data_178[4]; -extern GXColor lbl_1_data_198[8]; -extern u32 lbl_1_data_1EC; // prototypes -extern void ModuleProlog(void); -extern void fn_1_434(omObjData* object); -extern void fn_1_4DC(omObjData* object); -extern s8 fn_1_524(void); -extern s8 fn_1_B80(void); -extern void fn_1_DDC(omObjData* object); -extern void fn_1_F70(omObjData* object); -extern s8 fn_1_10E8(omObjData* object); -extern s8 fn_1_1B74(omObjData* object); -extern void fn_1_2098(omObjData* object); -extern void fn_1_23EC(s16); -extern void fn_1_2414(u16, u16); -extern u16 fn_1_2454(u16); -extern void fn_1_2484(omObjData* object); -extern void fn_1_2DCC(omObjData* object); -extern void fn_1_3840(void); -extern void fn_1_3988(unkStruct4*, s16, s16); -extern s32 fn_1_3AD8(s32, f32, f32, f32, f32, f32, f32); -extern void fn_1_40A4(Mtx, Mtx); -extern f32 fn_1_4120(f32, f32, f32, f32); -extern void fn_1_417C(void); -extern void fn_1_44F0(s16, f32, f32, f32, s8, s16); -extern void fn_1_4FFC(s16, f32, f32, f32, s16); -extern void fn_1_5408(ModelData*, unkStruct6*, Mtx); -extern void fn_1_55E0(ModelData*, unkStruct6*, Mtx); -extern void fn_1_57DC(ModelData*, unkStruct6*, Mtx); -extern unkStruct5* fn_1_58E0(s16, Vec*, Vec*, f32, GXColor*); -extern s16 fn_1_5A18(AnimData*, s16, f32, s16, s16); -extern void fn_1_5F5C(s16); -extern void fn_1_5FBC(s16, m409Func6); -extern void fn_1_5FF4(s16, u8); -extern void fn_1_602C(ModelData*, Mtx); -extern void fn_1_6608(HsfVector2f*, s16, s16, f32, f32); -extern void fn_1_66D4(HsfVector2f*, HsfVector2f*, s16, f32, f32); -extern void fn_1_6778(Vec*, Vec*, Vec*, s16); +void ObjectSetup(void); +void fn_1_434(omObjData* object); +void fn_1_4DC(omObjData* object); +s8 fn_1_524(void); +s8 fn_1_B80(void); +void fn_1_DDC(omObjData* object); +void fn_1_F70(omObjData* object); +s8 fn_1_10E8(omObjData* object); +s8 fn_1_1B74(omObjData* object); +void fn_1_2098(omObjData* object); +void fn_1_23EC(s16); +void fn_1_2414(u16, u16); +u16 fn_1_2454(u16); +void fn_1_2484(omObjData* object); +void fn_1_2DCC(omObjData* object); +void fn_1_3840(void); +void fn_1_3988(unkStruct4*, s16, s16); +s32 fn_1_3AD8(s32, f32, f32, f32, f32, f32, f32); +void fn_1_40A4(Mtx, Mtx); +f32 fn_1_4120(f32, f32, f32, f32); +void fn_1_417C(void); +void fn_1_44F0(s16, f32, f32, f32, s8, s16); +void fn_1_4FFC(s16, f32, f32, f32, s16); +void fn_1_5408(ModelData*, unkStruct6*, Mtx); +void fn_1_55E0(ModelData*, unkStruct6*, Mtx); +void fn_1_57DC(ModelData*, unkStruct6*, Mtx); +unkStruct5* fn_1_58E0(s16, Vec*, Vec*, f32, GXColor*); +s16 fn_1_5A18(AnimData*, s16, f32, s16, s16); +void fn_1_5F5C(s16); +void fn_1_5FBC(s16, m409Func6); +void fn_1_5FF4(s16, u8); +void fn_1_602C(ModelData*, Mtx); +void fn_1_6608(HsfVector2f*, s16, s16, f32, f32); +void fn_1_66D4(HsfVector2f*, HsfVector2f*, s16, f32, f32); +void fn_1_6778(Vec*, Vec*, Vec*, s16); // player.c -extern void fn_1_67E0(Process*); -extern void fn_1_6900(void); -extern void fn_1_6928(omObjData*); -extern void fn_1_7344(omObjData*); -extern void fn_1_7FE8(omObjData*); -extern void fn_1_8838(unkStruct8*); -extern s8 fn_1_8D08(u8); -extern void fn_1_8D6C(unkStruct8*); -extern void fn_1_91C0(omObjData*); -extern void fn_1_962C(omObjData*); -extern s32 fn_1_A584(unkStruct10*); -extern s8 fn_1_A9C0(Vec*, f32*); -extern s32 fn_1_ABB4(void); -extern void fn_1_AC08(s32*, s32); -extern f32 fn_1_AD40(f32, f32, f32); -extern f32 fn_1_AE94(f32, f32, f32, f32); -extern void fn_1_AF0C(f32*, f32*, f32*, f32*, f32); -extern f32 fn_1_B028(f32, f32, f32, f32); -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); +void fn_1_67E0(Process*); +void fn_1_6900(void); +void fn_1_6928(omObjData*); +void fn_1_7344(omObjData*); +void fn_1_7FE8(omObjData*); +void fn_1_8838(unkStruct8*); +s8 fn_1_8D08(u8); +void fn_1_8D6C(unkStruct8*); +void fn_1_91C0(omObjData*); +void fn_1_962C(omObjData*); +s32 fn_1_A584(unkStruct10*); +s8 fn_1_A9C0(Vec*, f32*); +s32 fn_1_ABB4(void); +void fn_1_AC08(s32*, s32); +f32 fn_1_AD40(f32, f32, f32); +f32 fn_1_AE94(f32, f32, f32, f32); +void fn_1_AF0C(f32*, f32*, f32*, f32*, f32); +f32 fn_1_B028(f32, f32, f32, f32); +void fn_1_B0A0(f32*, f32*, f32*, f32*, f32); +f32 fn_1_B378(Vec*); +f32 fn_1_B6A4(Vec*, Vec*, Vec*); +f32 fn_1_B9E0(Vec*, Vec*, Vec*, Vec*, Vec*); +f32 fn_1_BF38(s16); // cursor.c -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 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_EC8C(s16, f32, f32, f32); -extern void fn_1_ED00(s16, s32); -extern void fn_1_ED44(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_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 +void fn_1_BF88(s16, s16); +void fn_1_C0C0(void); +void fn_1_C164(unkStruct8*); +void fn_1_CB98(ModelData* model, Mtx matrix); +unkStruct8* fn_1_CCB0(s16 idx); +unkStruct8Sub* fn_1_CCCC(s16, s16); +void fn_1_CCF8(unkStruct11**, s16, f32, f32); +void fn_1_CE7C(Vec**, s16, Vec*); +void fn_1_CF1C(GXColor**, s16, GXColor*); +void fn_1_CFC4(Vec**, s16, Vec*); +void fn_1_D050(HsfVector2f**, s16, HsfVector2f*); +void fn_1_D0E8(unkStruct8Sub*); +void fn_1_D430(unkStruct8*); +s16 fn_1_DA48(u8, u8); +void fn_1_DDB8(s16); +void fn_1_DEF4(s16, s16, u8); +s16 fn_1_DF20(u32, s16, s16); +void fn_1_E228(s16); +s32 fn_1_E2A8(s16, u8, u32, s16, s16); +s32 fn_1_E7C8(s16, u8, u32); +void fn_1_E818(s16, f32, f32, f32); +void fn_1_E85C(s16, s16, f32, f32, f32); +void fn_1_E8CC(s16, f32, f32, f32); +void fn_1_E940(s16, f32, f32, f32); +void fn_1_E99C(s16, s16, f32, f32, f32); +void fn_1_E940(s16, f32, f32, f32); +void fn_1_EA24(s16, f32, f32, f32); +void fn_1_EAB0(s16, f32, f32, f32); +void fn_1_EAF4(s16, s16, f32, f32, f32); +void fn_1_EB64(s16, f32, f32, f32); +void fn_1_EBD8(s16, f32, f32, f32); +void fn_1_EC1C(s16, s16, f32, f32, f32); +void fn_1_EC8C(s16, f32, f32, f32); +void fn_1_ED00(s16, s32); +void fn_1_ED44(s16, s16, s32); +void fn_1_EDB4(s16, s32); +void fn_1_EE24(s16, u32); +void fn_1_EE68(s16, s16, u32); +void fn_1_EED8(s16, u32); +s32 fn_1_EF48(s16, s32); +s32 fn_1_EFA4(s16, s16, s32); +void fn_1_F024(s16, s16, u8, u8, u8, u8); +void fn_1_F098(s16, u8, u8, u8, u8); +void fn_1_F110(s16, s16, u8); +void fn_1_F17C(s16, s16, u8, u8); +void fn_1_F1F4(s16, u8); +void fn_1_F28C(s16, s16, f32); +void fn_1_F2F8(s16, s16, u8, f32); +void fn_1_F370(s16, f32); +void fn_1_F408(s16, s16, u8); +void fn_1_F478(s16, s16, u8, u8); +void fn_1_F4F0(s16, u8); \ No newline at end of file diff --git a/include/REL/m412Dll.h b/include/REL/m412Dll.h new file mode 100644 index 00000000..3499be88 --- /dev/null +++ b/include/REL/m412Dll.h @@ -0,0 +1,108 @@ +#include "dolphin.h" + +#include "game/object.h" +#include "game/hsfman.h" + +// types +typedef struct _unkStruct { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC; + Vec unk10; + HsfVector2f unk1C; + Vec unk24; + f32 unk30; + f32 unk34; +} unkStruct; + +typedef struct _unkStruct2 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC[5]; + s16 unk16[5]; + s16 unk20; + s32 unk24; + s32 unk28; + Vec unk2C; + Vec unk38; +} unkStruct2; // sizeof 0x44 + +typedef struct _unkStruct3 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + s16 unk8; + s16 unkA; + s16 unkC[6]; + s16 unk18[6]; + s32 unk24; + s32 unk28; + s32 unk2C; + s32 unk30; + char unk34[0x8]; + s32 unk3C; + Vec unk40; + char unk4C[0x8]; + Vec unk54; + Vec unk60; + f32 unk6C; + char unk70[0xC]; + Vec unk7C; + s8 unk88; + s8 unk89; + s8 unk8A; + s8 unk8B; + u16 unk8C; + u16 unk8E; + char unk90[0x14]; + s32 unkA4; +} unkStruct3; // sizeof 0xA8 + +typedef struct _unkStruct4 { + s32 unk0; + s32 unk4; + s32 unk8; + Vec unkC; +} unkStruct4; + +// prototypes +void ObjectSetup(void); +void fn_1_6EC(f32, f32, f32, s32); +void fn_1_73C(void); +void fn_1_7BC(void); +void fn_1_894(omObjData* object); +void fn_1_898(omObjData* object); +void fn_1_8BC(void); +f32 fn_1_1D08(f32); +void fn_1_1D88(void); +void fn_1_1DBC(void); +void fn_1_2014(void); +void fn_1_2064(void); +s32 fn_1_2708(void); +f32 fn_1_27C4(s32, f32, f32); +void fn_1_2A1C(void); +void fn_1_3950(void); +s8 fn_1_4BE4(s32, s32); +void fn_1_4C9C(Vec*, f32, f32); +s8 fn_1_4E58(s32, s32); +u8 fn_1_525C(s32, s32); +u16 fn_1_531C(s32); +u16 fn_1_5388(s32); +s32 fn_1_53F4(unkStruct3*, f32, f32, f32); +s32 fn_1_561C(unkStruct3*, s32*); +//... +void fn_1_7C60(void); // * +void fn_1_A01C(ModelData* model, ParticleData* particle, Mtx matrix); // * +void fn_1_A618(ModelData* model, ParticleData* particle, Mtx matrix); // * +void fn_1_AA88(ModelData* model, ParticleData* particle, Mtx matrix); // * +void fn_1_B160(void); // * +void fn_1_B1C0(void); // * \ No newline at end of file diff --git a/include/REL/m440Dll.h b/include/REL/m440Dll.h index 1a64053e..181ce25b 100644 --- a/include/REL/m440Dll.h +++ b/include/REL/m440Dll.h @@ -239,158 +239,111 @@ typedef struct _unkObjStruct { ////// BSS ////// -// object.c extern omObjData* lbl_1_bss_C0[4]; -extern s16 lbl_1_bss_B8[4]; -extern Vec lbl_1_bss_88[4]; -extern f32 lbl_1_bss_84; -extern Vec lbl_1_bss_78; -extern s16 lbl_1_bss_74; -extern u8 lbl_1_bss_72; -extern s16 lbl_1_bss_70; -// main.c -extern omObjData* lbl_1_bss_6C; -extern omObjData* lbl_1_bss_68; -extern unkStruct6* lbl_1_bss_64; -extern s16 lbl_1_bss_60; -extern Mtx lbl_1_bss_30; -extern s16 lbl_1_bss_2C; -extern void* lbl_1_bss_28; -extern u32 lbl_1_bss_24; -extern s16 lbl_1_bss_10[10]; -extern s16 lbl_1_bss_E; -extern u8 lbl_1_bss_C; -extern u8 lbl_1_bss_B; -extern u8 lbl_1_bss_A; -extern s16 lbl_1_bss_8; -extern s16 lbl_1_bss_6; -extern s16 lbl_1_bss_4; -extern s8 lbl_1_bss_2; -extern s8 lbl_1_bss_1; -extern s8 lbl_1_bss_0; ////// DATA ////// // main.c extern f32 lbl_1_data_0[5]; extern s16 lbl_1_data_14[6]; -extern Vec lbl_1_data_20; -extern Vec lbl_1_data_2C; -extern Vec lbl_1_data_38; -extern unkStruct7 lbl_1_data_44; -extern Vec lbl_1_data_54; -extern Vec lbl_1_data_60; -extern Vec lbl_1_data_6C; -extern unkStruct lbl_1_data_78[3]; -extern s16 lbl_1_data_E4[2]; -extern s16 lbl_1_data_E8[2]; -extern s16 lbl_1_data_EC[2]; -extern s16 lbl_1_data_F0[2]; -extern s32 lbl_1_data_F4[4]; -extern s16 lbl_1_data_104[2]; -extern s16 lbl_1_data_108[2]; // object.c extern s16 lbl_1_data_1D8; -extern s16 lbl_1_data_1DA; -extern u32 lbl_1_data_1DC[8][2]; -extern f32 lbl_1_data_21C[4]; -extern f32 lbl_1_data_250; ////// FUNCTIONS ////// // main.c -extern void ObjectSetup(void); -extern void fn_1_3C4(omObjData* object); -extern void fn_1_434(omObjData* object); -extern s32 fn_1_4A4(void); -extern s32 fn_1_6C8(void); -extern void fn_1_8F0(omObjData* object); -extern void fn_1_AE0(omObjData* object); -extern u8 fn_1_E14(omObjData* object); -extern u8 fn_1_1138(omObjData* object); -extern void fn_1_16D8(void); -extern void fn_1_1708(void); -extern void fn_1_1768(void); -extern s16 fn_1_17CC(void); -extern s16 fn_1_17F4(void); -extern void fn_1_181C(void); -extern u8 fn_1_1890(void); -extern void fn_1_18E0(void); -extern u8 fn_1_1954(void); -extern void fn_1_19B0(void); -extern void fn_1_1CAC(void); -extern void fn_1_2240(ModelData* data, unkStruct5*, Mtx); -extern u16 fn_1_23E4(u16); -extern void fn_1_2428(u16, u16); -extern void fn_1_2470(omObjData* object); -extern void fn_1_2A74(omObjData* object); -extern void fn_1_2AB4(omObjData* object); -extern void fn_1_2B04(omObjData* object); -extern void fn_1_2CA8(omObjData* object); -extern void fn_1_2D28(omObjData* object); -extern void fn_1_33D4(omObjData* object); -extern void fn_1_3DD8(omObjData* object); -extern void fn_1_4558(omObjData* object); -extern void fn_1_45BC(omObjData* object); -extern void fn_1_4660(omObjData* object); -extern void fn_1_46E0(omObjData* object); -extern void fn_1_4A20(omObjData* object); -extern void fn_1_4B44(omObjData* object); -extern void fn_1_4E00(s16, f32); -extern s16 fn_1_4E2C(void); -extern s16 fn_1_4E54(s16); -extern u16 fn_1_4EA8(u16); -extern void fn_1_4EEC(u16, u16); -extern void fn_1_4F34(unkStruct6*); -extern void fn_1_5010(unkStruct6*, Vec*, f32); -extern void fn_1_57B4(unkStruct6*); -extern void fn_1_5C2C(s16, HsfObject*, unkStruct6*, u16); -extern void fn_1_6554(unkStruct6*, HsfObject*); -extern void fn_1_6B58(unkStruct6*, HsfObject*); -extern void fn_1_71FC(unkStruct6*, Vec*, s16, Vec); -extern void fn_1_7934(unkStruct6*, unkStruct8*, Vec*); -extern void fn_1_7D60(unkStruct15*, unkStruct13*, s16); -extern void fn_1_806C(ModelData*, Mtx); -extern void fn_1_8470(unkStruct12*, unkStruct13*); -extern void fn_1_8AC4(Mtx); -extern void fn_1_8D1C(void); -extern void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]); -extern f32 fn_1_927C(f32, f32, f32); -extern void fn_1_9344(Mtx, Mtx); -extern f32 fn_1_93C0(f32, f32, f32); -extern f32 fn_1_93D0(f32, f32, f32, f32); -extern unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); -extern s16 fn_1_956C(AnimData*, s16, f32, s16, s16); -extern void fn_1_9AB0(s16); -extern unkStruct5* fn_1_9B10(s16); -extern unkStruct4* fn_1_9B3C(s16, s16); -extern void fn_1_9B94(s16, m440Func5); -extern void fn_1_9BCC(s16, u8); -extern void fn_1_9C04(ModelData*, Mtx); -extern void fn_1_A1B8(HsfVector2f*, s16, s16, f32, f32); -extern void fn_1_A284(HsfVector2f*, HsfVector2f*, s16, f32, f32); -extern void fn_1_A328(Vec*, Vec*, Vec*, s16); +void ObjectSetup(void); +void fn_1_3C4(omObjData* object); +void fn_1_434(omObjData* object); +s32 fn_1_4A4(void); +s32 fn_1_6C8(void); +void fn_1_8F0(omObjData* object); +void fn_1_AE0(omObjData* object); +u8 fn_1_E14(omObjData* object); +u8 fn_1_1138(omObjData* object); +void fn_1_16D8(void); +void fn_1_1708(void); +void fn_1_1768(void); +s16 fn_1_17CC(void); +s16 fn_1_17F4(void); +void fn_1_181C(void); +u8 fn_1_1890(void); +void fn_1_18E0(void); +u8 fn_1_1954(void); +void fn_1_19B0(void); +void fn_1_1CAC(void); +void fn_1_2240(ModelData* data, unkStruct5*, Mtx); +u16 fn_1_23E4(u16); +void fn_1_2428(u16, u16); +void fn_1_2470(omObjData* object); +void fn_1_2A74(omObjData* object); +void fn_1_2AB4(omObjData* object); +void fn_1_2B04(omObjData* object); +void fn_1_2CA8(omObjData* object); +void fn_1_2D28(omObjData* object); +void fn_1_33D4(omObjData* object); +void fn_1_3DD8(omObjData* object); +void fn_1_4558(omObjData* object); +void fn_1_45BC(omObjData* object); +void fn_1_4660(omObjData* object); +void fn_1_46E0(omObjData* object); +void fn_1_4A20(omObjData* object); +void fn_1_4B44(omObjData* object); +void fn_1_4E00(s16, f32); +s16 fn_1_4E2C(void); +s16 fn_1_4E54(s16); +u16 fn_1_4EA8(u16); +void fn_1_4EEC(u16, u16); +void fn_1_4F34(unkStruct6*); +void fn_1_5010(unkStruct6*, Vec*, f32); +void fn_1_57B4(unkStruct6*); +void fn_1_5C2C(s16, HsfObject*, unkStruct6*, u16); +void fn_1_6554(unkStruct6*, HsfObject*); +void fn_1_6B58(unkStruct6*, HsfObject*); +void fn_1_71FC(unkStruct6*, Vec*, s16, Vec); +void fn_1_7934(unkStruct6*, unkStruct8*, Vec*); +void fn_1_7D60(unkStruct15*, unkStruct13*, s16); +void fn_1_806C(ModelData*, Mtx); +void fn_1_8470(unkStruct12*, unkStruct13*); +void fn_1_8AC4(Mtx); +void fn_1_8D1C(void); +void fn_1_91A4(Vec*, Vec*, Vec*, f32[5]); +f32 fn_1_927C(f32, f32, f32); +void fn_1_9344(Mtx, Mtx); +f32 fn_1_93C0(f32, f32, f32); +f32 fn_1_93D0(f32, f32, f32, f32); +unkStruct4* fn_1_942C(s16, Vec*, Vec*, f32, GXColor*); +s16 fn_1_956C(AnimData*, s16, f32, s16, s16); +void fn_1_9AB0(s16); +unkStruct5* fn_1_9B10(s16); +unkStruct4* fn_1_9B3C(s16, s16); +void fn_1_9B94(s16, m440Func5); +void fn_1_9BCC(s16, u8); +void fn_1_9C04(ModelData*, Mtx); +void fn_1_A1B8(HsfVector2f*, s16, s16, f32, f32); +void fn_1_A284(HsfVector2f*, HsfVector2f*, s16, f32, f32); +void fn_1_A328(Vec*, Vec*, Vec*, s16); void fn_1_A390(ModelData*, Mtx); -extern void fn_1_AA94(void); +void fn_1_AA94(void); // object.c -extern void fn_1_AE08(Process*); -extern void fn_1_AEE4(omObjData*); -extern void fn_1_B17C(omObjData*); -extern void fn_1_B180(omObjData*); -extern void fn_1_B3A4(omObjData*); -extern void fn_1_B884(omObjData*, unkObjStruct*); -extern void fn_1_C1D4(omObjData*, unkObjStruct*); -extern void fn_1_C944(omObjData*, unkObjStruct*); -extern s16 fn_1_CFAC(unkObjStruct*, u8); -extern void fn_1_D24C(unkObjStruct*, f32, f32); -extern void fn_1_D34C(omObjData*, unkObjStruct*); -extern void fn_1_D7F8(omObjData*, unkObjStruct*); -extern void fn_1_E034(omObjData*, unkObjStruct*); -extern u8 fn_1_E8AC(omObjData*, unkObjStruct*); -extern s32 fn_1_ED88(omObjData*, s16, u32); -extern void fn_1_EE78(void); -extern void fn_1_EF50(void); -extern s16 fn_1_F0FC(void); -extern void fn_1_F168(void); -extern void fn_1_F228(void); -extern u16 fn_1_F4C0(unkObjStruct*, u16); -extern void fn_1_F4D4(unkObjStruct*, u16, u16); -extern s32 fn_1_F4FC(s32); +void fn_1_AE08(Process*); +void fn_1_AEE4(omObjData*); +void fn_1_B17C(omObjData*); +void fn_1_B180(omObjData*); +void fn_1_B3A4(omObjData*); +void fn_1_B884(omObjData*, unkObjStruct*); +void fn_1_C1D4(omObjData*, unkObjStruct*); +void fn_1_C944(omObjData*, unkObjStruct*); +s16 fn_1_CFAC(unkObjStruct*, u8); +void fn_1_D24C(unkObjStruct*, f32, f32); +void fn_1_D34C(omObjData*, unkObjStruct*); +void fn_1_D7F8(omObjData*, unkObjStruct*); +void fn_1_E034(omObjData*, unkObjStruct*); +u8 fn_1_E8AC(omObjData*, unkObjStruct*); +s32 fn_1_ED88(omObjData*, s16, u32); +void fn_1_EE78(void); +void fn_1_EF50(void); +s16 fn_1_F0FC(void); +void fn_1_F168(void); +void fn_1_F228(void); +u16 fn_1_F4C0(unkObjStruct*, u16); +void fn_1_F4D4(unkObjStruct*, u16, u16); +s32 fn_1_F4FC(s32); diff --git a/include/REL/m446Dll.h b/include/REL/m446Dll.h index ed3e8df3..fc1e35ba 100644 --- a/include/REL/m446Dll.h +++ b/include/REL/m446Dll.h @@ -170,197 +170,135 @@ typedef void (*m446Func1)(unkStruct*); typedef void (*m446Func4)(unkStruct4*); typedef void (*m446Func8)(unkStruct8*); -////// BSS ////// -// stage.c -extern unkStruct3* lbl_1_bss_A0; -// cursor.c -extern unkStruct3* lbl_1_bss_98; -// camera.c -extern Vec lbl_1_bss_8C; -extern Vec lbl_1_bss_80; -extern f32 lbl_1_bss_7C; -extern Vec lbl_1_bss_70; -extern Vec lbl_1_bss_64; -extern f32 lbl_1_bss_60; -extern Vec lbl_1_bss_54; -extern Vec lbl_1_bss_48; -extern f32 lbl_1_bss_44; -extern f32 lbl_1_bss_40; -extern f32 lbl_1_bss_3C; -extern s32 lbl_1_bss_38; -// player.c -extern unkStruct3* lbl_1_bss_30; -// table.c -extern unkStruct3* lbl_1_bss_28; -// deck.c -extern u32 lbl_1_bss_20; -// card.c -extern unkStruct3* lbl_1_bss_18; -// main.c -extern s32 lbl_1_bss_14; -extern s32 lbl_1_bss_10; -extern Process* lbl_1_bss_C; -extern omObjData* lbl_1_bss_8; -extern s32 lbl_1_bss_4; -extern unkStruct* lbl_1_bss_0; - -////// DATA ////// -// main.c -extern Vec lbl_1_data_0; -extern Vec lbl_1_data_C; -extern f32 lbl_1_data_18; -extern Vec lbl_1_data_1C; -extern Vec lbl_1_data_28; -extern f32 lbl_1_data_34; -extern Vec lbl_1_data_38[2]; -extern Vec lbl_1_data_50[2]; -extern f32 lbl_1_data_68[2]; -extern s32 lbl_1_data_70[2][2]; -extern m446Func1 lbl_1_data_A0[5]; -// card.c -extern m446Func4 lbl_1_data_150[3]; -// player.c -extern s32 lbl_1_data_228[9]; -extern s32 lbl_1_data_24C[9][4]; -extern m446Func8 lbl_1_data_2DC[5]; -// camera.c -extern Vec lbl_1_data_370; -// cursor.c -extern s32 lbl_1_data_3C8[9]; -// stage.c -extern unkStruct10 lbl_1_data_460[3]; -extern Vec lbl_1_data_424[5]; -extern Vec lbl_1_data_4B4[3]; - ////// PROTOTYPES ////// // main.c -extern void ObjectSetup(void); -extern void fn_1_13C(omObjData*); -extern unkStruct* m446FlowCreate(void); -extern void fn_1_3FC(unkStruct*); -extern void fn_1_4B4(unkStruct*); -extern void fn_1_53C(unkStruct*); -extern void fn_1_958(unkStruct*); -extern void fn_1_B78(unkStruct*); -extern void fn_1_C0C(unkStruct*); -extern void fn_1_CA0(unkStruct*); -extern s32 fn_1_17FC(unkStruct*); -extern void fn_1_183C(unkStruct*); -extern void fn_1_1874(unkStruct*); -extern void fn_1_18B0(unkStruct*); -extern void fn_1_19D4(void); +void ObjectSetup(void); +void fn_1_13C(omObjData*); +unkStruct* m446FlowCreate(void); +void fn_1_3FC(unkStruct*); +void fn_1_4B4(unkStruct*); +void fn_1_53C(unkStruct*); +void fn_1_958(unkStruct*); +void fn_1_B78(unkStruct*); +void fn_1_C0C(unkStruct*); +void fn_1_CA0(unkStruct*); +s32 fn_1_17FC(unkStruct*); +void fn_1_183C(unkStruct*); +void fn_1_1874(unkStruct*); +void fn_1_18B0(unkStruct*); +void fn_1_19D4(void); // card.c -extern unkStruct2* fn_1_1C64(s32); -extern void fn_1_1CF8(unkStruct2*); -extern s32 fn_1_1D30(unkStruct2*, void*); -extern s32 fn_1_1D6C(unkStruct2*, unkStruct4**); -extern s32 fn_1_1DA8(unkStruct2*, void**); -extern BOOL fn_1_1DDC(unkStruct2*); -extern s32 fn_1_1DEC(unkStruct2*); -extern unkStruct3* fn_1_1DF4(void*); -extern void fn_1_1E5C(unkStruct3*); -extern void fn_1_1E84(unkStruct3**); -extern void fn_1_1EC8(unkStruct3*, unkStruct3*); -extern void fn_1_1F04(unkStruct3*); -extern void fn_1_1F38(u8*, u8*, s32); -extern void fn_1_1F84(u8*, s8, s32); -extern void fn_1_1FC0(u8*, s32); -extern s32 fn_1_1FFC(s8*, s8*, s32); -extern s32 fn_1_2064(void); -extern void fn_1_207C(void); -extern void fn_1_20D4(void); -extern unkStruct4* m446CardCreate(s32); -extern void fn_1_2688(unkStruct4*); -extern void fn_1_272C(unkStruct4*); -extern void fn_1_2794(unkStruct4*); -extern void fn_1_27FC(unkStruct4*, Vec*, s32); -extern void fn_1_2890(unkStruct4*, Vec*, s32, s32); -extern void fn_1_2928(unkStruct4*, Vec*, s32); -extern void fn_1_29B4(unkStruct4*, f32, s32); -extern void fn_1_2A1C(unkStruct4*); -extern void fn_1_2A58(unkStruct4*); -extern void fn_1_2A94(unkStruct4*); -extern void fn_1_2AA8(unkStruct4*); -extern void fn_1_2D94(unkStruct4*); -extern void fn_1_2DA8(unkStruct4*); -extern void fn_1_2EC0(unkStruct4*, s32); -extern void fn_1_2F64(unkStruct4*); +unkStruct2* fn_1_1C64(s32); +void fn_1_1CF8(unkStruct2*); +s32 fn_1_1D30(unkStruct2*, void*); +s32 fn_1_1D6C(unkStruct2*, unkStruct4**); +s32 fn_1_1DA8(unkStruct2*, void**); +BOOL fn_1_1DDC(unkStruct2*); +s32 fn_1_1DEC(unkStruct2*); +unkStruct3* fn_1_1DF4(void*); +void fn_1_1E5C(unkStruct3*); +void fn_1_1E84(unkStruct3**); +void fn_1_1EC8(unkStruct3*, unkStruct3*); +void fn_1_1F04(unkStruct3*); +void fn_1_1F38(u8*, u8*, s32); +void fn_1_1F84(u8*, s8, s32); +void fn_1_1FC0(u8*, s32); +s32 fn_1_1FFC(s8*, s8*, s32); +s32 fn_1_2064(void); +void fn_1_207C(void); +void fn_1_20D4(void); +unkStruct4* m446CardCreate(s32); +void fn_1_2688(unkStruct4*); +void fn_1_272C(unkStruct4*); +void fn_1_2794(unkStruct4*); +void fn_1_27FC(unkStruct4*, Vec*, s32); +void fn_1_2890(unkStruct4*, Vec*, s32, s32); +void fn_1_2928(unkStruct4*, Vec*, s32); +void fn_1_29B4(unkStruct4*, f32, s32); +void fn_1_2A1C(unkStruct4*); +void fn_1_2A58(unkStruct4*); +void fn_1_2A94(unkStruct4*); +void fn_1_2AA8(unkStruct4*); +void fn_1_2D94(unkStruct4*); +void fn_1_2DA8(unkStruct4*); +void fn_1_2EC0(unkStruct4*, s32); +void fn_1_2F64(unkStruct4*); // deck.c -extern unkStruct5* fn_1_3064(void); -extern void fn_1_3180(unkStruct2**); -extern void fn_1_31D8(unkStruct2**, unkStruct4**, s32*, s32); -extern void fn_1_34A0(unkStruct5*, unkStruct4**, s32, s32); -extern s32 m446DeckPushCard(unkStruct5*, unkStruct4*, s32); -extern s32 m446DeckPopCard(unkStruct2**, unkStruct4**); -extern void fn_1_38B0(unkStruct2**); -extern s32 fn_1_38F0(void); +unkStruct5* fn_1_3064(void); +void fn_1_3180(unkStruct2**); +void fn_1_31D8(unkStruct2**, unkStruct4**, s32*, s32); +void fn_1_34A0(unkStruct5*, unkStruct4**, s32, s32); +s32 m446DeckPushCard(unkStruct5*, unkStruct4*, s32); +s32 m446DeckPopCard(unkStruct2**, unkStruct4**); +void fn_1_38B0(unkStruct2**); +s32 fn_1_38F0(void); // table.c -extern s32 fn_1_3924(void); -extern void fn_1_393C(void); -extern void fn_1_3994(void); -extern unkStruct6* fn_1_39D0(void); -extern void fn_1_3B4C(unkStruct6*); -extern s32 fn_1_3BF0(unkStruct6*, unkStruct4*, s32); -extern s32 fn_1_3EB4(unkStruct6*, unkStruct4*, s32); -extern s32 fn_1_3FD0(unkStruct6*, s32, unkStruct4**); -extern void fn_1_4000(unkStruct6*, s32); -extern s32 fn_1_4088(unkStruct6*, u8, u8, s32, unkStruct4**, s32); -extern void fn_1_46AC(unkStruct6*); -extern void fn_1_46D0(unkStruct6*); -extern s32 fn_1_4720(unkStruct6*, s32); -extern void fn_1_4798(unkStruct6*); +s32 fn_1_3924(void); +void fn_1_393C(void); +void fn_1_3994(void); +unkStruct6* fn_1_39D0(void); +void fn_1_3B4C(unkStruct6*); +s32 fn_1_3BF0(unkStruct6*, unkStruct4*, s32); +s32 fn_1_3EB4(unkStruct6*, unkStruct4*, s32); +s32 fn_1_3FD0(unkStruct6*, s32, unkStruct4**); +void fn_1_4000(unkStruct6*, s32); +s32 fn_1_4088(unkStruct6*, u8, u8, s32, unkStruct4**, s32); +void fn_1_46AC(unkStruct6*); +void fn_1_46D0(unkStruct6*); +s32 fn_1_4720(unkStruct6*, s32); +void fn_1_4798(unkStruct6*); // player.c -extern s32 fn_1_480C(void); -extern void fn_1_4824(void); -extern void fn_1_487C(void); -extern unkStruct8* m446PlayerCreate(s32, unkStruct6*); -extern void fn_1_509C(unkStruct8*); -extern s32 m446PlayerAppendCard(unkStruct8*, unkStruct4*, s32); -extern s32 m446PlayerRemoveCard(unkStruct8*, unkStruct4*, s32); -extern s32 fn_1_5648(unkStruct8*, s32, unkStruct4**); -extern s32 fn_1_5678(unkStruct8*, unkStruct4**, s32); -extern void fn_1_5B34(unkStruct8*); -extern void fn_1_5B48(unkStruct8*); -extern void fn_1_5C10(unkStruct8*); -extern void fn_1_5C24(unkStruct8*); -extern void fn_1_5CEC(unkStruct8*); -extern void fn_1_5D00(unkStruct8*); -extern void fn_1_5E54(unkStruct8*, s32); -extern void fn_1_6074(unkStruct8*); -extern void fn_1_6264(unkStruct8*, Vec*, s32); -extern void fn_1_62F0(unkStruct8*, Vec*, s32); -extern void fn_1_637C(unkStruct8*, s32); -extern void fn_1_64BC(unkStruct8*, s32, s32); -extern void fn_1_6578(unkStruct8*); -extern void fn_1_6620(unkStruct8*); +s32 fn_1_480C(void); +void fn_1_4824(void); +void fn_1_487C(void); +unkStruct8* m446PlayerCreate(s32, unkStruct6*); +void fn_1_509C(unkStruct8*); +s32 m446PlayerAppendCard(unkStruct8*, unkStruct4*, s32); +s32 m446PlayerRemoveCard(unkStruct8*, unkStruct4*, s32); +s32 fn_1_5648(unkStruct8*, s32, unkStruct4**); +s32 fn_1_5678(unkStruct8*, unkStruct4**, s32); +void fn_1_5B34(unkStruct8*); +void fn_1_5B48(unkStruct8*); +void fn_1_5C10(unkStruct8*); +void fn_1_5C24(unkStruct8*); +void fn_1_5CEC(unkStruct8*); +void fn_1_5D00(unkStruct8*); +void fn_1_5E54(unkStruct8*, s32); +void fn_1_6074(unkStruct8*); +void fn_1_6264(unkStruct8*, Vec*, s32); +void fn_1_62F0(unkStruct8*, Vec*, s32); +void fn_1_637C(unkStruct8*, s32); +void fn_1_64BC(unkStruct8*, s32, s32); +void fn_1_6578(unkStruct8*); +void fn_1_6620(unkStruct8*); // camera.c -extern s32 fn_1_6778(void); -extern void fn_1_68D8(void); -extern void fn_1_68DC(void); -extern void fn_1_6EA0(Vec*); -extern void fn_1_6EC4(Vec*); -extern void fn_1_6EE8(f32); -extern void fn_1_6EF8(Vec*, Vec*, f32*, s32); -extern s32 fn_1_708C(void); -extern void fn_1_709C(void); +s32 fn_1_6778(void); +void fn_1_68D8(void); +void fn_1_68DC(void); +void fn_1_6EA0(Vec*); +void fn_1_6EC4(Vec*); +void fn_1_6EE8(f32); +void fn_1_6EF8(Vec*, Vec*, f32*, s32); +s32 fn_1_708C(void); +void fn_1_709C(void); // cursor.c -extern s32 fn_1_72E0(void); -extern void fn_1_72F8(void); -extern void fn_1_7350(void); -extern unkStruct7* m446CursorCreate(s32); -extern void fn_1_76E8(unkStruct7*); -extern void fn_1_77C8(unkStruct7*, u8); -extern void fn_1_7884(unkStruct7*); -extern void fn_1_7908(unkStruct7*, Vec*, s32); -extern void fn_1_799C(unkStruct7*); -extern void fn_1_7A38(unkStruct7*); -extern void fn_1_7AB4(unkStruct7*); +s32 fn_1_72E0(void); +void fn_1_72F8(void); +void fn_1_7350(void); +unkStruct7* m446CursorCreate(s32); +void fn_1_76E8(unkStruct7*); +void fn_1_77C8(unkStruct7*, u8); +void fn_1_7884(unkStruct7*); +void fn_1_7908(unkStruct7*, Vec*, s32); +void fn_1_799C(unkStruct7*); +void fn_1_7A38(unkStruct7*); +void fn_1_7AB4(unkStruct7*); // stage.c -extern s32 fn_1_7BF0(void); -extern void fn_1_7C08(void); -extern void fn_1_7C60(void); -extern unkStruct9* m446StageCreate(void); -extern void fn_1_83F0(unkStruct9*); -extern void fn_1_84AC(unkStruct9*); -extern void fn_1_852C(unkStruct9*); -extern void fn_1_860C(unkStruct9*); +s32 fn_1_7BF0(void); +void fn_1_7C08(void); +void fn_1_7C60(void); +unkStruct9* m446StageCreate(void); +void fn_1_83F0(unkStruct9*); +void fn_1_84AC(unkStruct9*); +void fn_1_852C(unkStruct9*); +void fn_1_860C(unkStruct9*); diff --git a/src/REL/m412Dll/main.c b/src/REL/m412Dll/main.c new file mode 100644 index 00000000..c7481aee --- /dev/null +++ b/src/REL/m412Dll/main.c @@ -0,0 +1,1305 @@ +#include "REL/m412Dll.h" + +#include "math.h" +#include "ext_math.h" +#include "rel_sqrt_consts.h" +#include "game/audio.h" +#include "game/chrman.h" +#include "game/frand.h" +#include "game/hsfmotion.h" +#include "game/mapspace.h" +#include "game/objsub.h" +#include "game/pad.h" +#include "game/sprite.h" +#include "game/wipe.h" + +// bss +s16 lbl_1_bss_7A0; +s16 lbl_1_bss_79E; +s16 lbl_1_bss_79C; +s16 lbl_1_bss_798[2]; +s32 lbl_1_bss_794; +s32 lbl_1_bss_790; +f32 lbl_1_bss_77C; +f32 lbl_1_bss_778; +f32 lbl_1_bss_774; +unkStruct3 lbl_1_bss_4D4[4]; +unkStruct2 lbl_1_bss_33C[6]; +unkStruct2 lbl_1_bss_2F8; +unkStruct* lbl_1_bss_278[0x20]; +Process* lbl_1_bss_274; +Vec lbl_1_bss_268; +Vec lbl_1_bss_25C; +Vec lbl_1_bss_250; +Vec lbl_1_bss_13C[0x17]; +Vec lbl_1_bss_28[0x17]; +s32 lbl_1_bss_24; +Vec lbl_1_bss_18; +Vec lbl_1_bss_C; +Vec lbl_1_bss_0; + +// data +s32 lbl_1_data_0[8] = { + 0, 1, 2, 3, 4, 5, 6, 7 +}; +s32 lbl_1_data_20[8] = { + 0x5E0001, 0x190001, 0x6C0001, 0x890001, + 0x840001, 0x100001, 0x0C0001, 0x800001 +}; +s32 lbl_1_data_40[8] = { + 0x5F0000, 0x1A0000, 0x6D0000, 0x8A0000, + 0x850000, 0x110000, 0x0D0000, 0x810000 +}; +s32 lbl_1_data_60[6] = { + 0x5F0000, 0x5F0002, 0x5F0003, + 0x5F001A, 0x5F001B, 0x5F004B +}; +Vec lbl_1_data_78[7] = { + { 474.0f, 30.0f, -497.0f }, + { 330.0f, 30.0f, 562.0f }, + { -694.0f, 30.0f, 43.0f }, + { -375.0f, 30.0f, -483.0f }, + { 715.0f, 30.0f, 62.0f }, + { -334.0f, 30.0f, 570.0f }, + { 100.0f, 30.0f, -630.0f } +}; +char* lbl_1_data_298[0x17] = { + "sb_hahen-sb_hahen01", + "sb_hahen-sb_hahen02", + "sb_hahen-sb_hahen03", + "sb_hahen-sb_hahen04", + "sb_hahen-sb_hahen05", + "sb_hahen-sb_hahen06", + "sb_hahen-sb_hahen07", + "sb_hahen-sb_hahen08", + "sb_hahen-sb_hahen09", + "sb_hahen-sb_hahen10", + "sb_hahen-sb_hahen11", + "sb_hahen-sb_hahen12", + "sb_hahen-sb_hahen13", + "sb_hahen-sb_hahen14", + "sb_hahen-sb_hahen15", + "sb_hahen-sb_hahen16", + "sb_hahen-sb_hahen17", + "sb_hahen-sb_hahen18", + "sb_hahen-sb_hahen19", + "sb_hahen-sb_hahen20", + "sb_hahen-sb_hahen21", + "sb_hahen-sb_hahen22", + "sb_hahen-sb_hahen23" +}; + +void ObjectSetup(void) { + f32 temp_f30; + f32 temp_f29; + f32 temp_f31; + + lbl_1_bss_274 = omInitObjMan(0x32, 0x2000); + omGameSysInit(lbl_1_bss_274); + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 40.0f, 20.0f, 25000.0f, 1.2f); + Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); + Hu3DCameraScissorSet(1, 0U, 0U, 0x280U, 0x1E0U); + lbl_1_bss_268.x = 1100.0f; + lbl_1_bss_268.y = 1600.0f; + lbl_1_bss_268.z = 760.0f; + lbl_1_bss_250.x = 0.0f; + lbl_1_bss_250.y = 1.0f; + lbl_1_bss_250.z = 0.0f; + lbl_1_bss_25C.x = 60.0f; + lbl_1_bss_25C.y = 0.0f; + lbl_1_bss_25C.z = 0.0f; + temp_f30 = lbl_1_bss_268.x; + temp_f29 = lbl_1_bss_268.y; + temp_f31 = lbl_1_bss_268.z; + lbl_1_bss_774 = sqrtf((temp_f31 * temp_f31) + ((temp_f30 * temp_f30) + (temp_f29 * temp_f29))); + lbl_1_bss_778 = fn_1_1D08((180.0 * (atan2(temp_f30, temp_f31) / M_PI))); + lbl_1_bss_77C = fn_1_1D08((180.0 * (atan2(temp_f29, temp_f31) / M_PI))); + lbl_1_bss_77C = 50.0f; + Hu3DLighInit(); + lbl_1_bss_7A0 = Hu3DGLightCreate(10000.0f, 0.0f, 10000.0f, -1.0f, 0.0f, -1.0f, 0xFFU, 0xFFU, 0xFFU); + Hu3DGLightPosAimSet(lbl_1_bss_7A0, 0.0f, 4330.13f, 2500.0f, 0.0f, 0.0f, 0.0f); + Hu3DGLightInfinitytSet(lbl_1_bss_7A0); + lbl_1_bss_18.x = -500.0f; + lbl_1_bss_18.y = 4000.0f; + lbl_1_bss_18.z = 0.0f; + lbl_1_bss_C.x = lbl_1_bss_C.z = 0.0f; + lbl_1_bss_C.y = 1.0f; + lbl_1_bss_0.x = 0.0f; + lbl_1_bss_0.y = 0.0f; + lbl_1_bss_0.z = 0.0f; + Hu3DShadowCreate(30.0f, 20.0f, 10000.0f); + Hu3DShadowTPLvlSet(0.5f); + Hu3DShadowPosSet(&lbl_1_bss_18, &lbl_1_bss_C, &lbl_1_bss_0); + Hu3DBGColorSet(0U, 0U, 0U); + fn_1_8BC(); + HuPrcChildCreate(fn_1_B1C0, 0x1000U, 0x2000U, 0, HuPrcCurrentGet()); + WipeCreate(1, 0, 0x3C); +} + +void fn_1_6EC(f32 arg8, f32 arg9, f32 argA, s32 arg0) { + Vec sp8; + + sp8.x = arg8; + sp8.y = arg9; + sp8.z = argA; + HuAudFXEmiterPlay(arg0, &sp8); +} + +void fn_1_73C(void) { + Vec sp8; + CameraData* camera; + + camera = &Hu3DCamera[0]; + + sp8.x = 0.0f; + sp8.y = 0.0f; + sp8.z = -1.0f; + + while (1) { + HuAudFXListnerUpdate(&camera->pos, &sp8); + if (lbl_1_bss_794 >= 3) break; + HuPrcVSleep(); + } + HuPrcKill(HuPrcCurrentGet()); + while (1) { + HuPrcVSleep(); + } +} + +void fn_1_7BC(void) { + Vec sp14; + Vec sp8; + s32 temp_r30; + s32 var_r31; + + temp_r30 = (s32)HuPrcCurrentGet()->user_data; + sp14.x = 1465.0f; + sp14.y = 770.0f; + sp14.z = -2400.0f; + sp8.x = sp14.x - 474.0f; + sp8.y = sp14.y - 30.0f; + sp8.z = sp14.z - -497.0f; + + for (var_r31 = 0; var_r31 < 0x168; var_r31++) { + HuAudFXEmiterUpDate(temp_r30, &sp14); + PSVECAdd(&sp8, &sp14, &sp14); + HuPrcVSleep(); + } + HuPrcKill(HuPrcCurrentGet()); + while (1) { + HuPrcVSleep(); + } +} + +void fn_1_894(omObjData* object) { + return; +} + +void fn_1_898(omObjData* object) { + object->model[0] = lbl_1_bss_79C; + object->func = &fn_1_894; +} + +void fn_1_8BC(void) { + Vec sp20; + Vec sp14; + s32 sp10; + volatile u32 spC; + volatile u32 sp8; + unkStruct2* temp_r31; + unkStruct3* temp_r30; + s16 var_r29; + void* var_r27; + s32 var_r28; + s32 var_r26; + unkStruct2* temp_r25; + HsfTransform* temp_r24; + Process* var_r23; + s32 temp_r22; + AnimData* var_r21; + s16 var_r20; + s16 var_r19; + s32 var_r18; + HsfObject* var_r17; + + nMap = 0; + HuAudSndGrpSet(0x25); + sp20.x = 1100.0f; + sp20.y = 1600.0f; + sp20.z = 760.0f; + sp14.x = 0.0f; + sp14.y = 0.0f; + sp14.z = -1.0f; + HuAudFXListnerSetEX(&sp20, &sp14, 10000.0f, 0.5666667f, 0.0f, 300.0f, 300.0f); + var_r27 = HuDataSelHeapReadNum(0x2B0000, 0x10000000, HEAP_DATA); + var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelLayerSet(var_r29, 1); + Hu3DModelShadowMapSet(var_r29); + Hu3DModelAttrSet(var_r29, 0x40000001); + var_r27 = HuDataSelHeapReadNum(0x2B0001, 0x10000000, HEAP_DATA); + lbl_1_bss_79C = Hu3DModelCreate(var_r27); + Hu3DModelAttrSet(lbl_1_bss_79C, 1); + MapObject[nMap++] = omAddObjEx(lbl_1_bss_274, 0x100, 1, 0, -1, fn_1_898); + var_r27 = HuDataSelHeapReadNum(0x2B0002, 0x10000000, HEAP_DATA); + var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelLayerSet(var_r29, 0); + Hu3DModelAttrSet(var_r29, 0x40000001); + + for (var_r28 = 0; var_r28 < 0x20; var_r28++) { + lbl_1_bss_278[var_r28] = NULL; + } + var_r27 = HuDataSelHeapReadNum(0x2B001F, 0x10000000, HEAP_DATA); + lbl_1_bss_79E = var_r29 = Hu3DModelCameraCreate(Hu3DMotionCreate(var_r27), 1); + Hu3DCameraMotionStart(var_r29, 1); + + for (var_r28 = 0; var_r28 < 2; var_r28++) { + var_r27 = HuDataSelHeapReadNum(0x2B001D, 0x10000000, HEAP_DATA); + lbl_1_bss_798[var_r28] = var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelLayerSet(var_r29, 2); + Hu3DModelAttrSet(var_r29, 0x40000002); + Hu3DModelAttrSet(var_r29, 1); + } + + for (var_r28 = 0; var_r28 < 6; var_r28++) { + temp_r31 = &lbl_1_bss_33C[var_r28]; + temp_r31->unk24 = var_r28; + temp_r31->unk28 = var_r28; + temp_r31->unk20 = 0; + if (var_r28 == 0) { + var_r27 = HuDataSelHeapReadNum(0x2B0006, 0x10000000, HEAP_DATA); + var_r20 = var_r29 = Hu3DModelCreate(var_r27); + } else { + var_r29 = Hu3DModelLink(var_r20); + } + temp_r31->unk0 = var_r29; + temp_r31->unk2C.x = lbl_1_data_78[var_r28].x; + temp_r31->unk2C.y = lbl_1_data_78[var_r28].y; + temp_r31->unk2C.z = lbl_1_data_78[var_r28].z; + Hu3DModelPosSet(var_r29, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); + temp_r31->unk38.x = temp_r31->unk38.z = 0.0f; + temp_r31->unk38.y = fn_1_1D08(180.0 + atan2d(temp_r31->unk2C.x, temp_r31->unk2C.z)); + Hu3DModelRotSet(var_r29, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + Hu3DModelLayerSet(var_r29, 1); + Hu3DModelShadowSet(var_r29); + + for (var_r26 = 0; var_r26 < 3; var_r26++) { + var_r27 = HuDataSelHeapReadNum(var_r26 + 0x2B0007, 0x10000000, HEAP_DATA); + temp_r31->unkC[var_r26] = Hu3DJointMotion(var_r29, var_r27); + } + var_r27 = HuDataSelHeapReadNum(var_r28 + 0x2B000A, 0x10000000, HEAP_DATA); + temp_r31->unkC[var_r26] = Hu3DJointMotion(var_r29, var_r27); + Hu3DMotionSet(var_r29, temp_r31->unkC[3]); + temp_r31->unk2 = var_r29 = Hu3DModelLink(var_r20); + Hu3DModelPosSet(var_r29, temp_r31->unk2C.x, temp_r31->unk2C.y - 10.0f, temp_r31->unk2C.z); + Hu3DModelRotSet(var_r29, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + Hu3DModelScaleSet(var_r29, 1.0f, -1.0f, 1.0f); + Hu3DModelLayerSet(var_r29, 0); + Hu3DModelShadowReset(var_r29); + Hu3DMotionSet(var_r29, temp_r31->unkC[3]); + Hu3DModelAttrSet(var_r29, 0x800000); + var_r27 = HuDataSelHeapReadNum(var_r28 + 0x2B0010, 0x10000000, HEAP_DATA); + temp_r31->unk4 = var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelLayerSet(var_r29, 1); + if (var_r28 >= 3) { + Hu3DModelAttrSet(temp_r31->unk0, 0x40000002); + Hu3DModelAttrSet(temp_r31->unk2, 0x40000002); + Hu3DModelAttrSet(temp_r31->unk4, 0x40000002); + } + if (var_r28 == 0) { + var_r27 = HuDataSelHeapReadNum(0x2B0003, 0x10000000, HEAP_DATA); + var_r19 = var_r29 = Hu3DModelCreate(var_r27); + } else { + var_r29 = Hu3DModelLink(var_r19); + } + temp_r31->unk6 = var_r29; + Hu3DModelLayerSet(var_r29, 1); + Hu3DModelAttrSet(var_r29, 1); + Hu3DModelShadowSet(var_r29); + Hu3DModelShadowDispOff(var_r29); + temp_r31->unk8 = Hu3DModelLink(var_r19); + Hu3DModelLayerSet(var_r29, 0); + Hu3DModelAttrSet(temp_r31->unk8, 1); + var_r23 = HuPrcChildCreate(fn_1_2A1C, 0x2000, 0x3000, 0, HuPrcCurrentGet()); + var_r23->user_data = temp_r31; + } + + for (var_r28 = 0, var_r18 = 0; var_r28 < 50; var_r28++) { + temp_r31 = &lbl_1_bss_33C[frandmod(3) + var_r18]; + temp_r25 = &lbl_1_bss_33C[frandmod(3) + var_r18]; + temp_r22 = temp_r31->unk28; + temp_r31->unk28 = temp_r25->unk28; + temp_r25->unk28 = temp_r22; + } + temp_r31 = &lbl_1_bss_33C[3]; + temp_r25 = &lbl_1_bss_33C[5]; + temp_r22 = temp_r31->unk28; + temp_r31->unk28 = temp_r25->unk28; + temp_r25->unk28 = temp_r22; + if (frandmod(2) != 0) { + temp_r31 = &lbl_1_bss_33C[4]; + temp_r25 = &lbl_1_bss_33C[5]; + temp_r22 = temp_r31->unk28; + temp_r31->unk28 = temp_r25->unk28; + temp_r25->unk28 = temp_r22; + } + temp_r31 = &lbl_1_bss_2F8; + var_r27 = HuDataSelHeapReadNum(0x2B0016, 0x10000000, HEAP_DATA); + var_r20 = var_r29 = Hu3DModelCreate(var_r27); + temp_r31->unk0 = var_r29; + temp_r31->unk2C.x = lbl_1_data_78[6].x; + temp_r31->unk2C.y = lbl_1_data_78[6].y; + temp_r31->unk2C.z = lbl_1_data_78[6].z; + Hu3DModelPosSet(var_r29, temp_r31->unk2C.x, temp_r31->unk2C.y, temp_r31->unk2C.z); + temp_r31->unk38.x = temp_r31->unk38.z = 0.0f; + temp_r31->unk38.y = fn_1_1D08(180.0 + atan2d(temp_r31->unk2C.x, temp_r31->unk2C.z)); + Hu3DModelRotSet(var_r29, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + Hu3DModelLayerSet(var_r29, 1); + Hu3DModelShadowSet(var_r29); + + for (var_r26 = 0; var_r26 < 5; var_r26++) { + var_r27 = HuDataSelHeapReadNum(var_r26 + 0x2B0017, 0x10000000, HEAP_DATA); + temp_r31->unkC[var_r26] = Hu3DJointMotion(var_r29, var_r27); + } + var_r27 = HuDataSelHeapReadNum(0x2B0016, 0x10000000, HEAP_DATA); + temp_r31->unk2 = var_r29 = Hu3DModelCreate(var_r27); + + for (var_r26 = 0; var_r26 < 5; var_r26++) { + var_r27 = HuDataSelHeapReadNum(var_r26 + 0x2B0017, 0x10000000, HEAP_DATA); + temp_r31->unk16[var_r26] = Hu3DJointMotion(var_r29, var_r27); + } + Hu3DModelPosSet(var_r29, temp_r31->unk2C.x, temp_r31->unk2C.y - 10.0f, temp_r31->unk2C.z); + Hu3DModelRotSet(var_r29, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + Hu3DModelScaleSet(var_r29, 1.0f, -1.0f, 1.0f); + Hu3DModelLayerSet(var_r29, 0); + Hu3DModelShadowReset(var_r29); + Hu3DModelAttrSet(var_r29, 0x800000); + var_r27 = HuDataSelHeapReadNum(0x2B0004, 0x10000000, HEAP_DATA); + temp_r31->unk6 = var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelLayerSet(var_r29, 1); + Hu3DModelAttrSet(var_r29, 1); + Hu3DModelShadowSet(var_r29); + Hu3DModelShadowDispOff(var_r29); + temp_r31->unk8 = Hu3DModelLink(temp_r31->unk6); + Hu3DModelLayerSet(temp_r31->unk8, 0); + Hu3DModelAttrSet(temp_r31->unk8, 1); + var_r27 = HuDataSelHeapReadNum(0x2B0005, 0x10000000, HEAP_DATA); + temp_r31->unkA = var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelShadowSet(var_r29); + Hu3DModelShadowDispOff(var_r29); + Hu3DModelLayerSet(var_r29, 1); + Hu3DModelAttrSet(var_r29, 1); + + for (var_r28 = 0; var_r28 < 0x17; var_r28++) { + var_r17 = Hu3DModelObjPtrGet(var_r29, lbl_1_data_298[var_r28]); + if (!var_r17) { + OSReport("objname %s\n", lbl_1_data_298[var_r28]); + OSPanic("m412.c", 0x258, "ObjPtr"); + } + temp_r24 = &var_r17->data.base; + lbl_1_bss_13C[var_r28].x = temp_r24->pos.x; + lbl_1_bss_13C[var_r28].y = temp_r24->pos.y; + lbl_1_bss_13C[var_r28].z = temp_r24->pos.z; + lbl_1_bss_28[var_r28].x = temp_r24->scale.x; + lbl_1_bss_28[var_r28].y = temp_r24->scale.y; + lbl_1_bss_28[var_r28].z = temp_r24->scale.z; + } + var_r23 = HuPrcChildCreate(fn_1_3950, 0x2000, 0x3000, 0, HuPrcCurrentGet()); + var_r23->user_data = temp_r31; + + for (var_r28 = 0; var_r28 < 4; var_r28++) { + lbl_1_bss_4D4[var_r28].unk3C = var_r28; + } + + for (var_r28 = 0; var_r28 < 50; var_r28++) { + spC = frandmod(4); + sp8 = frandmod(4); + sp10 = lbl_1_bss_4D4[sp8].unk3C; + lbl_1_bss_4D4[sp8].unk3C = lbl_1_bss_4D4[spC].unk3C; + lbl_1_bss_4D4[spC].unk3C = sp10; + } + + for (var_r28 = 0; var_r28 < 4; var_r28++) { + temp_r30 = &lbl_1_bss_4D4[var_r28]; + temp_r30->unk24 = var_r28; + temp_r30->unk28 = var_r28; + temp_r30->unk2C = GWPlayerCfg[var_r28].pad_idx; + temp_r30->unk0 = CharModelCreate(lbl_1_data_0[GWPlayerCfg[var_r28].character], 4); + Hu3DModelLayerSet(temp_r30->unk0, 1); + var_r27 = HuDataSelHeapReadNum(lbl_1_data_20[GWPlayerCfg[var_r28].character], 0x10000000, HEAP_DATA); + temp_r30->unk2 = Hu3DModelCreate(var_r27); + Hu3DModelScaleSet(temp_r30->unk2, 1.0f, -1.0f, 1.0f); + Hu3DModelAttrSet(temp_r30->unk2, 0x800000); + Hu3DModelLayerSet(temp_r30->unk2, 0); + CharModelLayerSetAll(3); + temp_r30->unk54.x = temp_r30->unk54.z = temp_r30->unk54.y = 0.0f; + temp_r30->unk54.y = fn_1_1D08(45.0f + (90.0f * temp_r30->unk3C) + lbl_1_bss_778); + temp_r30->unk40.x = (400.0 * sind(temp_r30->unk54.y)); + temp_r30->unk40.z = (400.0 * cosd(temp_r30->unk54.y)); + temp_r30->unk54.y = fn_1_1D08(180.0f + temp_r30->unk54.y); + temp_r30->unk6C = temp_r30->unk54.y; + temp_r30->unk40.y = 0.0f; + temp_r30->unk60.x = 50.0f; + temp_r30->unk60.z = temp_r30->unk60.y = 0.0f; + HuSetVecF(&temp_r30->unk7C, 0.0, 0.0, 0.0); + Hu3DModelPosSet(temp_r30->unk0, temp_r30->unk40.x, temp_r30->unk40.y, temp_r30->unk40.z); + Hu3DModelRotSet(temp_r30->unk0, temp_r30->unk54.x, temp_r30->unk54.y, temp_r30->unk54.z); + Hu3DModelPosSet(temp_r30->unk2, temp_r30->unk40.x, temp_r30->unk40.y, temp_r30->unk40.z); + Hu3DModelRotSet(temp_r30->unk2, temp_r30->unk54.x, temp_r30->unk54.y, temp_r30->unk54.z); + Hu3DModelShadowSet(temp_r30->unk0); + + for (var_r26 = 0; var_r26 < 6; var_r26++) { + temp_r30->unkC[var_r26] = CharModelMotionCreate(lbl_1_data_0[GWPlayerCfg[var_r28].character], lbl_1_data_60[var_r26]); + var_r27 = HuDataSelHeapReadNum((u16)lbl_1_data_60[var_r26] | lbl_1_data_40[GWPlayerCfg[var_r28].character], 0x10000000, HEAP_DATA); + temp_r30->unk18[var_r26] = Hu3DJointMotion(temp_r30->unk2, var_r27); + } + CharModelMotionSet(lbl_1_data_0[GWPlayerCfg[var_r28].character], temp_r30->unkC[0]); + Hu3DModelAttrSet(temp_r30->unk0, 0x40000001); + Hu3DMotionSet(temp_r30->unk2, temp_r30->unk18[0]); + Hu3DModelAttrSet(temp_r30->unk2, 0x40000001); + CharModelMotionDataClose(lbl_1_data_0[GWPlayerCfg[var_r28].character]); + var_r27 = HuDataSelHeapReadNum(0x2B001C, 0x10000000, HEAP_DATA); + temp_r30->unk6 = var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelLayerSet(var_r29, 1); + Hu3DModelAttrSet(var_r29, 0x40000001); + Hu3DModelAttrSet(var_r29, 1); + Hu3DModelShadowSet(var_r29); + Hu3DModelShadowDispOff(var_r29); + temp_r30->unk8 = var_r29 = Hu3DModelLink(var_r29); + Hu3DModelLayerSet(var_r29, 0); + Hu3DModelAttrSet(var_r29, 0x40000001); + Hu3DModelAttrSet(var_r29, 0x800001); + var_r27 = HuDataSelHeapReadNum(0x2B001D, 0x10000000, HEAP_DATA); + temp_r30->unkA = var_r29 = Hu3DModelCreate(var_r27); + Hu3DModelLayerSet(var_r29, 3); + Hu3DModelAttrSet(var_r29, 0x40000002); + Hu3DModelAttrSet(var_r29, 1); + var_r23 = HuPrcChildCreate(fn_1_7C60, 0x2000, 0x4000, 0, HuPrcCurrentGet()); + var_r23->user_data = temp_r30; + } + var_r21 = HuSprAnimRead(HuDataReadNum(0x2B001E, 0x10000000)); + var_r29 = Hu3DParticleCreate(var_r21, 0x100); + Hu3DModelPosSet(var_r29, 0.0f, 0.0f, 0.0f); + Hu3DModelScaleSet(var_r29, 1.0f, 1.0f, 1.0f); + Hu3DModelLayerSet(var_r29, 4); + Hu3DParticleColSet(var_r29, 0xFF, 0xFF, 0xFF); + Hu3DParticleScaleSet(var_r29, 0.0f); + Hu3DParticleHookSet(var_r29, fn_1_A01C); + var_r21 = HuSprAnimRead(HuDataReadNum(0x120003, 0x10000000)); + var_r29 = Hu3DParticleCreate(var_r21, 0x40); + Hu3DModelPosSet(var_r29, 0.0f, 0.0f, 0.0f); + Hu3DModelScaleSet(var_r29, 1.0f, 1.0f, 1.0f); + Hu3DModelLayerSet(var_r29, 4); + Hu3DParticleColSet(var_r29, 0xFF, 0xFF, 0xFF); + Hu3DParticleScaleSet(var_r29, 0.0f); + Hu3DParticleHookSet(var_r29, fn_1_A618); + var_r21 = HuSprAnimRead(HuDataReadNum(0x120003, 0x10000000)); + var_r29 = Hu3DParticleCreate(var_r21, 3); + Hu3DModelPosSet(var_r29, 0.0f, 0.0f, 0.0f); + Hu3DModelScaleSet(var_r29, 1.0f, 1.0f, 1.0f); + Hu3DModelLayerSet(var_r29, 4); + Hu3DParticleColSet(var_r29, 0xFF, 0xFF, 0xFF); + Hu3DParticleScaleSet(var_r29, 0.0f); + Hu3DParticleHookSet(var_r29, fn_1_AA88); + HuDataDirClose(0x120000); + HuPrcChildCreate(fn_1_B160, 0x1000, 0x1000, 0, HuPrcCurrentGet()); +} + +f32 fn_1_1D08(f32 arg0) { + while (arg0 >= 360.0f || arg0 < 0.0f) { + if (arg0 >= 360.0f) { + arg0 -= 360.0f; + } + if (arg0 < 0.0f) { + arg0 += 360.0f; + } + } + return arg0; +} + +void fn_1_1D88(void) { + void* var_r31; + + var_r31 = HuPrcCurrentGet()->user_data; + HuMemDirectFree(var_r31); +} + +void fn_1_1DBC(void) { + Vec sp8; + HsfObject* var_r27; + HsfTransform* temp_r31; + unkStruct4* temp_r30; + Vec* temp_r29; + s32 var_r28; + f32 var_f31; + f32 var_f30; + + temp_r30 = HuPrcCurrentGet()->user_data; + HuPrcDestructorSet(fn_1_1D88); + var_r27 = Hu3DModelObjPtrGet(temp_r30->unk0, lbl_1_data_298[temp_r30->unk4]); + if (!var_r27) { + OSReport("objname %s\n", lbl_1_data_298[temp_r30->unk4]); + OSPanic("m412.c", 0x32E, "ObjPtr"); + } + temp_r31 = &var_r27->data.base; + temp_r29 = &lbl_1_bss_13C[temp_r30->unk4]; + temp_r31->pos.x = temp_r29->x; + temp_r31->pos.y = temp_r29->y; + temp_r31->pos.z = temp_r29->z; + HuSetVecF(&sp8, 0.15f * temp_r31->pos.x, 0.15f * temp_r31->pos.y, 0.15f * temp_r31->pos.z); + temp_r29 = &lbl_1_bss_28[temp_r30->unk4]; + temp_r31->scale.x = temp_r29->x; + temp_r31->scale.y = temp_r29->y; + temp_r31->scale.z = temp_r29->z; + for (var_r28 = 0, var_f31 = -2.0f, var_f30 = 1.0f; var_r28 < 0x1E; var_r28++) { + sp8.y -= var_f31; + var_f31 += 0.5f; + temp_r31->pos.x += sp8.x; + temp_r31->pos.y += sp8.y; + temp_r31->pos.z += sp8.z; + temp_r31->scale.x *= 0.95f; + temp_r31->scale.y *= 0.95f; + temp_r31->scale.z *= 0.95f; + if (temp_r30->unk4 == 0) { + var_f30 -= 0.033333335f; + Hu3DModelTPLvlSet(temp_r30->unk0, var_f30); + } + HuPrcVSleep(); + } + temp_r30->unk8 = 0; + HuPrcVSleep(); + HuPrcKill(HuPrcCurrentGet()); + while (1) { + HuPrcVSleep(); + } +} + +void fn_1_2014(void) { + unkStruct2* temp_r31; // could also be unkStruct3 `\_("/)_/` + + temp_r31 = (unkStruct2*)HuPrcCurrentGet()->user_data; + lbl_1_bss_278[temp_r31->unk6] = NULL; + HuMemDirectFree(temp_r31); +} + +void fn_1_2064(void) { + Vec sp28; + Vec sp1C; + Vec sp10; + f32 spC; + f32 sp8; + Process* temp_r26; + s32 var_r30; + unkStruct* temp_r28; + unkStruct3* temp_r29; + unkStruct* temp_r31; + unkStruct4* var_r27; + + temp_r31 = (unkStruct*)HuPrcCurrentGet()->user_data; + temp_r31->unk8 = 0; + temp_r31->unkA = 0; + HuPrcDestructorSet(fn_1_2014); + + do { + if ((temp_r31->unk8 != 0) || (lbl_1_bss_794 >= 4)) break; + temp_r31->unk10.x += (temp_r31->unk24.y * sind(temp_r31->unk24.x)); + temp_r31->unk10.z += (temp_r31->unk24.y * cosd(temp_r31->unk24.x)); + temp_r31->unk10.y += temp_r31->unk24.z; + temp_r31->unk24.z -= 0.9f; + if (temp_r31->unk30 != 100.0f) { + HuSetVecF(&sp28, temp_r31->unk10.x, temp_r31->unk10.y, temp_r31->unk10.z); + for (var_r30 = 0; var_r30 < 0x20; var_r30++) { + temp_r28 = lbl_1_bss_278[var_r30]; + if ((var_r30 != temp_r31->unk6) && temp_r28 && (temp_r28->unk6 != -1)) { + HuSetVecF(&sp1C, temp_r28->unk10.x, temp_r28->unk10.y, temp_r28->unk10.z); + HuSubVecF(&sp10, &sp28, &sp1C); + if (sqrtf((sp10.z * sp10.z) + ((sp10.x * sp10.x) + (sp10.y * sp10.y))) < (temp_r31->unk30 + temp_r28->unk30)) { + if (temp_r28->unk30 != 100.0f) { + temp_r28->unk8 = 1; + } + temp_r31->unk8 = 1; + } + } + } + } + HuSetVecF(&sp28, temp_r31->unk10.x, 0.0, temp_r31->unk10.z); + + for (var_r30 = 0; var_r30 < 4; var_r30++) { + temp_r29 = &lbl_1_bss_4D4[var_r30]; + HuSetVecF(&sp1C, temp_r29->unk40.x, 0.0, temp_r29->unk40.z); + HuSubVecF(&sp10, &sp28, &sp1C); + if ((sqrtf((sp10.z * sp10.z) + ((sp10.x * sp10.x) + (sp10.y * sp10.y))) < (temp_r31->unk30 + temp_r29->unk60.x)) + && ((150.0f + temp_r29->unk40.y + temp_r31->unk30) > temp_r31->unk10.y)) { + + if (temp_r29->unk30 != 3) { + if (temp_r31->unkC == 0) { + omVibrate(temp_r29->unk24, 0xC, 4, 2); + } else { + omVibrate(temp_r29->unk24, 0xC, 0xC, 0); + } + } + HuAudFXPlay(0x585); + temp_r29->unk30 = 3; + temp_r31->unk8 = 1; + } + } + if (temp_r31->unk10.y < temp_r31->unk30) { + temp_r31->unk10.y = temp_r31->unk30; + temp_r31->unk8 = 1; + } + Hu3DModelPosSet(temp_r31->unk0, temp_r31->unk10.x, temp_r31->unk10.y, temp_r31->unk10.z); + Hu3DModelPosSet(temp_r31->unk2, temp_r31->unk10.x, -temp_r31->unk10.y, temp_r31->unk10.z); + if (temp_r31->unk8 != 0) break; + HuPrcVSleep(); + } while (1); + if (temp_r31->unkC == 1) { + HuAudFXPlay(0x58D); + } else { + HuAudFXPlay(0x58C); + } + Hu3DModelAttrSet(temp_r31->unk0, 1); + Hu3DModelAttrSet(temp_r31->unk2, 1); + Hu3DModelShadowDispOff(temp_r31->unk0); + temp_r31->unkA = 1; + if (temp_r31->unkC == 1) { + + for (var_r30 = 0; var_r30 < 4; var_r30++) { + if (lbl_1_bss_4D4[var_r30].unk30 != 3) { + omVibrate(lbl_1_bss_4D4[var_r30].unk24, 0xC, 6, 6); + } + } + Hu3DModelPosSet(temp_r31->unk4, temp_r31->unk10.x, temp_r31->unk10.y, temp_r31->unk10.z); + Hu3DModelAttrReset(temp_r31->unk4, 1); + Hu3DModelShadowDispOn(temp_r31->unk4); + + for (var_r30 = 0; var_r30 < 0x17; var_r30++) { + temp_r26 = HuPrcChildCreate(fn_1_1DBC, 0x2000, 0x1000, 0, HuPrcCurrentGet()); + var_r27 = HuMemDirectMalloc(HEAP_DATA, 0x18); + temp_r26->user_data = var_r27; + var_r27->unk0 = temp_r31->unk4; + var_r27->unk4 = var_r30; + var_r27->unk8 = 1; + var_r27->unkC.x = temp_r31->unk10.x; + var_r27->unkC.y = temp_r31->unk10.y; + var_r27->unkC.z = temp_r31->unk10.z; + } + while (var_r27->unk8 != 0) { + HuPrcVSleep(); + } + } + HuPrcVSleep(); + HuPrcKill(HuPrcCurrentGet()); + while (1) { + HuPrcVSleep(); + } +} + +s32 fn_1_2708(void) { + s32 var_r31; + + for (var_r31 = 0; var_r31 < 0x20; var_r31++) { + if (!lbl_1_bss_278[var_r31]) break; + } + if (var_r31 >= 0x20) { + var_r31 = -1; + } + lbl_1_bss_278[var_r31] = HuMemDirectMalloc(HEAP_DATA, 0x34); + lbl_1_bss_278[var_r31]->unk6 = -1; + lbl_1_bss_278[var_r31]->unkA = 0; + return var_r31; +} + +f32 fn_1_27C4(s32 arg0, f32 arg8, f32 arg9) { + f32 temp_f31; + f32 var_f25; + f32 var_f26; + f32 var_f27; + f32 var_f28; + f32 var_f29; + + temp_f31 = arg8 - fn_1_1D08(arg9); + if ((temp_f31 < 0.0f) || (ABS_INV(temp_f31) > 180.0f)) { + if (ABS_INV(temp_f31) > 180.0f) { + var_f29 = (360.0f - ABS_INV(temp_f31)) / arg0; + if (temp_f31 > 0.0f) { + var_f29 = -var_f29; + } + } else { + var_f29 = temp_f31 / arg0; + } + } else { + var_f29 = temp_f31 / arg0; + } + return var_f29; +} + +s32 lbl_1_data_310[6][2] = { + { 0x09249222, 0x22210842 }, + { 0x04924888, 0x88842108 }, + { 0x12492222, 0x22108420 }, + { 0x04444444, 0x44444400 }, + { 0x11111111, 0x11100000 }, + { 0x04444444, 0x40000000 } +}; + +s32 lbl_1_data_340[1][2] = { + { 0x00040008, 0x02000000 } +}; + +s32 lbl_1_data_348[6] = { + 0x0, 0x0, 0x0, 0x8, 0x12, 0x1C +}; + +void fn_1_2A1C(void) { + Vec sp68; + Vec sp5C; + Vec sp50; + Vec sp44; + f32 sp40; + f32 temp_f18; + f32 var_f24; + f32 var_f23; + f32 var_f19; + f32 var_f22; + s32 var_r22; + s32 var_r23; + s32 var_r25; + s32 var_r24; + s32 var_r26; + s32 var_r29; + unkStruct* temp_r30; + unkStruct3* temp_r27; + unkStruct2* temp_r31; + s32 var_r21; + Process* var_r20; + + temp_r31 = HuPrcCurrentGet()->user_data; + switch (temp_r31->unk24) { + case 0: + var_r25 = 0x142; + var_r24 = 0x154; + break; + case 1: + var_r25 = 0x14A; + var_r24 = 0x15E; + break; + case 2: + var_r25 = 0x148; + var_r24 = 0x162; + break; + default: + var_r25 = 0x4E; + var_r24 = 0x5D; + break; + } + +loop_10: + var_r29 = lbl_1_bss_790 / 60; + if (var_r29 >= 0x3C) { + var_r29 = 0x3C; + } + if (var_r29 == lbl_1_data_348[temp_r31->unk28]) { + Hu3DModelAttrReset(temp_r31->unk0, 0x40000002); + Hu3DModelAttrReset(temp_r31->unk2, 0x40000002); + Hu3DModelAttrReset(temp_r31->unk4, 0x40000002); + } + if (var_r25 == Hu3DMotionTimeGet(temp_r31->unk0)) { + temp_r31->unk20 = 1; + } + if (var_r24 == Hu3DMotionTimeGet(temp_r31->unk0)) { + HuAudFXPlay(0x581); + } + if (lbl_1_bss_794 >= 4) { + while (1) { + HuPrcVSleep(); + } + } + var_r22 = 1; + if (var_r29 >= 0x20) { + var_r22 = 0; + } + if (((1 << (var_r29 % 32)) & lbl_1_data_310[temp_r31->unk28][var_r22]) != 0) { + var_r21 = fn_1_2708(); + } else { + HuPrcVSleep(); + goto loop_10; + } + var_r26 = frandmod(4); + if (lbl_1_bss_4D4[var_r26].unk30 == 3) { + for (var_r23 = 3; var_r23 != 0; var_r23--) { + var_r26++; + if (var_r26 >= 4) { + var_r26 = 0; + } + if (lbl_1_bss_4D4[var_r26].unk30 != 3) break; + } + } + temp_r27 = &lbl_1_bss_4D4[var_r26]; + Hu3DMotionSet(temp_r31->unk0, temp_r31->unkC[1]); + Hu3DMotionSet(temp_r31->unk2, temp_r31->unkC[1]); + Hu3DModelAttrReset(temp_r31->unk0, 0x40000001); + Hu3DModelAttrReset(temp_r31->unk2, 0x40000001); + var_r29 = Hu3DMotionMaxTimeGet(temp_r31->unk0); + var_f24 = fn_1_1D08(atan2d(temp_r27->unk40.x - temp_r31->unk2C.x, temp_r27->unk40.z - temp_r31->unk2C.z)); + temp_f18 = (temp_r27->unk40.x + (50.0 * sind(var_f24))); + sp44.y = (temp_r27->unk40.z + (50.0 * cosd(var_f24))); + sp44.x = 360.0f * frandf(); + var_f23 = 50.0f * frandf(); + temp_f18 += (var_f23 * sind(sp44.x)); + sp44.y += (var_f23 * cosd(sp44.x)); + sp44.z = fn_1_27C4(var_r29, var_f24, temp_r31->unk38.y); + HuAudFXPlay(0x583); + + for (;var_r29 != 0; var_r29--) { + temp_r31->unk38.y += sp44.z; + Hu3DModelRotSet(temp_r31->unk0, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + Hu3DModelRotSet(temp_r31->unk2, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + HuPrcVSleep(); + } + HuPrcSleep(0x1E); + Hu3DModelAttrReset(temp_r31->unk6, 1); + Hu3DModelAttrReset(temp_r31->unk8, 1); + Hu3DModelShadowDispOn(temp_r31->unk6); + Hu3DModelPosSet(temp_r31->unk6, 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(temp_r31->unk8, 0.0f, 0.0f, 0.0f); + Hu3DModelHookSet(temp_r31->unk0, "itemhook", temp_r31->unk6); + Hu3DModelHookSet(temp_r31->unk2, "itemhook", temp_r31->unk8); + Hu3DMotionShiftSet(temp_r31->unk0, temp_r31->unkC[2], 0.0f, 5.0f, 0); + Hu3DMotionShiftSet(temp_r31->unk2, temp_r31->unkC[2], 0.0f, 5.0f, 0); + HuPrcSleep(10); + while (Hu3DMotionTimeGet(temp_r31->unk0) < 18.0f) { + HuPrcVSleep(); + } + Hu3DModelHookReset(temp_r31->unk0); + Hu3DModelHookReset(temp_r31->unk2); + HuAudFXPlay(0x582); + temp_r30 = lbl_1_bss_278[var_r21]; + temp_r30->unk6 = var_r21; + temp_r30->unkA = 0; + var_r20 = HuPrcChildCreate(fn_1_2064, 0x1000, 0x3000, 0, HuPrcCurrentGet()); + var_r20->user_data = temp_r30; + temp_r30->unkC = 0; + temp_r30->unk0 = temp_r31->unk6; + temp_r30->unk2 = temp_r31->unk8; + temp_r30->unk30 = 25.0f; + temp_r30->unk10.x = -89.937f; + temp_r30->unk10.y = 125.861f; + temp_r30->unk10.z = 43.181f; + temp_r30->unk1C.x = temp_f18; + temp_r30->unk1C.y = sp44.y; + var_f24 = fn_1_1D08(atan2d(temp_r30->unk10.x, temp_r30->unk10.z)); + var_f24 += temp_r31->unk38.y; + var_f23 = sqrtf((temp_r30->unk10.x * temp_r30->unk10.x) + (temp_r30->unk10.z * temp_r30->unk10.z)); + temp_r30->unk10.x = (temp_r31->unk2C.x + (var_f23 * sind(var_f24))); + temp_r30->unk10.y = 125.861f + temp_r31->unk2C.y; + temp_r30->unk10.z = (temp_r31->unk2C.z + (var_f23 * cosd(var_f24))); + Hu3DModelPosSet(temp_r31->unk6, temp_r30->unk10.x, temp_r30->unk10.y, temp_r30->unk10.z); + Hu3DModelPosSet(temp_r31->unk8, temp_r30->unk10.x, -temp_r30->unk10.y, temp_r30->unk10.z); + HuSetVecF(&sp68, temp_r31->unk2C.x, 0.0, temp_r31->unk2C.z); + HuSetVecF(&sp5C, temp_f18, 0.0, sp44.y); + HuSubVecF(&sp50, &sp68, &sp5C); + var_f23 = sqrtf((sp50.x * sp50.x) + (sp50.z * sp50.z)); + sp40 = 1.0f; + while (1) { + for (var_r29 = 0, var_f19 = temp_r30->unk10.y, var_f22 = sp40; var_f22 > 0.0f; var_r29++) { + var_f19 += var_f22; + var_f22 -= 0.9f; + } + if (var_f19 >= (var_f23 / 2.0f)) break; + sp40++; + } + + for (;var_f19 > 0.0f; var_r29++) { + var_f19 += var_f22; + var_f22 -= 0.9f; + } + temp_r30->unk24.z = sp40; + temp_r30->unk24.x = fn_1_1D08(atan2d(temp_f18 - temp_r30->unk10.x, sp44.y - temp_r30->unk10.z)); + temp_r30->unk24.y = var_f23 / var_r29; + + while (Hu3DMotionEndCheck(temp_r31->unk0) == 0) { + HuPrcVSleep(); + } + goto loop_10; +} + +void fn_1_3950(void) { + Vec sp8C; + Vec sp80; + Vec sp74; + f32 sp70; + f32 sp6C; + f32 sp68; + f32 sp64; + f32 sp60; + f32 sp5C; + volatile f32 sp58; + f32 sp54; + f32 temp_f27; + f32 var_f29; + f32 temp_f31; + f32 temp_f30; + f32 var_f18; + f32 var_f19; + f32 var_f20; + f32 var_f21; + f32 var_f22; + f32 var_f23; + f32 var_f24; + s32 var_r28; + s32 var_r24; + s32 var_r25; + s32 var_r29; + s32 var_r26; + unkStruct* temp_r30; + unkStruct3* temp_r27; + unkStruct2* temp_r31; + s32 var_r23; + Process* var_r22; + + temp_r31 = HuPrcCurrentGet()->user_data; +loop_1: + var_r29 = lbl_1_bss_790 / 60; + if (var_r29 >= 0x3C) { + var_r29 = 0x3C; + } + if (lbl_1_bss_794 >= 4) { + while (1) { + HuPrcVSleep(); + } + } + var_r24 = 1; + if (var_r29 >= 0x20) { + var_r24 = 0; + } + if (((1 << (var_r29 % 32)) & lbl_1_data_340[temp_r31->unk28][var_r24]) != 0) { + var_r23 = fn_1_2708(); + } else { + HuPrcVSleep(); + goto loop_1; + } + Hu3DModelAttrReset(temp_r31->unk0, 0x40000002); + Hu3DModelClusterAttrReset(temp_r31->unk0, 0, -0x3FFFFFFE); + Hu3DModelAttrReset(temp_r31->unk2, 0x40000002); + Hu3DModelClusterAttrReset(temp_r31->unk2, 0, -0x3FFFFFFE); + Hu3DModelAttrReset(temp_r31->unk6, 1); + Hu3DModelAttrReset(temp_r31->unk8, 1); + Hu3DModelShadowDispOn(temp_r31->unk6); + var_f18 = 850.0f; + temp_f31 = -217.722f; + temp_f30 = 0.0f; + var_f29 = fn_1_1D08(atan2d(temp_f31, temp_f30)); + var_f29 += temp_r31->unk38.y; + var_f24 = sqrtf((temp_f31 * temp_f31) + (temp_f30 * temp_f30)); + temp_f31 = (temp_r31->unk2C.x + (var_f24 * sind(var_f29))); + temp_f30 = (temp_r31->unk2C.z + (var_f24 * cosd(var_f29))); + sp64 = 5.0f; + while (1) { + var_f18 -= sp64; + sp64 += 0.9f; + if (sp64 > 20.0f) { + sp64 = 20.0f; + } + if (var_f18 < (304.52f + temp_r31->unk2C.y)) { + var_f18 = 304.52f + temp_r31->unk2C.y; + } + Hu3DModelPosSet(temp_r31->unk6, temp_f31, var_f18, temp_f30); + Hu3DModelPosSet(temp_r31->unk8, temp_f31, -var_f18, temp_f30); + if (var_f18 == (304.52f + temp_r31->unk2C.y)) break; + HuPrcVSleep(); + } + Hu3DModelPosSet(temp_r31->unk6, 0.0f, 0.0f, 0.0f); + Hu3DModelPosSet(temp_r31->unk8, 0.0f, 0.0f, 0.0f); + Hu3DModelHookSet(temp_r31->unk0, "itemhook", temp_r31->unk6); + Hu3DModelHookSet(temp_r31->unk2, "itemhook", temp_r31->unk8); + Hu3DMotionShiftSet(temp_r31->unk0, temp_r31->unkC[2], 0.0f, 5.0f, 0); + Hu3DMotionShiftSet(temp_r31->unk2, temp_r31->unk16[2], 0.0f, 5.0f, 0); + HuPrcSleep(10); + + while (Hu3DMotionEndCheck(temp_r31->unk0) == 0) { + HuPrcVSleep(); + } + HuPrcSleep(0xA); + var_r26 = frandmod(4); + if (lbl_1_bss_4D4[var_r26].unk30 == 3) { + for (var_r25 = 3; var_r25 != 0; var_r25--) { + var_r26 += 1; + if (var_r26 >= 4) { + var_r26 = 0; + } + if (lbl_1_bss_4D4[var_r26].unk30 != 3) break; + } + } + temp_r27 = &lbl_1_bss_4D4[var_r26]; + Hu3DMotionSet(temp_r31->unk0, temp_r31->unkC[3]); + Hu3DModelAttrReset(temp_r31->unk0, 0x40000001); + Hu3DMotionSet(temp_r31->unk2, temp_r31->unk16[3]); + Hu3DModelAttrReset(temp_r31->unk2, 0x40000001); + var_r29 = Hu3DMotionMaxTimeGet(temp_r31->unk0); + var_f29 = fn_1_1D08(atan2d(temp_r27->unk40.x - temp_r31->unk2C.x, temp_r27->unk40.z - temp_r31->unk2C.z)); + sp6C = (temp_r27->unk40.x + (50.0 * sind(var_f29))); + sp68 = (temp_r27->unk40.z + (50.0 * cosd(var_f29))); + sp60 = 360.0f * frandf(); + var_f24 = 50.0f * frandf(); + sp6C += (var_f24 * sind(sp60)); + sp68 += (var_f24 * cosd(sp60)); + sp70 = fn_1_27C4(var_r29, var_f29, temp_r31->unk38.y); + HuAudFXPlay(0x587); + + for (;var_r29 != 0; var_r29--) { + temp_r31->unk38.y += sp70; + Hu3DModelRotSet(temp_r31->unk0, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + Hu3DModelRotSet(temp_r31->unk2, temp_r31->unk38.x, temp_r31->unk38.y, temp_r31->unk38.z); + HuPrcVSleep(); + } + HuPrcSleep(30); + Hu3DMotionShiftSet(temp_r31->unk0, temp_r31->unkC[4], 0.0f, 5.0f, 0); + Hu3DMotionShiftSet(temp_r31->unk2, temp_r31->unk16[4], 0.0f, 5.0f, 0); + HuPrcSleep(10); + + while (Hu3DMotionTimeGet(temp_r31->unk0) < 24.0f) { + HuPrcVSleep(); + } + Hu3DModelHookReset(temp_r31->unk0); + Hu3DModelHookReset(temp_r31->unk2); + HuAudFXPlay(0x586); + temp_r30 = lbl_1_bss_278[var_r23]; + temp_r30->unk6 = var_r23; + temp_r30->unkA = 0; + var_r22 = HuPrcChildCreate(fn_1_2064, 0x1000, 0x3000, 0, HuPrcCurrentGet()); + var_r22->user_data = temp_r30; + temp_r30->unkC = 1; + temp_r30->unk0 = temp_r31->unk6; + temp_r30->unk2 = temp_r31->unk8; + temp_r30->unk4 = temp_r31->unkA; + temp_r30->unk30 = 100.0f; + temp_r30->unk10.x = -217.722f; + temp_r30->unk10.y = 404.52f; + temp_r30->unk10.z = 0.0f; + var_f29 = fn_1_1D08(atan2d(temp_r30->unk10.x, temp_r30->unk10.z)); + var_f29 += temp_r31->unk38.y; + var_f24 = sqrtf((temp_r30->unk10.x * temp_r30->unk10.x) + (temp_r30->unk10.z * temp_r30->unk10.z)); + temp_r30->unk10.x = (temp_r31->unk2C.x + (var_f24 * sind(var_f29))); + temp_r30->unk10.y = (404.52f + temp_r31->unk2C.y) - 100.0f; + temp_r30->unk10.z = (temp_r31->unk2C.z + (var_f24 * cosd(var_f29))); + Hu3DModelPosSet(temp_r31->unk6, temp_r30->unk10.x, temp_r30->unk10.y, temp_r30->unk10.z); + Hu3DModelPosSet(temp_r31->unk8, temp_r30->unk10.x, -temp_r30->unk10.y, temp_r30->unk10.z); + HuSetVecF(&sp8C, temp_r31->unk2C.x, 0.0, temp_r31->unk2C.z); + HuSetVecF(&sp80, sp6C, 0.0, sp68); + HuSubVecF(&sp74, &sp8C, &sp80); + var_f24 = sqrtf((sp74.x * sp74.x) + (sp74.z * sp74.z)); + sp54 = 1.0f; + + while (1) { + for (var_r29 = 0, sp5C = temp_r30->unk10.y, sp58 = sp54; sp58 > 0.0f; var_r29++) { + sp5C += sp58; + sp58 -= 0.9f; + } + if (sp5C >= 600.0f) break; + sp54++; + } + for (;sp5C > 0.0f; var_r29++) { + sp5C += sp58; + sp58 -= 0.9f; + } + temp_r30->unk24.z = sp54; + temp_r30->unk24.x = fn_1_1D08(atan2d((sp6C - temp_r30->unk10.x), (sp68 - temp_r30->unk10.z))); + temp_r30->unk24.y = var_f24 / var_r29; + while (Hu3DMotionEndCheck(temp_r31->unk0) == 0) { + HuPrcVSleep(); + } + goto loop_1; +} + +s8 fn_1_4BE4(s32 arg0, s32 arg1) { + s8 var_r30; + s8 var_r29; + s8 var_r28; + unkStruct3* temp_r31; + + temp_r31 = &lbl_1_bss_4D4[arg0]; + if (GWPlayerCfg[arg0].iscom == 0) { + if (arg1 != 0) { + var_r29 = var_r30 = HuPadStkY[temp_r31->unk2C]; + } else { + var_r29 = var_r30 = HuPadStkX[temp_r31->unk2C]; + } + + (void)var_r30; // used to make the else branch go here instead of returning + } else { + if (arg1 != 0) { + var_r28 = var_r30 = temp_r31->unk89; + } else { + var_r28 = var_r30 = temp_r31->unk88; + } + } + return var_r30; +} + +void fn_1_4C9C(Vec* arg0, f32 arg8, f32 arg9) { + f32 temp_f29; + + temp_f29 = sqrtf((arg0->x * arg0->x) + (arg0->z * arg0->z)); + temp_f29 *= arg9; + arg0->x = (temp_f29 * sind(arg8)); + arg0->z = (temp_f29 * cosd(arg8)); +} + +static inline f32 unkInline(void) { + return 1.0f; // huh? +} + +s8 fn_1_4E58(s32 arg0, s32 arg1) { + Vec spC; + f32 sp8; + f32 temp_f28; + f32 temp_f27; + s8 var_r30; + s8 temp_r29; + s8 temp_r28; + s8 var_r27; + s8 var_r26; + unkStruct3* temp_r31; + + temp_r31 = &lbl_1_bss_4D4[arg0]; + if (GWPlayerCfg[arg0].iscom == 0) { + temp_r29 = HuPadStkX[temp_r31->unk2C]; + temp_r28 = HuPadStkY[temp_r31->unk2C]; + temp_f28 = fn_1_1D08(atan2d(temp_r29, temp_r28)); + temp_f28 -= lbl_1_bss_778; + HuSetVecF(&spC, (f32)temp_r29, 0.0, (f32)temp_r28); + temp_f27 = sqrtf((spC.x * spC.x) + (spC.z * spC.z)); + temp_f27 *= unkInline(); + spC.x = (temp_f27 * sind(temp_f28)); + spC.z = (temp_f27 * cosd(temp_f28)); + if (arg1 != 0) { + var_r27 = var_r30 = spC.z; + } else { + var_r27 = var_r30 = spC.x; + } + + (void)var_r30; // used to make the else branch go here instead of returning + } else if (arg1 != 0) { + var_r26 = var_r30 = temp_r31->unk89; + } else { + var_r26 = var_r30 = temp_r31->unk88; + } + return var_r30; +} + +u8 fn_1_525C(s32 arg0, s32 arg1) { + s8 var_r30; + s8 var_r29; + s8 var_r28; + unkStruct3* temp_r31; + + temp_r31 = &lbl_1_bss_4D4[arg0]; + if (GWPlayerCfg[arg0].iscom == 0) { + if (arg1 != 0) { + var_r29 = var_r30 = HuPadTrigR[temp_r31->unk2C]; + } else { + var_r29 = var_r30 = HuPadTrigL[temp_r31->unk2C]; + } + + (void)var_r30; // used to make the else branch go here instead of returning + } else if (arg1 != 0) { + var_r28 = var_r30 = temp_r31->unk8A; + } else { + var_r28 = var_r30 = temp_r31->unk8B; + } + return var_r30; +} + +u16 fn_1_531C(s32 arg0) { + u16 var_r30; + unkStruct3* temp_r31; + + temp_r31 = &lbl_1_bss_4D4[arg0]; + if (GWPlayerCfg[arg0].iscom == 0) { + var_r30 = HuPadBtnDown[temp_r31->unk2C]; + } else { + var_r30 = temp_r31->unk8E; + } + return var_r30; +} + +u16 fn_1_5388(s32 arg0) { + u16 var_r30; + unkStruct3* temp_r31; + + temp_r31 = &lbl_1_bss_4D4[arg0]; + if (GWPlayerCfg[arg0].iscom == 0) { + var_r30 = HuPadBtn[temp_r31->unk2C]; + } else { + var_r30 = temp_r31->unk8C; + } + return var_r30; +} + +s32 fn_1_53F4(unkStruct3* arg0, f32 arg8, f32 arg9, f32 argA) { + Vec sp30; + Vec sp24; + Vec sp18; + f32 var_f27; + f32 var_f28; + s32 var_r28; + s32 var_r30; + unkStruct3* temp_r31; + + var_r28 = -1; + var_r30 = 0; + var_f28 = 10000.0f; + + for (;var_r30 < 4; var_r30++) { + if (var_r30 != arg0->unk24) { + temp_r31 = &lbl_1_bss_4D4[var_r30]; + HuSetVecF(&sp30, arg8, arg9, argA); + HuSetVecF(&sp24, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z); + HuSubVecF(&sp18, &sp30, &sp24); + var_f27 = sqrtf((sp18.z * sp18.z) + ((sp18.x * sp18.x) + (sp18.y * sp18.y))); + if ((var_f27 < (arg0->unk60.x + temp_r31->unk60.x)) && (var_f27 < var_f28)) { + var_f28 = var_f27; + var_r28 = var_r30; + arg0->unkA4 = 0; + } + } + } + return var_r28; +} + +s32 fn_1_561C(unkStruct3* arg0, s32* arg1) { + Vec sp24; + Vec sp18; + Vec spC; + f32 var_f27; + f32 var_f28; + s32 var_r27; + s32 var_r28; + s32 var_r29; + unkStruct3* temp_r30; + + var_r27 = -1; + var_r29 = 0; + var_f28 = 10000.0f; + var_r28 = 0; + + for (;var_r29 < 4; var_r29++) { + if (var_r29 != arg0->unk24) { + temp_r30 = &lbl_1_bss_4D4[var_r29]; + HuSetVecF(&sp24, arg0->unk40.x, arg0->unk40.y, arg0->unk40.z); + HuSetVecF(&sp18, temp_r30->unk40.x, temp_r30->unk40.y, temp_r30->unk40.z); + HuSubVecF(&spC, &sp24, &sp18); + var_f27 = sqrtf((spC.z * spC.z) + ((spC.x * spC.x) + (spC.y * spC.y))); + if (var_f27 < (arg0->unk60.x + temp_r30->unk60.x)) { + var_r28 += 1; + if (var_f27 < var_f28) { + var_f28 = var_f27; + var_r27 = var_r29; + arg0->unkA4 = 0; + } + } + } + } + *arg1 = var_r28; + return var_r27; +} \ No newline at end of file diff --git a/src/libhu/setvf.c b/src/libhu/setvf.c new file mode 100644 index 00000000..d8381bf7 --- /dev/null +++ b/src/libhu/setvf.c @@ -0,0 +1,7 @@ +#include "dolphin.h" + +void HuSetVecF(Vec* arg0, f32 arg8, f32 arg9, f32 argA) { + arg0->x = arg8; + arg0->y = arg9; + arg0->z = argA; +} \ No newline at end of file diff --git a/src/libhu/subvf.c b/src/libhu/subvf.c new file mode 100644 index 00000000..fc245a99 --- /dev/null +++ b/src/libhu/subvf.c @@ -0,0 +1,7 @@ +#include "dolphin.h" + +void HuSubVecF(Vec* out, Vec* in, Vec* sub) { + out->x = in->x - sub->x; + out->y = in->y - sub->y; + out->z = in->z - sub->z; +} \ No newline at end of file From 25910aa5bad9169bae91047e6befb08d36c3a36e Mon Sep 17 00:00:00 2001 From: CreateSource Date: Fri, 2 Aug 2024 11:44:41 -0400 Subject: [PATCH 2/2] match most of m412 --- config/GMPE01_00/rels/m412Dll/symbols.txt | 236 +++--- include/REL/m412Dll.h | 22 +- src/REL/m412Dll/main.c | 933 +++++++++++++++++++++- 3 files changed, 1057 insertions(+), 134 deletions(-) diff --git a/config/GMPE01_00/rels/m412Dll/symbols.txt b/config/GMPE01_00/rels/m412Dll/symbols.txt index be43ffa3..f6b625d3 100644 --- a/config/GMPE01_00/rels/m412Dll/symbols.txt +++ b/config/GMPE01_00/rels/m412Dll/symbols.txt @@ -38,133 +38,133 @@ fn_1_B160 = .text:0x0000B160; // type:function size:0x60 fn_1_B1C0 = .text:0x0000B1C0; // type:function size:0x4A0 _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 data:float -lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 data:float -lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 data:float -lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 data:float -lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 data:float -lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 data:float -lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float -lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 data:float -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 data:float -lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 data:float -lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 data:float -lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 data:float -lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 data:double -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 data:double -lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 data:float -lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 data:float -lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 data:float -lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 data:float -lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 data:float -lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 data:float -lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 data:float -lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 data:float -lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 data:float -lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 data:float -lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 data:float -lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 data:float -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 data:float -lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 data:float -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 data:float -lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 data:float -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 data:float -lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 data:float -lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 data:float -lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 data:double -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 data:double -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 data:double -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 data:float -lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 data:float -lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 data:float -lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 data:float -lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 data:float -lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 data:float -lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 data:float -lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 data:float -lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 data:double -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 data:float -lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 data:float -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 data:float -lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 data:float -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 data:float -lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 data:float -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 data:float -lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 data:float -lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 data:float -lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 data:float -lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 data:double -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 data:double -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 data:double -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 data:float -lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x8 data:double -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:0x8 data:double -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:0x8 data:double -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 data:float -lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 data:float -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float +lbl_1_rodata_10 = .rodata:0x00000010; // type:object size:0x4 scope:local data:float +lbl_1_rodata_14 = .rodata:0x00000014; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18 = .rodata:0x00000018; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C = .rodata:0x0000001C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20 = .rodata:0x00000020; // type:object size:0x4 scope:local data:float +lbl_1_rodata_24 = .rodata:0x00000024; // type:object size:0x4 scope:local data:float +lbl_1_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float +lbl_1_rodata_2C = .rodata:0x0000002C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x4 scope:local data:float +lbl_1_rodata_34 = .rodata:0x00000034; // type:object size:0x4 scope:local data:float +lbl_1_rodata_38 = .rodata:0x00000038; // type:object size:0x4 scope:local data:float +lbl_1_rodata_3C = .rodata:0x0000003C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_40 = .rodata:0x00000040; // type:object size:0x8 scope:local data:double +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x8 scope:local data:double +lbl_1_rodata_60 = .rodata:0x00000060; // type:object size:0x4 scope:local data:float +lbl_1_rodata_64 = .rodata:0x00000064; // type:object size:0x4 scope:local data:float +lbl_1_rodata_68 = .rodata:0x00000068; // type:object size:0x4 scope:local data:float +lbl_1_rodata_6C = .rodata:0x0000006C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_70 = .rodata:0x00000070; // type:object size:0x4 scope:local data:float +lbl_1_rodata_74 = .rodata:0x00000074; // type:object size:0x4 scope:local data:float +lbl_1_rodata_78 = .rodata:0x00000078; // type:object size:0x4 scope:local data:float +lbl_1_rodata_7C = .rodata:0x0000007C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_80 = .rodata:0x00000080; // type:object size:0x4 scope:local data:float +lbl_1_rodata_84 = .rodata:0x00000084; // type:object size:0x4 scope:local data:float +lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:float +lbl_1_rodata_8C = .rodata:0x0000008C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x4 scope:local data:float +lbl_1_rodata_94 = .rodata:0x00000094; // type:object size:0x4 scope:local data:float +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x4 scope:local data:float +lbl_1_rodata_9C = .rodata:0x0000009C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A4 = .rodata:0x000000A4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_A8 = .rodata:0x000000A8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B0 = .rodata:0x000000B0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D4 = .rodata:0x000000D4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D8 = .rodata:0x000000D8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_DC = .rodata:0x000000DC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E0 = .rodata:0x000000E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E4 = .rodata:0x000000E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_E8 = .rodata:0x000000E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_EC = .rodata:0x000000EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F0 = .rodata:0x000000F0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_FC = .rodata:0x000000FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x4 scope:local data:float +lbl_1_rodata_104 = .rodata:0x00000104; // type:object size:0x4 scope:local data:float +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x4 scope:local data:float +lbl_1_rodata_10C = .rodata:0x0000010C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_114 = .rodata:0x00000114; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x4 scope:local data:float +lbl_1_rodata_11C = .rodata:0x0000011C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x4 scope:local data:float +lbl_1_rodata_13C = .rodata:0x0000013C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_140 = .rodata:0x00000140; // type:object size:0x4 scope:local data:float +lbl_1_rodata_144 = .rodata:0x00000144; // type:object size:0x4 scope:local data:float +lbl_1_rodata_148 = .rodata:0x00000148; // type:object size:0x8 scope:local data:double +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x8 scope:local data:double +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x8 scope:local data:double +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x4 scope:local data:float +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:double +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:0x8 scope:local data:double +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C4 = .rodata:0x000001C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float lbl_1_data_0 = .data:0x00000000; // type:object size:0x20 lbl_1_data_20 = .data:0x00000020; // type:object size:0x20 lbl_1_data_40 = .data:0x00000040; // type:object size:0x20 lbl_1_data_60 = .data:0x00000060; // type:object size:0x18 lbl_1_data_78 = .data:0x00000078; // type:object size:0x54 data:float -lbl_1_data_CC = .data:0x000000CC; // type:object size:0x14 data:string -lbl_1_data_E0 = .data:0x000000E0; // type:object size:0x14 data:string -lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x14 data:string -lbl_1_data_108 = .data:0x00000108; // type:object size:0x14 data:string -lbl_1_data_11C = .data:0x0000011C; // type:object size:0x14 data:string -lbl_1_data_130 = .data:0x00000130; // type:object size:0x14 data:string -lbl_1_data_144 = .data:0x00000144; // type:object size:0x14 data:string -lbl_1_data_158 = .data:0x00000158; // type:object size:0x14 data:string -lbl_1_data_16C = .data:0x0000016C; // type:object size:0x14 data:string -lbl_1_data_180 = .data:0x00000180; // type:object size:0x14 data:string -lbl_1_data_194 = .data:0x00000194; // type:object size:0x14 data:string -lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x14 data:string -lbl_1_data_1BC = .data:0x000001BC; // type:object size:0x14 data:string -lbl_1_data_1D0 = .data:0x000001D0; // type:object size:0x14 data:string -lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0x14 data:string -lbl_1_data_1F8 = .data:0x000001F8; // type:object size:0x14 data:string -lbl_1_data_20C = .data:0x0000020C; // type:object size:0x14 data:string -lbl_1_data_220 = .data:0x00000220; // type:object size:0x14 data:string -lbl_1_data_234 = .data:0x00000234; // type:object size:0x14 data:string -lbl_1_data_248 = .data:0x00000248; // type:object size:0x14 data:string -lbl_1_data_25C = .data:0x0000025C; // type:object size:0x14 data:string -lbl_1_data_270 = .data:0x00000270; // type:object size:0x14 data:string -lbl_1_data_284 = .data:0x00000284; // type:object size:0x14 data:string +lbl_1_data_CC = .data:0x000000CC; // type:object size:0x14 scope:local data:string +lbl_1_data_E0 = .data:0x000000E0; // type:object size:0x14 scope:local data:string +lbl_1_data_F4 = .data:0x000000F4; // type:object size:0x14 scope:local data:string +lbl_1_data_108 = .data:0x00000108; // type:object size:0x14 scope:local data:string +lbl_1_data_11C = .data:0x0000011C; // type:object size:0x14 scope:local data:string +lbl_1_data_130 = .data:0x00000130; // type:object size:0x14 scope:local data:string +lbl_1_data_144 = .data:0x00000144; // type:object size:0x14 scope:local data:string +lbl_1_data_158 = .data:0x00000158; // type:object size:0x14 scope:local data:string +lbl_1_data_16C = .data:0x0000016C; // type:object size:0x14 scope:local data:string +lbl_1_data_180 = .data:0x00000180; // type:object size:0x14 scope:local data:string +lbl_1_data_194 = .data:0x00000194; // type:object size:0x14 scope:local data:string +lbl_1_data_1A8 = .data:0x000001A8; // type:object size:0x14 scope:local data:string +lbl_1_data_1BC = .data:0x000001BC; // type:object size:0x14 scope:local data:string +lbl_1_data_1D0 = .data:0x000001D0; // type:object size:0x14 scope:local data:string +lbl_1_data_1E4 = .data:0x000001E4; // type:object size:0x14 scope:local data:string +lbl_1_data_1F8 = .data:0x000001F8; // type:object size:0x14 scope:local data:string +lbl_1_data_20C = .data:0x0000020C; // type:object size:0x14 scope:local data:string +lbl_1_data_220 = .data:0x00000220; // type:object size:0x14 scope:local data:string +lbl_1_data_234 = .data:0x00000234; // type:object size:0x14 scope:local data:string +lbl_1_data_248 = .data:0x00000248; // type:object size:0x14 scope:local data:string +lbl_1_data_25C = .data:0x0000025C; // type:object size:0x14 scope:local data:string +lbl_1_data_270 = .data:0x00000270; // type:object size:0x14 scope:local data:string +lbl_1_data_284 = .data:0x00000284; // type:object size:0x14 scope:local data:string lbl_1_data_298 = .data:0x00000298; // type:object size:0x5C -lbl_1_data_2F4 = .data:0x000002F4; // type:object size:0xC data:string -lbl_1_data_300 = .data:0x00000300; // type:object size:0x7 data:string -lbl_1_data_307 = .data:0x00000307; // type:object size:0x9 +lbl_1_data_2F4 = .data:0x000002F4; // type:object size:0xC scope:local data:string +lbl_1_data_300 = .data:0x00000300; // type:object size:0x7 scope:local data:string +lbl_1_data_307 = .data:0x00000307; // type:object size:0x6 scope:local data:string lbl_1_data_310 = .data:0x00000310; // type:object size:0x30 lbl_1_data_340 = .data:0x00000340; // type:object size:0x8 lbl_1_data_348 = .data:0x00000348; // type:object size:0x18 -lbl_1_data_360 = .data:0x00000360; // type:object size:0x9 data:string +lbl_1_data_360 = .data:0x00000360; // type:object size:0x9 scope:local data:string lbl_1_bss_0 = .bss:0x00000000; // type:object size:0xC data:float lbl_1_bss_C = .bss:0x0000000C; // type:object size:0xC data:float lbl_1_bss_18 = .bss:0x00000018; // type:object size:0xC data:float diff --git a/include/REL/m412Dll.h b/include/REL/m412Dll.h index 3499be88..aea02d47 100644 --- a/include/REL/m412Dll.h +++ b/include/REL/m412Dll.h @@ -48,10 +48,11 @@ typedef struct _unkStruct3 { s32 unk28; s32 unk2C; s32 unk30; - char unk34[0x8]; + char unk34[0x4]; + s32 unk38; s32 unk3C; Vec unk40; - char unk4C[0x8]; + HsfVector2f unk4C; Vec unk54; Vec unk60; f32 unk6C; @@ -63,7 +64,10 @@ typedef struct _unkStruct3 { s8 unk8B; u16 unk8C; u16 unk8E; - char unk90[0x14]; + HsfVector2f unk90; + f32 unk98; + s32 unk9C; + s32 unkA0; s32 unkA4; } unkStruct3; // sizeof 0xA8 @@ -76,7 +80,7 @@ typedef struct _unkStruct4 { // prototypes void ObjectSetup(void); -void fn_1_6EC(f32, f32, f32, s32); +void* fn_1_6EC(f32, f32, f32, s32); void fn_1_73C(void); void fn_1_7BC(void); void fn_1_894(omObjData* object); @@ -99,10 +103,14 @@ u16 fn_1_531C(s32); u16 fn_1_5388(s32); s32 fn_1_53F4(unkStruct3*, f32, f32, f32); s32 fn_1_561C(unkStruct3*, s32*); +void fn_1_5838(unkStruct3*); +f32 fn_1_6594(f32, f32, f32); +f32 fn_1_6698(f32, f32, unkStruct3*); +void fn_1_6814(unkStruct3*); +void fn_1_7C60(void); +void fn_1_A01C(ModelData* model, ParticleData* particle, Mtx matrix); +void fn_1_A618(ModelData* model, ParticleData* particle, Mtx matrix); //... -void fn_1_7C60(void); // * -void fn_1_A01C(ModelData* model, ParticleData* particle, Mtx matrix); // * -void fn_1_A618(ModelData* model, ParticleData* particle, Mtx matrix); // * void fn_1_AA88(ModelData* model, ParticleData* particle, Mtx matrix); // * void fn_1_B160(void); // * void fn_1_B1C0(void); // * \ No newline at end of file diff --git a/src/REL/m412Dll/main.c b/src/REL/m412Dll/main.c index c7481aee..fdd34597 100644 --- a/src/REL/m412Dll/main.c +++ b/src/REL/m412Dll/main.c @@ -8,6 +8,7 @@ #include "game/frand.h" #include "game/hsfmotion.h" #include "game/mapspace.h" +#include "game/minigame_seq.h" #include "game/objsub.h" #include "game/pad.h" #include "game/sprite.h" @@ -20,6 +21,7 @@ s16 lbl_1_bss_79C; s16 lbl_1_bss_798[2]; s32 lbl_1_bss_794; s32 lbl_1_bss_790; +s32 lbl_1_bss_780[4]; f32 lbl_1_bss_77C; f32 lbl_1_bss_778; f32 lbl_1_bss_774; @@ -137,13 +139,13 @@ void ObjectSetup(void) { WipeCreate(1, 0, 0x3C); } -void fn_1_6EC(f32 arg8, f32 arg9, f32 argA, s32 arg0) { +void* fn_1_6EC(f32 arg8, f32 arg9, f32 argA, s32 arg0) { Vec sp8; sp8.x = arg8; sp8.y = arg9; sp8.z = argA; - HuAudFXEmiterPlay(arg0, &sp8); + return (void*)HuAudFXEmiterPlay(arg0, &sp8); } void fn_1_73C(void) { @@ -1247,17 +1249,14 @@ s32 fn_1_53F4(unkStruct3* arg0, f32 arg8, f32 arg9, f32 argA) { unkStruct3* temp_r31; var_r28 = -1; - var_r30 = 0; - var_f28 = 10000.0f; - for (;var_r30 < 4; var_r30++) { + for (var_r30 = 0, var_f28 = 10000.0f; var_r30 < 4; var_r30++) { if (var_r30 != arg0->unk24) { temp_r31 = &lbl_1_bss_4D4[var_r30]; HuSetVecF(&sp30, arg8, arg9, argA); HuSetVecF(&sp24, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z); HuSubVecF(&sp18, &sp30, &sp24); - var_f27 = sqrtf((sp18.z * sp18.z) + ((sp18.x * sp18.x) + (sp18.y * sp18.y))); - if ((var_f27 < (arg0->unk60.x + temp_r31->unk60.x)) && (var_f27 < var_f28)) { + if (((var_f27 = sqrtf((sp18.z * sp18.z) + ((sp18.x * sp18.x) + (sp18.y * sp18.y)))) < (arg0->unk60.x + temp_r31->unk60.x)) && (var_f27 < var_f28)) { var_f28 = var_f27; var_r28 = var_r30; arg0->unkA4 = 0; @@ -1289,8 +1288,7 @@ s32 fn_1_561C(unkStruct3* arg0, s32* arg1) { HuSetVecF(&sp24, arg0->unk40.x, arg0->unk40.y, arg0->unk40.z); HuSetVecF(&sp18, temp_r30->unk40.x, temp_r30->unk40.y, temp_r30->unk40.z); HuSubVecF(&spC, &sp24, &sp18); - var_f27 = sqrtf((spC.z * spC.z) + ((spC.x * spC.x) + (spC.y * spC.y))); - if (var_f27 < (arg0->unk60.x + temp_r30->unk60.x)) { + if ((var_f27 = sqrtf((spC.z * spC.z) + ((spC.x * spC.x) + (spC.y * spC.y)))) < (arg0->unk60.x + temp_r30->unk60.x)) { var_r28 += 1; if (var_f27 < var_f28) { var_f28 = var_f27; @@ -1302,4 +1300,921 @@ s32 fn_1_561C(unkStruct3* arg0, s32* arg1) { } *arg1 = var_r28; return var_r27; +} + +void fn_1_5838(unkStruct3* arg0) { + Vec spA8; + Vec sp9C; + Vec sp90; + Vec sp84; + Vec sp78; + Vec sp6C; + s32 sp68; + f32 sp64; + f32 sp60; + f32 sp5C; + f32 sp58; + f32 sp54; + f32 sp50; + f32 sp4C; + f32 var_f20; + f32 var_f25; + f32 var_f27; + f32 var_f26; + s32 var_r25; + s32 var_r29; + unkStruct3* temp_r27; + unkStruct3* var_r30; + s32 var_r24; + + var_r24 = fn_1_561C(arg0, &sp68); + if (var_r24 != -1) { + var_f20 = fn_1_1D08(atan2d((arg0->unk40.x - arg0->unk4C.x), (arg0->unk40.z - arg0->unk4C.y))); + sp58 = var_f27 = arg0->unk4C.x; + sp54 = var_f26 = arg0->unk4C.y; + sp4C = 1.0f; + var_r25 = (1.0f + (10.0f / sp4C)); + + while (var_r25 != 0) { + var_f27 += sp4C * sind(var_f20); + var_f26 += sp4C * cosd(var_f20); + HuSetVecF(&spA8, var_f27, arg0->unk40.y, var_f26); + + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if (var_r29 == arg0->unk24) continue; + var_r30 = &lbl_1_bss_4D4[var_r29]; + HuSetVecF(&sp9C, var_r30->unk40.x, var_r30->unk40.y, var_r30->unk40.z); + HuSubVecF(&sp90, &spA8, &sp9C); + if (sqrtf((sp90.z * sp90.z) + ((sp90.x * sp90.x) + (sp90.y * sp90.y))) < (arg0->unk60.x + var_r30->unk60.x)) + break; + } + if (var_r29 < 4) break; + AddX = 0.0f; + AddZ = 0.0f; + MapWall(arg0->unk60.x, var_f27, arg0->unk40.y + arg0->unk60.x, var_f26); + if ((AddX + AddZ) != 0.0f) goto end; + sp58 = var_f27; + sp54 = var_f26; + var_r25--; + } + var_f20 = fn_1_1D08(atan2d((arg0->unk40.x - arg0->unk4C.x), (arg0->unk40.z - arg0->unk4C.y))); + var_f25 = fn_1_1D08(atan2d((var_r30->unk40.x - arg0->unk4C.x), (var_r30->unk40.z - arg0->unk4C.y))); + sp60 = var_f20 - var_f25; + if (sp60 > 0.0f) { + sp5C = -0.5f; + } else { + sp5C = 0.5f; + } + if (ABS_INV(var_f20 - var_f25) > 180.0f) { + sp5C = -sp5C; + } + var_f25 = fn_1_1D08(atan2d((arg0->unk4C.x - var_r30->unk40.x), (arg0->unk4C.y - var_r30->unk40.z))); + sp50 = 0.8f * arg0->unk60.y; + var_r24 = var_r30->unk24; + sp64 = 1.0f + (arg0->unk60.x + var_r30->unk60.x); + while (1) { + var_f27 = (var_r30->unk40.x + (sp64 * sind(var_f25))); + var_f26 = (var_r30->unk40.z + (sp64 * cosd(var_f25))); + HuSetVecF(&spA8, var_f27, 0.0, var_f26); + + for (var_r29 = 0; var_r29 < 4; var_r29++) { + if ((var_r29 == arg0->unk24) || (var_r29 == var_r24)) continue; + temp_r27 = &lbl_1_bss_4D4[var_r29]; + HuSetVecF(&sp9C, temp_r27->unk40.x, 0.0, temp_r27->unk40.z); + HuSubVecF(&sp90, &spA8, &sp9C); + if (sqrtf((sp90.x * sp90.x) + (sp90.z * sp90.z)) < (arg0->unk60.x + temp_r27->unk60.x)) break; + } + if (var_r29 < 4) break; + AddX = 0.0f; + AddZ = 0.0f; + MapWall(arg0->unk60.x, var_f27, arg0->unk40.y + arg0->unk60.x, var_f26); + if ((AddX + AddZ) != 0.0f) break; + sp58 = var_f27; + sp54 = var_f26; + HuSetVecF(&spA8, arg0->unk4C.x, 0.0, arg0->unk4C.y); + HuSetVecF(&sp9C, var_f27, 0.0, var_f26); + HuSubVecF(&sp90, &spA8, &sp9C); + if (sqrtf((sp90.x * sp90.x) + (sp90.z * sp90.z)) > sp50) break; + var_f25 += sp5C; + } +end: + arg0->unk40.x = sp58; + arg0->unk40.z = sp54; + } +} + +f32 fn_1_6594(f32 arg8, f32 arg9, f32 argA) { + f32 var_f30; + f32 var_f31; + + var_f31 = fmod((arg9 - arg8), 360.0); + if (0.0f > var_f31) { + var_f31 += 360.0f; + } + if (180.0f < var_f31) { + var_f31 -= 360.0f; + } + var_f30 = fmod((arg8 + (var_f31 * argA)), 360.0); + if (0.0f > var_f30) { + var_f30 += 360.0f; + } + return var_f30; +} + +f32 fn_1_6698(f32 arg8, f32 arg9, unkStruct3* arg0) { + Vec sp2C; + Vec sp20; + Vec sp14; + + HuSetVecF(&sp2C, arg8, 0.0, arg9); + HuSetVecF(&sp20, arg0->unk40.x, 0.0, arg0->unk40.z); + HuSubVecF(&sp14, &sp2C, &sp20); + return sqrtf((sp14.x * sp14.x) + (sp14.z * sp14.z)); +} + +// fn_1_6814: https://decomp.me/scratch/WQPjD +void fn_1_6814(unkStruct3* arg0) { + Vec sp104; + Vec spF8; + Vec spEC; + Vec spE0; + Vec spD4; + Vec spC8; + f32 spBC; + f32 spB0; + f32 spA4; + volatile f32 spA0; + f32 sp9C; + f32 sp98; + f32 var_f27; // probably debug code + f32 var_f18; + f32 temp_f31; + f32 temp_f30; + f32 var_f29; + s32 var_r22; + s32 var_r21; + s32 var_r20; + unkStruct* temp_r27; + s32 var_r28; + unkStruct3* temp_r29; + unkStruct* var_r30; + + arg0->unk88 = arg0->unk89 = 0; + arg0->unk8B = arg0->unk8A = 0; + arg0->unk8C = arg0->unk8E = 0; + + switch (GWPlayerCfg[arg0->unk24].diff) { + case 0: + var_r22 = 0x3C; + break; + case 1: + var_r22 = 0x50; + break; + case 2: + var_r22 = 0x5A; + break; + default: + var_r22 = 0x5F; + break; + } + switch (GWPlayerCfg[arg0->unk24].diff) { + case 0: + spA0 = 200.0f; + break; + case 1: + spA0 = 250.0f; + break; + case 2: + spA0 = 300.0f; + break; + default: + spA0 = 350.0f; + break; + } + + for (var_r28 = 0, sp98 = 10000.0f; var_r28 < 0x20; var_r28++) { + temp_r27 = lbl_1_bss_278[var_r28]; + if (temp_r27 && (temp_r27->unk6 != -1)) { + HuSetVecF(&sp104, arg0->unk40.x, 0.0, arg0->unk40.z); + HuSetVecF(&spF8, temp_r27->unk10.x, 0.0, temp_r27->unk10.z); + HuSubVecF(&spEC, &sp104, &spF8); + var_f29 = sqrtf((spEC.z * spEC.z) + ((spEC.x * spEC.x) + (spEC.y * spEC.y))); + if ((var_f29 < (spA0 + (arg0->unk60.x + temp_r27->unk30))) && (sp98 > var_f29)) { + var_r30 = temp_r27; + sp98 = var_f29; + } + } + } + if (sp98 < 10000.0f) { + arg0->unk9C = 0; + var_r21 = 1; + if (arg0->unkA0 != var_r30->unk6) { + if (frandmod(0x64) < 0) { + (void)var_r21; // probably debug code + } else { + (void)var_r21; + } + } + if (var_r21 != 0) { + sp9C = 200.0f + (var_r30->unk30 + arg0->unk60.x) + (100.0f * frandf()); + sp104.x = temp_f31 = (var_r30->unk10.x + (sp9C * sind(var_r30->unk24.x + 90.0f))); + sp104.z = temp_f30 = (var_r30->unk10.z + (sp9C * cosd(var_r30->unk24.x + 90.0f))); + var_f29 = sqrtf((temp_f31 * temp_f31) + (temp_f30 * temp_f30)); + spF8.x = temp_f31 = (var_r30->unk10.x + (sp9C * sind(var_r30->unk24.x - 90.0f))); + spF8.z = temp_f30 = (var_r30->unk10.z + (sp9C * cosd(var_r30->unk24.x - 90.0f))); + spA0 = sqrtf((temp_f31 * temp_f31) + (temp_f30 * temp_f30)); + if (sqrtf((arg0->unk40.x * arg0->unk40.x) + (arg0->unk40.z * arg0->unk40.z)) < 400.0f) { + spEC.x = var_f29; + var_f29 = spA0; + spA0 = spEC.x; + } + if (var_f29 > spA0) { + spEC.x = spF8.x; + spEC.z = spF8.z; + } else { + spEC.x = sp104.x; + spEC.z = sp104.z; + } + if (arg0->unkA0 != var_r30->unk6) { + arg0->unkA0 = var_r30->unk6; + arg0->unk90.x = spEC.x; + arg0->unk90.y = spEC.z; + } + + var_f18 = atan2d((arg0->unk90.x - arg0->unk40.x), (arg0->unk90.y - arg0->unk40.z)); + + if (fn_1_53F4(arg0, arg0->unk40.x + arg0->unk7C.x, arg0->unk40.y, arg0->unk40.z + arg0->unk7C.z) != -1) { + var_f18 += 90.0f; + } + arg0->unk88 = 50.0 * sind(var_f18); + arg0->unk89 = -50.0f * cosd(var_f18); + } + } else { + if (arg0->unk9C == 0) { + arg0->unk9C = 1; + arg0->unk98 = (250.0f + (90.0f * frandf())); + arg0->unkA4 = 30; + } + if ((sqrtf((arg0->unk40.x * arg0->unk40.x) + (arg0->unk40.z * arg0->unk40.z)) > arg0->unk98) && (arg0->unkA4 != 0)) { + arg0->unkA4--; + var_f18 = (180.0 + (atan2d(arg0->unk40.x, arg0->unk40.z))); + if (fn_1_53F4(arg0, arg0->unk40.x + arg0->unk7C.x, arg0->unk40.y, arg0->unk40.z + arg0->unk7C.z) != -1) { + arg0->unkA4 = 0; + var_f18 += 90.0f; + } + arg0->unk88 = 25.0 * sind(var_f18); + arg0->unk89 = -25.0 * cosd(var_f18); + return; + } + var_r28 = 0; + sp98 = 10000.0f; + var_r20 = -1; + + for (;var_r28 < 4; var_r28++) { + if (var_r28 != arg0->unk24) { + temp_r29 = &lbl_1_bss_4D4[var_r28]; + HuSetVecF(&sp104, arg0->unk40.x, 0.0, arg0->unk40.z); + HuSetVecF(&spF8, temp_r29->unk40.x, 0.0, temp_r29->unk40.z); + HuSubVecF(&spEC, &sp104, &spF8); + var_f29 = sqrtf((spEC.z * spEC.z) + ((spEC.x * spEC.x) + (spEC.y * spEC.y))); + if (var_f29 < sp98) { + var_r20 = var_r28; + sp98 = var_f29; + } + } + } + if (var_r20 != -1) { + temp_r29 = &lbl_1_bss_4D4[var_r20]; + HuSetVecF(&sp104, arg0->unk40.x, 0.0, arg0->unk40.z); + HuSetVecF(&spF8, temp_r29->unk40.x, 0.0, temp_r29->unk40.z); + HuSubVecF(&spEC, &sp104, &spF8); + var_f29 = sqrtf((spEC.x * spEC.x) + (spEC.z * spEC.z)); + if ((var_f29 < 200.0f) && (var_f29 > 150.0f)) { + var_f18 = atan2d((arg0->unk40.x - temp_r29->unk40.x), (arg0->unk40.z - temp_r29->unk40.z)); + (void)var_f29; + arg0->unk88 = 30.0f * sind(var_f18); + arg0->unk89 = -30.0f * cosd(var_f18); + } + } + } + + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; + (void)var_f27; +} + +// fn_1_7C60: https://decomp.me/scratch/eMCi6 +void fn_1_7C60(void) { + Vec sp1A0; + Vec sp188; + Vec sp17C; + Vec sp170; + Vec sp164; + Vec sp158; + Vec sp14C; + Vec sp140; + f32 sp13C; + f32 sp138; + f32 sp134; + f32 sp130; + f32 sp12C; + f32 sp128; + f32 sp124; + s32 sp120; + f32 sp11C; + f32 sp118; + f32 sp114; + f32 sp110; + f32 sp10C; + f32 sp108; + f32 sp104; + f32 sp100; + f32 spFC; + f32 spF8; + f32 spF4; + f32 spF0; + s32 spEC; + f32 spE8; + f32 spE4; + s32 spE0; + f32 spDC; + f32 spD8; + f32 spD4; + f32 spD0; + f32 spCC; + f32 spC8; + f32 spC4; + f32 spC0; + f32 spBC; + f32 spB8; + f32 temp_f20; + f32 var_f21; + f32 var_f31; + s32 var_r27; + unkStruct3* temp_r30; + unkStruct3* temp_r31; + + temp_r31 = HuPrcCurrentGet()->user_data; + temp_r31->unk30 = 0; + temp_r31->unk9C = 0; + temp_r31->unkA0 = -1; + + while (lbl_1_bss_794 == 0) { + HuPrcVSleep(); + } + + lbl_1_bss_794 = 2; + while (lbl_1_bss_794 == 2) { + HuPrcVSleep(); + } +loop_6: + temp_r31->unk4C.x = temp_r31->unk40.x; + temp_r31->unk4C.y = temp_r31->unk40.z; + if (GWPlayerCfg[temp_r31->unk24].iscom == 1) { + fn_1_6814(temp_r31); + } + switch (temp_r31->unk30) { + default: + HuSetVecF(&temp_r31->unk24, fn_1_4E58(temp_r31->unk24, 0) * 0.25f, 0.0, -fn_1_4E58(temp_r31->unk24, 1) * 0.25f); + temp_r31->unk60.z = sqrtf((sp1A0.z * sp1A0.z) + ((sp1A0.x * sp1A0.x) + (sp1A0.y * sp1A0.y))); + if (temp_r31->unk60.z >= 0.5f) { + if (temp_r31->unk60.z >= 10.0f) { + sp1A0.x /= temp_r31->unk60.z; + sp1A0.z /= temp_r31->unk60.z; + temp_r31->unk60.z = 10.0f; + sp1A0.x = 10.0f * sp1A0.x; + sp1A0.z = 10.0f * sp1A0.z; + } + temp_r31->unk54.y = fn_1_6594(temp_r31->unk54.y, atan2d(sp1A0.x, sp1A0.z), 0.4f); + if (temp_r31->unk60.z >= 8.0f) { + if (temp_r31->unk30 != 2) { + temp_r31->unk30 = 2; + CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[temp_r31->unk24].character], temp_r31->unkC[2], 0.0f, 8.0f, 0x40000001U); + Hu3DMotionShiftSet(temp_r31->unk2, temp_r31->unk18[2], 0.0f, 8.0f, 0x40000001U); + } + } else if (temp_r31->unk30 != 1) { + temp_r31->unk30 = 1; + CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[temp_r31->unk24].character], temp_r31->unkC[1], 0.0f, 8.0f, 0x40000001U); + Hu3DMotionShiftSet(temp_r31->unk2, temp_r31->unk18[1], 0.0f, 8.0f, 0x40000001U); + } + temp_r31->unk7C.x += 0.1f * sp1A0.x; + temp_r31->unk7C.z += 0.1f * sp1A0.z; + } else if (temp_r31->unk30 != 0) { + temp_r31->unk30 = 0; + CharModelMotionSet(lbl_1_data_0[GWPlayerCfg[temp_r31->unk24].character], temp_r31->unkC[0]); + Hu3DModelAttrSet(temp_r31->unk0, 0x40000001); + Hu3DMotionSet(temp_r31->unk2, temp_r31->unk18[0]); + Hu3DMotionSpeedSet(temp_r31->unk2, 2.0f); + Hu3DModelAttrSet(temp_r31->unk2, 0x40000001); + } + var_f21 = sqrtf((temp_r31->unk7C.x * temp_r31->unk7C.x) + (temp_r31->unk7C.z * temp_r31->unk7C.z)); + if (temp_r31->unk60.z > 0.5f) { + if (var_f21 > 0.25f) { + var_f21 -= 0.25f; + } + } else { + var_f21 -= 0.25f; + } + if (var_f21 < 0.0f) { + HuSetVecF(&temp_r31->unk7C, 0.0, 0.0, 0.0); + var_f21 = 0.0f; + } else { + if (var_f21 > 10.0f) { + var_f21 = 10.0f; + } + sp13C = fn_1_1D08(atan2d(temp_r31->unk7C.x, temp_r31->unk7C.z)); + HuSetVecF(&temp_r31->unk7C, (var_f21 * sind(sp13C)), 0.0, (var_f21 * cosd(sp13C))); + } + temp_r31->unk60.y = var_f21; + temp_r31->unk40.x += temp_r31->unk7C.x; + temp_r31->unk40.z += temp_r31->unk7C.z; + temp_r31->unk38 = fn_1_53F4(temp_r31, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z); + if (temp_r31->unk38 != -1) { + temp_r30 = &lbl_1_bss_4D4[temp_r31->unk38]; + if (temp_r30->unk30 != 3) { + var_f31 = atan2d((temp_r30->unk40.x - temp_r31->unk40.x), (temp_r30->unk40.z - temp_r31->unk40.z)); + temp_f20 = atan2d(temp_r31->unk7C.x, temp_r31->unk7C.z); + var_f31 = ABS_INV(var_f31 - temp_f20); + if (var_f31 > 180.0f) { + var_f31 = 360.0f - var_f31; + } + sp138 = var_f31 / 90.0f; + var_f31 = atan2d((temp_r31->unk40.x - temp_r30->unk40.x), (temp_r31->unk40.z - temp_r30->unk40.z)); + temp_f20 = atan2d(temp_r31->unk7C.x, temp_r31->unk7C.z); + temp_f20 = fn_1_1D08(180.0f + temp_f20); + temp_f20 = fn_1_1D08(var_f31 - (temp_f20 - var_f31)); + var_f31 = fn_1_1D08(atan2d((temp_r30->unk40.x - temp_r31->unk40.x), (temp_r30->unk40.z - temp_r31->unk40.z))); + HuSetVecF(&sp1A0, temp_r31->unk7C.x, 0.0, temp_r31->unk7C.z); + spBC = sqrtf((sp1A0.x * sp1A0.x) + (sp1A0.z * sp1A0.z)); + spBC *= (1.0f - sp138); + sp1A0.x = spBC * sind(var_f31); + sp1A0.z = spBC * cosd(var_f31); + HuSetVecF(&temp_r30->unk7C, sp1A0.x, 0.0, sp1A0.z); + HuSetVecF(&sp1A0, temp_r31->unk7C.x, 0.0, temp_r31->unk7C.z); + spB8 = sqrtf((sp1A0.x * sp1A0.x) + (sp1A0.z * sp1A0.z)); + spB8 *= sp138; + sp1A0.x = spB8 * sind(temp_f20); + sp1A0.z = spB8 * cosd(temp_f20); + HuSetVecF(&temp_r31->unk7C, sp1A0.x, 0.0, sp1A0.z); + } + fn_1_5838(temp_r31); + } + while (1) { + AddX = 0.0f; + AddZ = 0.0f; + MapWall(temp_r31->unk60.x, temp_r31->unk40.x, temp_r31->unk40.y + temp_r31->unk60.x, temp_r31->unk40.z); + temp_r31->unk40.x += AddX; + temp_r31->unk40.z += AddZ; + if ((temp_r31->unk38 = fn_1_53F4(temp_r31, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z)) == -1) break; + temp_r31->unk40.x = temp_r31->unk4C.x; + temp_r31->unk40.z = temp_r31->unk4C.y; + } + Hu3DModelPosSet(temp_r31->unk0, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z); + Hu3DModelRotSet(temp_r31->unk0, temp_r31->unk54.x, temp_r31->unk54.y, temp_r31->unk54.z); + Hu3DModelPosSet(temp_r31->unk2, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z); + Hu3DModelRotSet(temp_r31->unk2, temp_r31->unk54.x, temp_r31->unk54.y, temp_r31->unk54.z); + HuPrcVSleep(); + goto loop_6; + case 3: + HuAudFXPlay(0x584); + Hu3DModelAttrSet(temp_r31->unk0, 0x40000002); + Hu3DModelAttrSet(temp_r31->unk2, 0x40000002); + Hu3DModelPosSet(temp_r31->unkA, temp_r31->unk40.x + (100.0 * sind(lbl_1_bss_778)), 200.0f + temp_r31->unk40.y, temp_r31->unk40.z + (100.0 * cosd(lbl_1_bss_778))); + Hu3DModelAttrReset(temp_r31->unkA, 1); + Hu3DModelAttrReset(temp_r31->unkA, 0x40000002); + HuPrcSleep(10); + Hu3DModelAttrSet(temp_r31->unk0, 0x40000002); + Hu3DModelAttrSet(temp_r31->unk2, 0x40000002); + HuPrcSleep(10); + Hu3DModelPosSet(temp_r31->unk6, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z); + Hu3DModelPosSet(temp_r31->unk8, temp_r31->unk40.x, temp_r31->unk40.y, temp_r31->unk40.z); + Hu3DModelAttrReset(temp_r31->unk6, 1); + Hu3DModelAttrReset(temp_r31->unk8, 1); + Hu3DModelShadowDispOn(temp_r31->unk6); + + for (sp134 = 0.0f, sp130 = 1.0f; sp134 < 1; sp134 += 0.05f, sp130 -= 0.1f) { + Hu3DModelScaleSet(temp_r31->unk6, 1.0f, sp134, 1.0f); + Hu3DModelScaleSet(temp_r31->unk8, 1.0f, -sp134, 1.0f); + if (sp130 > 0.0f) { + Hu3DModelAmbSet(temp_r31->unk0, sp130, sp130, 1.0f); + } + HuPrcVSleep(); + } + Hu3DModelScaleSet(temp_r31->unk6, 1.0f, 1.0f, 1.0f); + Hu3DModelScaleSet(temp_r31->unk8, 1.0f, -1.0f, 1.0f); + while (1) { + HuPrcVSleep(); + } + case 4: + CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[temp_r31->unk24].character], temp_r31->unkC[0], 0.0f, 5.0f, 0x40000001U); + Hu3DMotionShiftSet(temp_r31->unk2, temp_r31->unk18[0], 0.0f, 5.0f, 0x40000001); + var_r27 = 30; + sp12C = fn_1_27C4(var_r27, lbl_1_bss_778, temp_r31->unk54.y); + + for (;var_r27 != 0; var_r27--) { + temp_r31->unk54.y += sp12C; + Hu3DModelRotSet(temp_r31->unk0, temp_r31->unk54.x, temp_r31->unk54.y, temp_r31->unk54.z); + Hu3DModelRotSet(temp_r31->unk2, temp_r31->unk54.x, temp_r31->unk54.y, temp_r31->unk54.z); + HuPrcVSleep(); + } + + while (lbl_1_bss_794 < 5) { + HuPrcVSleep(); + } + CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[temp_r31->unk24].character], temp_r31->unkC[5], 0.0f, 5.0f, 0U); + Hu3DMotionShiftSet(temp_r31->unk2, temp_r31->unk18[5], 0.0f, 5.0f, 0); + + while (1) { + HuPrcVSleep(); + } + } +} + +void fn_1_A01C(ModelData* model, ParticleData* particle, f32 (*matrix)[4]) { + HsfanimStruct01* var_r31; + f32 var_f29; + f32 var_f28; + f32 var_f30; + f32 var_f31; + s16 var_r25; + s16 var_r24; + s16 var_r26; + s16 var_r28; + s32 var_r27; + unkStruct* temp_r30; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + var_r31->unk14.x = var_r31->unk2C = 0.0f; + } + } + var_r31 = particle->unk_48; + + for (var_r26 = 0; var_r26 < 0x20; var_r26++) { + temp_r30 = lbl_1_bss_278[var_r26]; + if (temp_r30 && (temp_r30->unkA != 0)) { + for (var_r25 = 0, var_f30 = 0.0f; var_r25 < 4; var_r25++, var_f30 += 45.0f) { + for (var_r24 = 0, var_f31 = 0.0f; var_r24 < 8; var_r24++, var_f31 += 45.0f) { + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (var_r31->unk14.x == 0.0f) break; + } + if (var_r28 == particle->unk_30) break; + if (temp_r30->unkC == 1) { + var_f29 = 2.0f + (2.0f * frandf()); + var_f28 = 10.0f; + } else { + var_f29 = 1.0f + frandf(); + var_f28 = 3.0f; + } + var_r31->unk34.x = temp_r30->unk10.x + (var_f29 * (sind(var_f30) * cosd(var_f31))); + var_r31->unk34.y = temp_r30->unk10.y + (var_f29 * sind(var_f31)); + var_r31->unk34.z = (temp_r30->unk10.z + (var_f29 * (cosd(var_f30) * cosd(var_f31)))); + var_r31->unk08.x = (var_f28 * (sind(var_f30) * cosd(var_f31))); + var_r31->unk08.y = (var_f28 * sind(var_f31)); + var_r31->unk08.z = (var_f28 * (cosd(var_f30) * cosd(var_f31))); + var_r31->unk14.x = 30.0f; + if (temp_r30->unkC == 1) { + var_r31->unk2C = 20.0f + (2.0f * frandf()); + var_r31->unk14.y = 0.0f; + } else { + var_r31->unk2C = 15.0f; + var_r31->unk14.y = 0.0f; + } + var_r31->unk40.a = 0xFF; + var_r31->unk14.z = 20.0f; + } + } + temp_r30->unkA++; + } + } + var_r31 = particle->unk_48; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (var_r31->unk14.x != 0.0f) { + PSVECAdd(&var_r31->unk08, &var_r31->unk34, &var_r31->unk34); + var_r31->unk08.x *= 0.95f; + var_r31->unk08.z *= 0.95f; + var_r31->unk08.y -= 0.2f; + var_r31->unk2C += var_r31->unk14.y; + var_r27 = var_r31->unk40.a; + var_r27 -= var_r31->unk14.z; + if (var_r31->unk14.z > 3.0f) { + var_r31->unk14.z -= 1.0f; + } + if (var_r27 < 0) { + var_r27 = 0; + var_r31->unk14.x = 0.0f; + } + var_r31->unk40.a = var_r27; + if (var_r31->unk14.x == 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} + +void fn_1_A618(ModelData* model, ParticleData* particle, f32 (*matrix)[4]) { + HsfanimStruct01* var_r31; + f32 var_f31; + f32 var_f30; + f32 var_f29; + f32 var_f28; + s16 var_r26; + s16 var_r25; + s16 var_r29; + s32 var_r27; + unkStruct* temp_r28; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + var_r31->unk14.x = var_r31->unk2C = 0.0f; + } + } + var_r31 = particle->unk_48; + + for (var_r26 = 0; var_r26 < 0x20; var_r26++) { + temp_r28 = lbl_1_bss_278[var_r26]; + if (temp_r28 && (temp_r28->unkA != 0)) { + + for (var_r25 = 0, var_f28 = 0.0f; var_r25 < 9; var_r25++, var_f28 += 45.0f) { + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (var_r31->unk14.x == 0.0f) break; + } + if (var_r29 == particle->unk_30) break; + var_f31 = var_f28; + if (var_r25 < 8) { + var_f30 = 1.0f + frandf(); + var_f29 = 2.0f; + } else { + var_f30 = var_f29 = 0.0f; + } + var_r31->unk34.x = temp_r28->unk10.x + (var_f30 * sind(var_f31)); + var_r31->unk34.y = temp_r28->unk10.y + (10.0f * frandf()); + var_r31->unk34.z = temp_r28->unk10.z + (var_f30 * cosd(var_f31)); + var_r31->unk08.x = var_f29 * sind(var_f31); + var_r31->unk08.y = -1.0f + frandf(); + var_r31->unk08.z = var_f29 * cosd(var_f31); + var_r31->unk14.x = 30.0f; + var_r31->unk2C = 15.0f; + var_r31->unk14.y = 1.5f; + var_r31->unk40.a = 0xC8; + var_r31->unk14.z = 17.0f; + } + temp_r28->unkA = 0; + } + } + var_r31 = particle->unk_48; + for (var_r29 = 0; var_r29 < particle->unk_30; var_r29++, var_r31++) { + if (0.0f != var_r31->unk14.x) { + PSVECAdd(&var_r31->unk08, &var_r31->unk34, &var_r31->unk34); + var_r31->unk08.x *= 0.95f; + var_r31->unk08.z *= 0.95f; + var_r31->unk08.y -= 0.2f; + var_r31->unk2C += var_r31->unk14.y; + var_r27 = var_r31->unk40.a; + var_r27 -= var_r31->unk14.z; + if (var_r31->unk14.z > 3.0f) { + var_r31->unk14.z -= 1.0f; + } + if (var_r27 < 0) { + var_r27 = 0; + var_r31->unk14.x = 0.0f; + } + var_r31->unk40.a = var_r27; + if (0.0f == var_r31->unk14.x) { + var_r31->unk2C = 0.0f; + } + } + } +} + +void fn_1_AA88(ModelData* model, ParticleData* particle, f32 (*matrix)[4]) { + HsfanimStruct01* var_r31; + f32 var_f31; + s16 var_r27; + s16 var_r28; + unkStruct2* temp_r29; + + if (particle->unk_34 == 0) { + var_r31 = particle->unk_48; + + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + var_r31->unk14.x = var_r31->unk2C = 0.0f; + } + } + var_r31 = particle->unk_48; + + for (var_r27 = 0; var_r27 < 6; var_r27++) { + temp_r29 = &lbl_1_bss_33C[var_r27]; + if (temp_r29->unk20 == 0) continue; + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (var_r31->unk14.x == 0.0f) break; + } + if (var_r28 == particle->unk_30) break; + var_r31->unk34.x = temp_r29->unk2C.x + (-100.0 * cosd(temp_r29->unk38.y)); + var_r31->unk34.y = 98.0f + temp_r29->unk2C.y; + var_r31->unk34.z = temp_r29->unk2C.z + (100.0 * sind(temp_r29->unk38.y)); + var_r31->unk14.x = 30.0f; + var_r31->unk2C = 80.0f; + var_r31->unk14.y = 5.0f; + var_r31->unk40.a = 0xC8; + var_r31->unk14.z = 17.0f; + temp_r29->unk20 = 0; + } + var_r31 = particle->unk_48; + + for (var_r28 = 0; var_r28 < particle->unk_30; var_r28++, var_r31++) { + if (0.0f != var_r31->unk14.x) { + var_r31->unk2C += var_r31->unk14.y; + if (var_r31->unk14.y > 2.0f) { + var_r31->unk14.y -= 0.2f; + } + var_f31 = var_r31->unk40.a; + var_f31 -= var_r31->unk14.z; + if (var_r31->unk14.z > 3.0f) { + var_r31->unk14.z -= 1.0f; + } + if (var_f31 < 0.0f) { + var_f31 = 0.0f; + var_r31->unk14.x = 0.0f; + } + var_r31->unk40.a = var_f31; + if (var_r31->unk14.x == 0.0f) { + var_r31->unk2C = 0.0f; + } + } + } +} + +void fn_1_ADC8(void) { + Vec sp14; + Vec sp8; + f32 var_f31; + void* temp_r28; + Process* var_r29; + s32 var_r31; + unkStruct3* temp_r30; + + fn_1_6EC(1465.0f, 770.0f, -2400.0f, 0x588); + HuAudFXPlay(0x58B); + + var_r31 = 0; + var_f31 = Hu3DMotionMaxTimeGet(lbl_1_bss_79E); + for (; var_f31; var_r31++, var_f31--) { + if (var_r31 == 0x33) { + Hu3DModelAttrReset(lbl_1_bss_798[0], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_798[0], 1); + Hu3DModelPosSet(lbl_1_bss_798[0], 1465.0f, 770.0f, -2400.0f); + } + if (var_r31 == 0x47) { + Hu3DModelAttrReset(lbl_1_bss_798[1], 0x40000002); + Hu3DModelAttrReset(lbl_1_bss_798[1], 1); + Hu3DModelPosSet(lbl_1_bss_798[1], 1531.0f, 773.0f, -2380.0f); + } + if (var_r31 == 0x82) { + temp_r28 = fn_1_6EC(1465.0f, 770.0f, -2400.0f, 0x580); + var_r29 = HuPrcChildCreate(fn_1_7BC, 0x2000, 0x1000, 0, HuPrcCurrentGet()); + var_r29->user_data = temp_r28; + } + if (var_f31 == 90.0f) { + for (var_r31 = 0; var_r31 < 4; var_r31++) { + temp_r30 = &lbl_1_bss_4D4[var_r31]; + CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[var_r31].character], temp_r30->unkC[3], 0.0f, 5.0f, 0U); + Hu3DMotionShiftSet(temp_r30->unk2, temp_r30->unk18[3], 0.0f, 5.0f, 0U); + } + } + HuPrcVSleep(); + } + HuPrcSleep(30); + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + temp_r30 = &lbl_1_bss_4D4[var_r31]; + HuAudPlayerVoicePlay(temp_r30->unk24, 0x128); + CharModelMotionShiftSet(lbl_1_data_0[GWPlayerCfg[var_r31].character], temp_r30->unkC[4], 0.0f, 5.0f, 0U); + Hu3DMotionShiftSet(temp_r30->unk2, temp_r30->unk18[4], 0.0f, 5.0f, 0U); + } +} + +void fn_1_B13C(void) { + HuPrcSleep(0x1E); +} + +void fn_1_B160(void) { + while (1) { + while (1) { + if (omSysExitReq != 1) break; + WipeCreate(2, 0, 0x3C); + HuAudFadeOut(0x3E8); + HuPrcSleep(0x3C); + MGSeqKillAll(); + omOvlReturnEx(1, 1); + while (1) { + HuPrcVSleep(); + } + } + HuPrcVSleep(); + } +} + +void fn_1_B1C0(void) { + s16 temp_r27; + s16 temp_r30; + s16 var_r29; + s32 var_r26; + s32 var_r28; + s32 var_r31; + + lbl_1_bss_794 = 0; + + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_780[var_r31] = -1; + } + HuAudFXPlay(0x57F); + fn_1_6EC(1465.0f, 770.0f, -2400.0f, 0x589); + HuPrcSleep(1); + Hu3DModelAttrSet(lbl_1_bss_2F8.unk0, 0x40000002); + Hu3DModelClusterAttrSet(lbl_1_bss_2F8.unk0, 0, -0x3FFFFFFE); + Hu3DModelAttrSet(lbl_1_bss_2F8.unk2, 0x40000002); + Hu3DModelClusterAttrSet(lbl_1_bss_2F8.unk2, 0, -0x3FFFFFFE); + HuPrcSleep(1.0f + wipeData.duration); + fn_1_ADC8(); + HuPrcSleep(30); + lbl_1_bss_794 = 1; + while (lbl_1_bss_794 == 1) { + HuPrcVSleep(); + } + var_r26 = HuAudSeqPlay(0x43); + temp_r30 = MGSeqCreate(3, 0); + + while (MGSeqStatGet(temp_r30) != 0) { + HuPrcVSleep(); + } + var_r29 = 0xE4B; + temp_r27 = MGSeqCreate(1, var_r29 / 60, -1, -1); + lbl_1_bss_794 = 3; + + while (1) { + for (var_r31 = 0, var_r28 = 0; var_r31 < 4; var_r31++) { + if (lbl_1_bss_4D4[var_r31].unk30 != 3) { + var_r28++; + } + } + if ((var_r28 <= 1) || (var_r29 < 0x3B)) break; + MGSeqParamSet(temp_r27, 1, var_r29-- / 60); + lbl_1_bss_790++; + HuPrcVSleep(); + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (lbl_1_bss_4D4[var_r31].unk30 != 3) { + lbl_1_bss_780[var_r31] = GWPlayerCfg[var_r31].character; + if (_CheckFlag(0x1000C) == 0) { + GWPlayer[var_r31].coin_win = 10; + } + } + } + for (var_r31 = 0; var_r31 < 4; var_r31++) { + lbl_1_bss_4D4[var_r31].unk30 = 4; + } + lbl_1_bss_794 = 4; + HuAudSeqFadeOut(var_r26, 0x64); + MGSeqParamSet(temp_r27, 2, -1); + temp_r30 = MGSeqCreate(3, 1); + + while (MGSeqStatGet(temp_r30) != 0) { + HuPrcVSleep(); + } + HuPrcSleep(30); + lbl_1_bss_794 = 5; + for (var_r31 = 0; var_r31 < 4; var_r31++) { + if (lbl_1_bss_780[var_r31] != -1) break; + } + if (var_r31 < 4) { + HuAudSStreamPlay(1); + temp_r30 = MGSeqCreate(5, 3, lbl_1_bss_780[0], lbl_1_bss_780[1], lbl_1_bss_780[2], lbl_1_bss_780[3]); + } else { + HuAudSStreamPlay(4); + temp_r30 = MGSeqCreate(3, 2); + } + HuPrcSleep(0xD2); + WipeCreate(2, 0, 0x3C); + HuPrcSleep(0x3C); + HuAudFadeOut(1); + MGSeqKillAll(); + omOvlReturnEx(1, 1); + while (1) { + HuPrcVSleep(); + } } \ No newline at end of file