diff --git a/config/GMPE01_00/rels/m431Dll/symbols.txt b/config/GMPE01_00/rels/m431Dll/symbols.txt index 24174c15..10f102a4 100644 --- a/config/GMPE01_00/rels/m431Dll/symbols.txt +++ b/config/GMPE01_00/rels/m431Dll/symbols.txt @@ -94,81 +94,81 @@ fn_1_B4F8 = .text:0x0000B4F8; // type:function size:0x38 fn_1_B530 = .text:0x0000B530; // type:function size:0x28 _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:0x4 data:float -lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 data:float -lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 data:float -lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 data:float -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:0x8 data:double -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_90 = .rodata:0x00000090; // type:object size:0x8 data:double -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_AC = .rodata:0x000000AC; // 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:0x8 data:double -lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 data:float -lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 data:float -lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 data:float -lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 data:double -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:0x4 data:float -lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 data:float -lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 data:float -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 data:double -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_128 = .rodata:0x00000128; // type:object size:0x8 data:double -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x1 data:byte -lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 data:float -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:0x4 data:float -lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 data:float -lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 data:double -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 data:double -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 data:double -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:0x8 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:0x4 scope:local data:float +lbl_1_rodata_44 = .rodata:0x00000044; // type:object size:0x4 scope:local data:float +lbl_1_rodata_48 = .rodata:0x00000048; // type:object size:0x4 scope:local data:float +lbl_1_rodata_4C = .rodata:0x0000004C; // type:object size:0x4 scope:local data:float +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:0x8 scope:local data:double +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_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +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_AC = .rodata:0x000000AC; // 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:0x8 scope:local data:double +lbl_1_rodata_C0 = .rodata:0x000000C0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C4 = .rodata:0x000000C4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_C8 = .rodata:0x000000C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_D0 = .rodata:0x000000D0; // type:object size:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_F4 = .rodata:0x000000F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_F8 = .rodata:0x000000F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +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_128 = .rodata:0x00000128; // type:object size:0x8 scope:local data:double +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x1 scope:local data:byte +lbl_1_rodata_134 = .rodata:0x00000134; // type:object size:0x4 scope:local data:float +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:0x4 scope:local data:float +lbl_1_rodata_14C = .rodata:0x0000014C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_150 = .rodata:0x00000150; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x8 scope:local data:double +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x8 scope:local data:double +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data:double +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:0x8 scope:local data:float lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 data:float lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 data:float lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float @@ -202,7 +202,8 @@ lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 data:double lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 data:float 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 +lbl_1_data_18 = .data:0x00000018; // type:object size:0x4 +lbl_1_data_1C = .data:0x0000001C; // type:object size:0xC lbl_1_data_28 = .data:0x00000028; // type:object size:0xC lbl_1_data_34 = .data:0x00000034; // type:object size:0xC lbl_1_data_40 = .data:0x00000040; // type:object size:0xC @@ -214,12 +215,13 @@ lbl_1_data_114 = .data:0x00000114; // type:object size:0x10 lbl_1_data_124 = .data:0x00000124; // type:object size:0x10 lbl_1_data_134 = .data:0x00000134; // type:object size:0x14 lbl_1_data_148 = .data:0x00000148; // type:object size:0x14 -lbl_1_data_15C = .data:0x0000015C; // type:object size:0x6 data:string +lbl_1_data_15C = .data:0x0000015C; // type:object size:0x6 scope:local data:string lbl_1_data_162 = .data:0x00000162; // type:object size:0x2 data:2byte -lbl_1_data_164 = .data:0x00000164; // type:object size:0x10 data:4byte -lbl_1_data_174 = .data:0x00000174; // type:object size:0x10 data:string -lbl_1_data_184 = .data:0x00000184; // type:object size:0x26 data:string -lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x24 data:string +lbl_1_data_164 = .data:0x00000164; // type:object size:0x4 data:4byte +lbl_1_data_168 = .data:0x00000168; // type:object size:0xC data:float +lbl_1_data_174 = .data:0x00000174; // type:object size:0x10 scope:local data:string +lbl_1_data_184 = .data:0x00000184; // type:object size:0x26 scope:local data:string +lbl_1_data_1AA = .data:0x000001AA; // type:object size:0x24 scope:local data:string lbl_1_data_1D0 = .data:0x000001D0; // type:object size:0x4 data:float lbl_1_data_1D4 = .data:0x000001D4; // type:object size:0x20 lbl_1_data_1F4 = .data:0x000001F4; // type:object size:0x20 diff --git a/configure.py b/configure.py index b86ac90e..39d5c169 100644 --- a/configure.py +++ b/configure.py @@ -1071,7 +1071,7 @@ config.libs = [ "m431Dll", objects={ Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m431Dll/main.c"), + Object(Matching, "REL/m431Dll/main.c"), Object(NonMatching, "REL/m431Dll/object.c"), }, ), diff --git a/include/REL/m431Dll.h b/include/REL/m431Dll.h new file mode 100644 index 00000000..a886a409 --- /dev/null +++ b/include/REL/m431Dll.h @@ -0,0 +1,49 @@ +#ifndef M431DLL_H +#define M431DLL_H + +#include "game/object.h" + +typedef struct bss_12C_inner { + Vec unk0; + float unkC; + s8 unk10; +} Bss12CInner; + +typedef struct bss_12c_struct { + s16 unk0[2]; + u8 unk4[0x8]; + Vec unkC; + u8 unk18[4]; + Bss12CInner unk1C[2]; + u8 unk44[0xF0]; + s16 unk134[2]; + s16 unk138[2]; +} Bss12CStruct; + +typedef struct bss_61C_work { + u8 unk0[0x4]; + s16 unk4; + s16 unk6[2]; + s16 unkA; + u8 unkC[8]; + struct bss_61C_work *unk14; + u8 unk18[0x46]; + s16 unk5E[8]; + s16 unk6E; + s16 unk70; + s16 unk72; + u8 unk74[0x44]; +} Bss61CWork; + +extern Bss12CStruct lbl_1_bss_12C[4]; +extern omObjData *lbl_1_bss_61C[4]; +extern float lbl_1_data_1D0; + +void fn_1_7ABC(Process *objman); +s32 fn_1_7FB8(s16 arg0); +void fn_1_A7D0(s16 arg0); +void fn_1_A904(s16 arg0); + +s32 fn_1_8474(s16 arg0); + +#endif diff --git a/include/game/hsfdraw.h b/include/game/hsfdraw.h index 6af28ca4..12d6e179 100755 --- a/include/game/hsfdraw.h +++ b/include/game/hsfdraw.h @@ -49,7 +49,7 @@ void Hu3DDrawPreInit(void); void Hu3DDraw(ModelData *arg0, Mtx arg1, Vec *arg2); s32 ObjCullCheck(HsfData *arg0, HsfObject *arg1, Mtx arg2); void Hu3DDrawPost(void); -void MakeDisplayList(s16 arg0, HsfData *arg1); +void MakeDisplayList(s16 arg0, u32 arg1); HsfConstData *ObjConstantMake(HsfObject *arg0, u32 arg1); void mtxTransCat(Mtx arg0, float arg1, float arg2, float arg3); void mtxRotCat(Mtx arg0, float arg1, float arg2, float arg3); diff --git a/include/game/hsfman.h b/include/game/hsfman.h index 7b25cfd9..0c7ee048 100644 --- a/include/game/hsfman.h +++ b/include/game/hsfman.h @@ -32,8 +32,8 @@ typedef struct model_data { u16 unk_26; u16 unk_28[8]; s16 unk_38[8]; - HsfData *unk_48; - HsfData *unk_4C; + u32 unk_48; + u32 unk_4C; u32 attr; u32 motion_attr; Point3d unk_58; diff --git a/src/REL/m431Dll/main.c b/src/REL/m431Dll/main.c new file mode 100644 index 00000000..7d30afcd --- /dev/null +++ b/src/REL/m431Dll/main.c @@ -0,0 +1,2253 @@ +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/msm.h" + +#include "game/object.h" +#include "game/objsub.h" +#include "game/audio.h" +#include "game/wipe.h" +#include "game/pad.h" + +#include "game/sprite.h" +#include "game/minigame_seq.h" +#include "game/gamework_data.h" + +#include "ext_math.h" + +#include "REL/m431Dll.h" + +#include "rel_sqrt_consts.h" + +#define rand16() ((rand8() << 8)|(rand8())) + +typedef struct bss_5C_struct { + s16 unk0[6]; + s16 unkC[2]; + s16 unk10; + s16 unk12; + s16 unk14; + s16 unk16; + float unk18; + float unk1C; + float unk20; + float unk24; + float unk28[2]; + float unk30; + float unk34; +} Bss5CStruct; + +typedef struct camera_view_params { + float zoom; + Vec pos; + Vec rot; +} CameraViewParams; + +Bss5CStruct lbl_1_bss_5C; +s16 lbl_1_bss_34[20]; +omObjData *lbl_1_bss_30; +omObjData *lbl_1_bss_2C; +s16 lbl_1_bss_28; +float lbl_1_bss_20[2]; +float lbl_1_bss_18[2]; +s16 lbl_1_bss_14; +s8 lbl_1_bss_12; +s16 lbl_1_bss_10; +s8 lbl_1_bss_E; +s16 lbl_1_bss_C; +s16 lbl_1_bss_A; +s16 lbl_1_bss_8; +s32 lbl_1_bss_4; +s8 lbl_1_bss_0; + +Vec lbl_1_data_0 = { 800, 1300, 1000 }; +Vec lbl_1_data_C = { 0, 0, 0 }; +GXColor lbl_1_data_18 = { 255, 255, 255, 255 }; +Vec lbl_1_data_1C = { 10, 45, 0}; +Vec lbl_1_data_28 = { 1300, 2500, 1300 }; +Vec lbl_1_data_34 = { 0, 1, 0 }; +Vec lbl_1_data_40 = { 0, 0, -1200 }; + +CameraViewParams lbl_1_data_4C[4] = { + { + 760, + { -324, -97, 0 }, + { -43, 0, 0 } + }, + { + 800, + { 325, -64, 0 }, + { -43, -20, 0 } + }, + { + 1460, + { 0, 57, 0 }, + { -37, 0, 0 } + }, + { + 880, + { -381, 25, 0 }, + { -14, 10, 0 } + } +}; + +s32 lbl_1_data_BC[3] = { + -32, + -2, + 28 +}; + +s32 lbl_1_data_C8[2] = { + 90, + 486 +}; + +void fn_1_424(omObjData *object); +void fn_1_A44(omObjData *object); +void fn_1_2110(omObjData *object); + + +void ModuleProlog(void) +{ + Vec sp2C; + Vec sp20; + Vec sp14; + Vec sp8; + Process *temp_r31; + LightData *temp_r30; + CameraData *temp_r29; + + Hu3DLightAllKill(); + lbl_1_bss_28 = Hu3DGLightCreateV(&lbl_1_data_0, &lbl_1_data_C, &lbl_1_data_18); + Hu3DGLightInfinitytSet(lbl_1_bss_28); + temp_r30 = &Hu3DGlobalLight[lbl_1_bss_28]; + temp_r30->unk_00 |= 0x8000; + sp2C.x = sp2C.y = sp2C.z = 0; + Hu3DGLightPosAimSetV(lbl_1_bss_28, &lbl_1_data_0, &sp2C); + Hu3DShadowCreate(45, 20, 10000); + Hu3DShadowTPLvlSet(0.425f); + Hu3DShadowPosSet(&lbl_1_data_28, &lbl_1_data_34, &lbl_1_data_40); + temp_r31 = omInitObjMan(50, 8192); + omGameSysInit(temp_r31); + HuAudSndGrpSet(56); + Hu3DCameraCreate(1); + Hu3DCameraPerspectiveSet(1, 41.5, 5, 5000, 1.2f); + omAddObjEx(temp_r31, 32730, 0, 0, -1, omOutView); + temp_r29 = &Hu3DCamera[0]; + temp_r29->fov = -1; + sp14.x = 0; + sp14.y = 374; + sp14.z = 1086; + sp20.x = 0; + sp20.y = 568; + sp20.z = -1316; + sp8.z = sp20.x-sp14.x; + sp8.y = sp20.y-sp14.y; + sp8.x = sp20.z-sp14.z; + CRot.x = lbl_1_data_4C[0].rot.x; + CRot.y = lbl_1_data_4C[0].rot.y; + CRot.z = lbl_1_data_4C[0].rot.z; + Center.x = lbl_1_data_4C[0].pos.x; + Center.y = lbl_1_data_4C[0].pos.y; + Center.z = lbl_1_data_4C[0].pos.z; + CZoom = lbl_1_data_4C[0].zoom; + omAddObjEx(temp_r31, 1000, 0, 0, -1, fn_1_424); + lbl_1_bss_30 = omAddObjEx(temp_r31, 10, 9, 0, -1, fn_1_A44); + lbl_1_bss_2C = omAddObjEx(temp_r31, 50, 9, 9, -1, fn_1_2110); + Hu3DBGColorSet(0, 0, 0); + fn_1_7ABC(temp_r31); +} + +void fn_1_49C(omObjData *object); + +void fn_1_424(omObjData *object) +{ + if(omSysExitReq || lbl_1_bss_0) { + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudSeqAllFadeOut(100); + object->func = fn_1_49C; + } +} + +void fn_1_71B8(s16 arg0); + +void fn_1_49C(omObjData *object) +{ + s16 i; + if(WipeStatGet()) { + return; + } + fn_1_71B8(lbl_1_bss_30->model[0]); + for(i=0; i<6; i++) { + fn_1_71B8(lbl_1_bss_5C.unk0[i]); + } + HuSprGrpKill(lbl_1_bss_30->model[1]); + HuSprGrpKill(lbl_1_bss_30->model[2]); + HuSprGrpKill(lbl_1_bss_30->model[3]); + MGSeqKillAll(); + HuAudFadeOut(1); + omOvlReturnEx(1, 1); + +} + +float fn_1_65CC(float arg0, float arg1, float arg2); + +u8 fn_1_57C(void) +{ + float temp_f31; + float temp_f30; + CameraViewParams *temp_r31; + s32 temp_r30; + temp_r31 = &lbl_1_data_4C[0]; + temp_r30 = 0; + lbl_1_bss_8++; + temp_f30 = lbl_1_bss_8/90.0f; + if(lbl_1_bss_8 > 90) { + lbl_1_bss_8 = 0; + temp_f30 = 1; + temp_r30 = 1; + } + temp_f31 = sind(90*temp_f30)*sind(90*temp_f30); + CZoom = fn_1_65CC(temp_r31[0].zoom, temp_r31[2].zoom, temp_f31); + Center.x = fn_1_65CC(temp_r31[0].pos.x, temp_r31[2].pos.x, temp_f31); + Center.y = fn_1_65CC(temp_r31[0].pos.y, temp_r31[2].pos.y, temp_f31); + Center.z = fn_1_65CC(temp_r31[0].pos.z, temp_r31[2].pos.z, temp_f31); + CRot.x = fn_1_65CC(temp_r31[0].rot.x, temp_r31[2].rot.x, temp_f31); + CRot.y = fn_1_65CC(temp_r31[0].rot.y, temp_r31[2].rot.y, temp_f31); + CRot.z = fn_1_65CC(temp_r31[0].rot.z, temp_r31[2].rot.z, temp_f31); + return temp_r30; +} + +typedef struct work_a44 { + u16 unk0; + s16 unk2; + s16 unk4; + s16 unk6[2]; + s16 unkA; + s32 unkC; + s16 unk10; + s16 unk12; + s16 unk14; + s16 unk16; +} WorkA44; + +s32 fn_1_7B0(void) +{ + float temp_f31; + float temp_f30; + float temp_f29; + float temp_f28; + CameraViewParams *temp_r31; + WorkA44 *temp_r30; + s32 temp_r29; + temp_r30 = lbl_1_bss_30->data; + temp_r31 = &lbl_1_data_4C[0]; + temp_r29 = 0; + lbl_1_bss_8++; + temp_f30 = lbl_1_bss_8/120.0f; + if(lbl_1_bss_8 > 120) { + lbl_1_bss_8 = 120; + temp_f30 = 1; + temp_r29 = 1; + } + temp_f31 = sind(90*temp_f30)*sind(90*temp_f30); + if(temp_r30->unk4 == 0) { + temp_f29 = temp_r31[3].pos.x; + temp_f28 = temp_r31[3].rot.y; + } else { + temp_f29 = -temp_r31[3].pos.x; + temp_f28 = -temp_r31[3].rot.y; + } + CZoom = fn_1_65CC(temp_r31[2].zoom, temp_r31[3].zoom, temp_f31); + Center.x = fn_1_65CC(temp_r31[2].pos.x, temp_f29, temp_f31); + Center.y = fn_1_65CC(temp_r31[2].pos.y, temp_r31[3].pos.y, temp_f31); + Center.z = fn_1_65CC(temp_r31[2].pos.z, temp_r31[3].pos.z, temp_f31); + CRot.x = fn_1_65CC(temp_r31[2].rot.x, temp_r31[3].rot.x, temp_f31); + CRot.y = fn_1_65CC(temp_r31[2].rot.y, temp_f28, temp_f31); + CRot.z = fn_1_65CC(temp_r31[2].rot.z, temp_r31[3].rot.z, temp_f31); + return temp_r29; +} + +typedef void (*unkHook72B4Data18)(struct unk_72B4_data_18 *); +typedef void (*unkHook72B4)(ModelData *, struct work_72B4 *, Mtx); + +typedef struct unk_72B4_data_18 { + Vec unk0; + Vec unkC; + char unk18[16]; + s16 unk28; + s16 unk2A; + s16 unk2C; + unkHook72B4Data18 unk30; + s16 unk34; + float unk38; + Vec unk3C; + Vec unk48; + s16 unk54; + s8 unk56; +} Unk72B4Data18; + +typedef struct work_72B4 { + s16 unk0; + u32 unk4; + u8 unk8; + unkHook72B4 unkC; + AnimData *unk10; + s16 unk14; + Unk72B4Data18 *unk18; + Vec *unk1C; + HsfVector2f *unk20; + GXColor *unk24; + void *unk28; + Vec unk2C[4]; + HsfVector2f *unk5C; + float unk60; + float unk64; +} Work72B4; + +void fn_1_6030(ModelData *arg0, Work72B4 *arg1, Mtx arg2); +s16 fn_1_6C74(AnimData *arg0, s16 arg1, float arg2, s16 arg3, s16 arg4); +void fn_1_7244(s16 arg0, unkHook72B4 arg1); + +void fn_1_10A4(omObjData *object); + +void fn_1_A44(omObjData *object) +{ + float temp_f31; + + s16 temp_r31; + s16 temp_r30; + s16 temp_r28; + + AnimData *temp_r27; + WorkA44 *temp_r26; + s16 temp_r25; + + AnimData *temp_r24; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(WorkA44), MEMORY_DEFAULT_NUM); + temp_r26 = object->data; + temp_r26->unk0 = 4; + temp_r26->unk6[0] = 0; + temp_r26->unkA = 900; + temp_r26->unk10 = -1; + temp_r27 = HuSprAnimRead(HuDataReadNum(0x3E001A, MEMORY_DEFAULT_NUM)); + object->model[0] = fn_1_6C74(temp_r27, 1024, 25, 64, 64); + fn_1_7244(object->model[0], fn_1_6030); + Hu3DModelLayerSet(object->model[0], 7); + temp_r30 = HuSprGrpCreate(4); + object->model[3] = temp_r30; + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001B, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 16, 0); + HuSprGrpMemberSet(temp_r30, 0, temp_r28); + HuSprAttrSet(temp_r30, 0, HUSPR_ATTR_DISPOFF); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001D, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 32, 0); + HuSprGrpMemberSet(temp_r30, 2, temp_r28); + HuSprAttrSet(temp_r30, 2, HUSPR_ATTR_DISPOFF); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001C, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 16, 0); + HuSprGrpMemberSet(temp_r30, 1, temp_r28); + HuSprAttrSet(temp_r30, 1, HUSPR_ATTR_DISPOFF); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61001D, MEMORY_DEFAULT_NUM)); + temp_r28 = HuSprCreate(temp_r27, 32, 0); + HuSprGrpMemberSet(temp_r30, 3, temp_r28); + HuSprAttrSet(temp_r30, 3, HUSPR_ATTR_DISPOFF); + temp_f31 = 288; + HuSprPosSet(temp_r30, 0, temp_f31-198, 64); + HuSprPosSet(temp_r30, 1, temp_f31+198, 64); + HuSprPosSet(temp_r30, 2, temp_f31-198, 64); + HuSprTPLvlSet(temp_r30, 2, 88); + HuSprColorSet(temp_r30, 2, 0, 0, 0); + HuSprPosSet(temp_r30, 3, temp_f31+198, 64); + HuSprTPLvlSet(temp_r30, 3, 88); + HuSprColorSet(temp_r30, 3, 0, 0, 0); + temp_r27 = HuSprAnimRead(HuDataReadNum(0x61000B, MEMORY_DEFAULT_NUM)); + temp_r24 = HuSprAnimRead(HuDataReadNum(0x61000A, MEMORY_DEFAULT_NUM)); + temp_r30 = HuSprGrpCreate(6); + object->model[1] = temp_r30; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r28 = HuSprCreate(temp_r27, 0, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[0]+lbl_1_data_BC[temp_r31], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + for(temp_r31=3; temp_r31<6; temp_r31++) { + temp_r25 = temp_r31-3; + temp_r28 = HuSprCreate(temp_r24, 8, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[0]+lbl_1_data_BC[temp_r25], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + temp_r30 = HuSprGrpCreate(6); + object->model[2] = temp_r30; + for(temp_r31=0; temp_r31<3; temp_r31++) { + temp_r28 = HuSprCreate(temp_r27, 0, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[1]+lbl_1_data_BC[temp_r31], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + for(temp_r31=3; temp_r31<6; temp_r31++) { + temp_r25 = temp_r31-3; + temp_r28 = HuSprCreate(temp_r24, 8, 0); + HuSprGrpMemberSet(temp_r30, temp_r31, temp_r28); + HuSprPosSet(temp_r30, temp_r31, lbl_1_data_C8[1]+lbl_1_data_BC[temp_r25], 63); + HuSprAttrSet(temp_r30, temp_r31, HUSPR_ATTR_DISPOFF); + } + (void)temp_r31; + (void)temp_r31; + object->func = fn_1_10A4; +} + +void fn_1_140C(omObjData *object); +u8 fn_1_1634(omObjData *object); +u8 fn_1_1A40(omObjData *object); +void fn_1_2000(s16 arg0); +void fn_1_2050(u16 arg0, u16 arg1); +u16 fn_1_2090(u16 arg0); +void fn_1_5480(void); + +void fn_1_10A4(omObjData *object) +{ + WorkA44 *temp_r31; + s16 temp_r30; + s16 temp_r28; + CameraData *temp_r27; + temp_r31 = object->data; + temp_r30 = 99; + switch(fn_1_2090(28)) { + case 4: + if(lbl_1_bss_E == 0) { + lbl_1_bss_E = 1; + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + temp_r27 = &Hu3DCamera[0]; + temp_r27->fov = 41.5f; + } + if(!WipeStatGet()) { + fn_1_2050(28, 8); + fn_1_2050(224, 32); + } + break; + + case 8: + if(fn_1_1634(object)) { + fn_1_2050(1, 0); + fn_1_2050(28, 12); + } + break; + + case 12: + if(temp_r31->unk10 != -1) { + temp_r28 = (temp_r31->unkA+59)/60; + if(temp_r28 < 0) { + temp_r28 = 0; + } + MGSeqParamSet(temp_r31->unk10, 1, temp_r28); + } + fn_1_140C(object); + if(fn_1_2090(224) == 128) { + if(lbl_1_bss_12C[0].unk138[0] == 3) { + temp_r30 = 0; + } else if(lbl_1_bss_12C[1].unk138[0] == 3) { + temp_r30 = 1; + } else { + if(temp_r31->unk6[0] == 5) { + if(lbl_1_bss_12C[0].unk138[0] == lbl_1_bss_12C[1].unk138[0]) { + temp_r30 = -1; + } else { + if(lbl_1_bss_12C[0].unk138[0] > lbl_1_bss_12C[1].unk138[0]) { + temp_r30 = 0; + } else { + temp_r30 = 1; + } + } + } + } + } + if(temp_r30 != 99) { + if(fn_1_2090(1) == 0) { + temp_r31->unk2 = MGSeqFinishCreate(); + HuAudSeqAllFadeOut(100); + } + fn_1_5480(); + fn_1_2000(temp_r30); + fn_1_2050(1, 1); + if(temp_r31->unk0 & 0x2) { + if(temp_r30 == -1) { + lbl_1_bss_A = 1; + } + fn_1_2050(28, 16); + } + if(temp_r30 != -1) { + fn_1_8474(temp_r30^1); + } else { + fn_1_8474(0); + fn_1_8474(1); + } + } + break; + + case 16: + if(fn_1_1A40(object)) { + fn_1_2050(28, 20); + } + break; + + case 20: + if(++lbl_1_bss_C > 210.0f) { + lbl_1_bss_0 = 1; + } + break; + } +} + +void fn_1_140C(omObjData *object) +{ + float temp_f31; + float temp_f30; + WorkA44 *temp_r31 = object->data; + if((temp_r31->unk0 & 0x300) == 0) { + return; + } + temp_r31->unk12++; + temp_f31 = temp_r31->unk12/18.0f; + if(temp_r31->unk12 > 18.0f) { + temp_r31->unk12 = 0; + temp_f31 = 1.0f; + temp_r31->unk12 = 18; + temp_r31->unk0 &= ~0x300; + } + temp_f30 = 1.0-cosd(90.0f*temp_f31); + + temp_f31 = 1.0+sind(180.0f*temp_f31); + HuSprAttrReset(lbl_1_bss_30->model[temp_r31->unk6[1]+1], temp_r31->unk16, HUSPR_ATTR_DISPOFF); + HuSprScaleSet(lbl_1_bss_30->model[temp_r31->unk6[1]+1], temp_r31->unk16, temp_f31, temp_f31); + HuSprTPLvlSet(lbl_1_bss_30->model[temp_r31->unk6[1]+1], temp_r31->unk16, temp_f30); + +} + +void fn_1_2AB0(s16 arg0); + +u8 fn_1_1634(omObjData *object) +{ + WorkA44 *temp_r30 = object->data; + s32 temp_r29; + s32 temp_r27; + s32 temp_r26; + switch(lbl_1_bss_A) { + case 0: + if(fn_1_2090(224) == 64) { + fn_1_2050(1, 1); + lbl_1_bss_A++; + } + break; + + case 1: + if(fn_1_57C()) { + lbl_1_bss_A++; + } + break; + + case 2: + temp_r30->unk2 = MGSeqStartCreate(); + temp_r30->unkC = -1; + lbl_1_bss_A++; + break; + + case 3: + if(temp_r30->unk2 != -1) { + temp_r26 = MGSeqStatGet(temp_r30->unk2); + if((temp_r26 & 0x10) && temp_r30->unkC == -1) { + temp_r30->unkC = HuAudSeqPlay(72); + } + } + if(temp_r30->unk2 == -1 || temp_r26 == 0) { + temp_r27 = object->model[1]; + for(temp_r29=3; temp_r29<6; temp_r29++) { + HuSprAttrReset(temp_r27, temp_r29, HUSPR_ATTR_DISPOFF); + } + temp_r27 = object->model[2]; + for(temp_r29=3; temp_r29<6; temp_r29++) { + HuSprAttrReset(temp_r27, temp_r29, HUSPR_ATTR_DISPOFF); + } + temp_r27 = object->model[3]; + for(temp_r29=0; temp_r29<4; temp_r29++) { + HuSprAttrReset(temp_r27, temp_r29, HUSPR_ATTR_DISPOFF); + } + fn_1_2AB0(999); + lbl_1_bss_A = 0; + + return 1; + } + break; + } + return 0; +} + +u8 fn_1_1A40(omObjData *object) +{ + WorkA44 *temp_r30; + Bss12CStruct *temp_r29; + s32 temp_r28; + s32 temp_r25; + temp_r30 = object->data; + switch(lbl_1_bss_A) { + case 0: + temp_r28 = fn_1_7FB8(temp_r30->unk4); + fn_1_8474(temp_r30->unk4^1); + temp_r28 &= fn_1_7B0(); + if((u8)temp_r28) { + lbl_1_bss_4 = 1; + fn_1_A7D0(temp_r30->unk4); + HuAudSStreamPlay(1); + lbl_1_bss_C = 0; + lbl_1_bss_A++; + } + break; + + case 1: + if(temp_r30->unk4 == -1) { + temp_r28 = fn_1_8474(0); + temp_r25 = fn_1_8474(1); + if((u8)temp_r28 == 0 || (u8)temp_r25 == 0) { + return 0; + } + if(temp_r30->unk2 == -1 || !MGSeqStatGet(temp_r30->unk2)) { + temp_r30->unk2 = -1; + lbl_1_bss_4 = 1; + fn_1_A904(0); + fn_1_A904(1); + HuAudSStreamPlay(4); + lbl_1_bss_A++; + } + } else { + if(++lbl_1_bss_C > 1) { + lbl_1_bss_A++; + } + } + break; + + case 2: + if(temp_r30->unk4 != -1) { + temp_r29 = &lbl_1_bss_12C[temp_r30->unk4]; + temp_r30->unk2 = MGSeqWinCreate(GWPlayerCfg[temp_r29->unk0[0]].character, + GWPlayerCfg[temp_r29->unk0[1]].character, + -1, + -1); + GWPlayerCoinWinAdd(temp_r29->unk0[0], 10); + GWPlayerCoinWinAdd(temp_r29->unk0[1], 10); + } else { + temp_r30->unk2 = MGSeqDrawCreate(); + } + lbl_1_bss_A++; + break; + + case 3: + lbl_1_bss_A = lbl_1_bss_C = 0; + return 1; + + default: + break; + + } + return 0; +} + +void fn_1_2000(s16 arg0) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + if(arg0 == -1 || temp_r31->unk6[1] == -1) { + temp_r31->unk0 |= 0x2; + } + temp_r31->unk4 = arg0; +} + +void fn_1_2050(u16 arg0, u16 arg1) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + temp_r31->unk0 &= ~arg0; + temp_r31->unk0 |= arg1; +} + +u16 fn_1_2090(u16 arg0) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + if(!temp_r31) { + return 0; + } + return temp_r31->unk0 & arg0; +} + +void fn_1_20D0(s16 arg0) +{ + WorkA44 *temp_r31 = lbl_1_bss_30->data; + temp_r31->unk0 |= 0x100; + temp_r31->unk12 = 0; + temp_r31->unk16 = arg0; +} + +s32 lbl_1_data_114[2][2] = { + 0x003E0001, + 0x003E0003, + 0x003E0005, + 0x003E0006 +}; + +s32 lbl_1_data_124[2][2] = { + 0x003E0007, + 0x003E0008, + 0x003E0009, + 0x003E000A +}; + +s32 lbl_1_data_134[5] = { + 0x003E000C, + 0x003E000D, + 0x003E000E, + 0x003E000F, + 0x003E0010 +}; + +s32 lbl_1_data_148[5] = { + 0x003E001C, + 0x003E001D, + 0x003E001E, + 0x003E001F, + 0x003E0020 +}; + +typedef struct unk2110_obj { + u32 unk0; + float unk4; + float unk8; + Vec unkC; + s16 unk18; + s16 unk1A; + s16 unk1C; + s16 unk1E; + float unk20; +} Unk2110Obj; + +typedef struct work_2110 { + float unk0; + Unk2110Obj unk4[10]; + s16 unk16C[10]; +} Work2110; + +void fn_1_2AC0(omObjData *object); + +void fn_1_48D0(Work2110 *arg0); +void fn_1_498C(s16 arg0, Work2110 *arg1); + +void fn_1_2110(omObjData *object) +{ + float temp_f31; + float temp_f30; + float temp_f29; + s16 temp_r31; + Unk2110Obj *temp_r29; + Work2110 *temp_r28; + s16 temp_r27; + AnimData *temp_r26; + s16 temp_r25; + + object->stat |= 0x100; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, 2*sizeof(Work2110), MEMORY_DEFAULT_NUM); + temp_r28 = object->data; + object->model[0] = Hu3DModelCreateFile(0x3E0000); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DModelScaleSet(object->model[0], 1.2f, 1.2f, 1.2f); + temp_r31 = Hu3DModelCreateFile(0x3E0011); + Hu3DModelAttrSet(temp_r31, 0x40000001); + Hu3DModelLayerSet(temp_r31, 0); + Hu3DMotionSpeedSet(temp_r31, 0.25f); + temp_r31 = Hu3DModelCreateFile(0x3E0012); + Hu3DModelAttrSet(temp_r31, 0x40000001); + Hu3DModelLayerSet(temp_r31, 0); + Hu3DMotionSpeedSet(temp_r31, 0.25f); + temp_r31 = Hu3DModelCreateFile(0x3E0013); + object->model[5] = temp_r31; + object->motion[0] = Hu3DJointMotionFile(temp_r31, 0x3E0014); + object->motion[1] = Hu3DJointMotionFile(temp_r31, 0x3E0015); + object->motion[2] = Hu3DJointMotionFile(temp_r31, 0x3E0016); + object->motion[3] = Hu3DJointMotionFile(temp_r31, 0x3E0017); + object->motion[4] = Hu3DJointMotionFile(temp_r31, 0x3E0014); + object->motion[5] = Hu3DJointMotionFile(temp_r31, 0x3E0018); + object->motion[6] = Hu3DJointMotionFile(temp_r31, 0x3E0019); + Hu3DModelPosSet(temp_r31, 0, 0, -230); + Hu3DModelShadowSet(temp_r31); + Hu3DModelAttrSet(temp_r31, 0x40000001); + Hu3DMotionSet(temp_r31, object->motion[0]); + for(temp_r31=0; temp_r31<2; temp_r31++, temp_r28++) { + temp_r25 = Hu3DModelCreateFile(lbl_1_data_114[0][temp_r31]); + temp_f30 = (temp_r31 == 0) ? -317.0f : 317.0f; + temp_f31 = 0; + temp_f29 = 100; + Hu3DModelPosSet(temp_r25, temp_f30, temp_f31, temp_f29); + object->model[temp_r31+1] = Hu3DModelCreateFile(0x3E0002); + temp_f30 = (temp_r31 == 0) ? -317.0f : 317.0f; + temp_f31 = 0; + temp_f29 = 100; + Hu3DModelPosSet(object->model[temp_r31+1], temp_f30, temp_f31, temp_f29); + Hu3DModelAttrSet(object->model[temp_r31+1], 0x40000002); + + object->model[temp_r31+3] = Hu3DModelCreateFile(lbl_1_data_114[1][temp_r31]); + temp_f31 = 45; + Hu3DModelPosSet(object->model[temp_r31+3], temp_f30, temp_f31, temp_f29); + Hu3DModelRotSet(object->model[temp_r31+3], 0, lbl_1_data_1D0, 0); + for(temp_r27 = 0, temp_r29 = &temp_r28->unk4[0]; temp_r27<10; temp_r27++, temp_r29++) { + if(fmod((float)temp_r27, 2)) { + if(temp_r27 == 1) { + temp_r29->unk1E = Hu3DModelCreateFile(lbl_1_data_124[temp_r31][0]); + } else { + temp_r29->unk1E = Hu3DModelLink(temp_r28->unk4[1].unk1E); + } + } else { + if(temp_r27 == 0) { + temp_r29->unk1E = Hu3DModelCreateFile(lbl_1_data_124[temp_r31][1]); + } else { + temp_r29->unk1E = Hu3DModelLink(temp_r28->unk4[0].unk1E); + } + } + Hu3DModelPosSet(temp_r29->unk1E, 0, -500, 0); + if(temp_r27 == 0) { + temp_r29->unk1C = Hu3DModelCreateFile(0x3E000B); + } else { + temp_r29->unk1C = Hu3DModelLink(temp_r28->unk4[0].unk1C); + } + Hu3DData[temp_r29->unk1C].pos.y = 1000; + Hu3DModelAttrSet(temp_r29->unk1C, 1); + temp_r29->unk0 = 0; + temp_r29->unk4 = lbl_1_data_1D0+(36.0f*temp_r27); + } + temp_r28->unk0 = 0; + fn_1_48D0(temp_r28); + fn_1_498C(temp_r31, temp_r28); + } + for(temp_r31=0; temp_r31<20; temp_r31++) { + if(temp_r31 < 5) { + lbl_1_bss_34[temp_r31] = Hu3DModelCreateFile(lbl_1_data_134[temp_r31]); + } else { + temp_r27 = fmod((float)temp_r31, 5); + lbl_1_bss_34[temp_r31] = Hu3DModelLink(lbl_1_bss_34[temp_r27]); + } + Hu3DModelPosSet(lbl_1_bss_34[temp_r31], 0, -500, 0); + } + Hu3DModelShadowMapObjSet(object->model[0], "field"); + Hu3DModelShadowMapSet(object->model[1]); + Hu3DModelShadowMapSet(object->model[2]); + temp_r26 = HuSprAnimRead(HuDataReadNum(0x3E001B, MEMORY_DEFAULT_NUM)); + lbl_1_bss_5C.unk0[0] = fn_1_6C74(temp_r26, 1, 140, 0, 0); + Hu3DModelLayerSet(lbl_1_bss_5C.unk0[0], 7); + for(temp_r31=0; temp_r31<5; temp_r31++) { + temp_r26 = HuSprAnimRead(HuDataReadNum(lbl_1_data_148[temp_r31], MEMORY_DEFAULT_NUM)); + lbl_1_bss_5C.unk0[temp_r31+1] = fn_1_6C74(temp_r26, 2, 45, 0, 0); + Hu3DModelLayerSet(lbl_1_bss_5C.unk0[temp_r31+1], 7); + } + object->func = fn_1_2AC0; +} + +void fn_1_2AB0(s16 arg0) +{ + lbl_1_bss_10 = arg0; +} + +void fn_1_2C94(Work2110 *arg0); +void fn_1_30E0(Work2110 *arg0); +void fn_1_3540(Work2110 *arg0); +void fn_1_3D7C(Work2110 *arg0); +void fn_1_4028(Work2110 *arg0); +void fn_1_5708(void); + +void fn_1_2AC0(omObjData *object) +{ + Work2110 *temp_r31 = object->data; + if(!fn_1_2090(1)) { + if(fn_1_2090(28) == 12 || fn_1_2090(28) == 8) { + switch(fn_1_2090(224)) { + case 32: + fn_1_2C94(temp_r31); + break; + + case 64: + fn_1_30E0(temp_r31); + break; + + case 96: + fn_1_3540(temp_r31); + break; + + case 128: + if(fn_1_2090(28) == 12) { + fn_1_3D7C(temp_r31); + } + break; + + case 0: + fn_1_4028(temp_r31); + break; + } + fn_1_498C(0, &temp_r31[0]); + fn_1_498C(1, &temp_r31[1]); + } + } + fn_1_5708(); +} + +u16 lbl_1_data_162 = 1; + +void fn_1_4798(Work2110 *arg0); + +void fn_1_2C94(Work2110 *arg0) +{ + float temp_f31; + float temp_f30; + Unk2110Obj *temp_r31; + s16 temp_r29; + s16 temp_r28; + WorkA44 *temp_r26; + temp_r26 = lbl_1_bss_30->data; + + switch(lbl_1_data_162) { + case 0: + if(lbl_1_bss_10 == 1) { + HuAudFXPlay(1670); + } + lbl_1_bss_10++; + temp_f31 = lbl_1_bss_10/60.0f; + if(temp_f31 >= 1.0f) { + temp_r26->unkA = 900; + lbl_1_bss_10 = 0; + temp_f31 = 1; + lbl_1_data_162++; + + } + temp_f31 = cosd(temp_f31*90.0f); + temp_f30 = -50+(95*temp_f31); + break; + + case 1: + temp_f30 = -50; + fn_1_4798(arg0); + lbl_1_data_162++; + break; + + case 2: + if(lbl_1_bss_10 == 1) { + HuAudFXPlay(1663); + } + lbl_1_bss_10++; + temp_f31 = lbl_1_bss_10/60.0f; + if(temp_f31 >= 1.0f) { + lbl_1_bss_10 = 0; + temp_f31 = 1.0f; + lbl_1_data_162++; + } + temp_f31 = sind(temp_f31*90.0f); + temp_f30 = -50+(95*temp_f31); + break; + + case 3: + temp_f30 = 45; + fn_1_2050(224, 64); + lbl_1_data_162 = 0; + break; + } + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r31 = &arg0->unk4[0]; + for(temp_r28=0; temp_r28<10; temp_r28++, temp_r31++) { + if(lbl_1_data_162 || -50.0f != Hu3DData[temp_r31->unk1A].pos.y) { + Hu3DModelPosSet(temp_r31->unk1A, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + Hu3DModelRotSet(temp_r31->unk1A, 0, temp_r31->unk8, 0); + Hu3DModelPosSet(temp_r31->unk1E, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + Hu3DModelRotSet(temp_r31->unk1E, 0, temp_r31->unk8, 0); + } + + } + } +} + +void fn_1_30E0(Work2110 *arg0) +{ + float temp_f31; + s16 sp8[2]; + Unk2110Obj *temp_r31; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r25; + u32 temp_r22; + switch(lbl_1_data_162) { + case 0: + lbl_1_bss_10++; + if(lbl_1_bss_10 > 60) { + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } + return; + + case 1: + temp_r28 = arg0[0].unk16C[4]; + arg0[0].unk4[temp_r28].unk0 = 4; + temp_r28 = arg0[1].unk16C[4]; + arg0[1].unk4[temp_r28].unk0 = 4; + lbl_1_bss_10 = 999; + lbl_1_data_162++; + break; + + case 2: + temp_r31 = &arg0[0].unk4[arg0[0].unk16C[5]]; + if((temp_r31->unk0 & 0x1C) == 0x10) { + lbl_1_bss_10 = 0; + fn_1_2050(224, 96); + lbl_1_data_162 = 0; + return; + } + break; + } + temp_r25 = 0; + sp8[0] = sp8[1] = ++lbl_1_bss_10; + for(temp_r27=0; temp_r27<2; temp_r27++, arg0++) { + for(temp_r29=4; temp_r29>-6; temp_r29--) { + temp_r28 = (temp_r29 < 0) ? arg0->unk16C[temp_r29+10] : arg0->unk16C[temp_r29]; + temp_r31 = &arg0[0].unk4[temp_r28]; + switch(temp_r22 = temp_r31->unk0 & 0x1C) { + case 4: + if(sp8[temp_r27] > 15) { + sp8[temp_r27] = 0; + temp_r25 = 1; + if(temp_r29-1 > -6) { + temp_r28 = ((temp_r29-1) < 0) ? arg0->unk16C[(temp_r29-1)+10] : arg0->unk16C[(temp_r29-1)]; + arg0[0].unk4[temp_r28].unk0 &= ~0x1C; + arg0[0].unk4[temp_r28].unk0 |= 0x4; + } + temp_r31->unk0 &= ~0x1C; + temp_r31->unk0 |= 8; + temp_r31->unk20 = 0; + Hu3DModelAttrReset(temp_r31->unk1C, 1); + } + break; + + case 8: + case 12: + temp_f31 = Hu3DData[temp_r31->unk1C].pos.y; + temp_r31->unk20 -= 0.98f; + temp_f31 += temp_r31->unk20; + if(temp_f31 <= 50.0f) { + temp_f31 = 50.0f; + temp_r31->unk0 &= ~0x1C; + if(temp_r22 == 8) { + temp_r31->unk20 = 6; + temp_r31->unk0 |= 12; + HuAudFXPlay(1664); + } else { + temp_r31->unk20 = 0; + temp_r31->unk0 |= 16; + } + } + Hu3DModelPosSet(temp_r31->unk1C, temp_r31->unkC.x, temp_f31, temp_r31->unkC.z); + Hu3DModelRotSet(temp_r31->unk1C, 0, temp_r31->unk8, 0); + break; + + default: + break; + } + } + } + if(temp_r25) { + lbl_1_bss_10 = 0; + } +} + +s32 lbl_1_data_164 = -1; +Vec lbl_1_data_168 = { -150, 150, 0 }; +void fn_1_4D4C(void); +void fn_1_4E30(s16 arg0, Bss61CWork *arg1); +void fn_1_52D8(void); +void fn_1_566C(s16 arg0); +s32 fn_1_7A78(s32 arg0, s16 arg1); + +void fn_1_3540(Work2110 *arg0) +{ + float sp8[2]; + float temp_f31; + float temp_f30; + Unk2110Obj *temp_r30; + s16 temp_r29; + Bss61CWork *temp_r27; + s16 temp_r26; + s16 temp_r25; + temp_r25 = 0; + switch(lbl_1_data_162) { + case 0: + lbl_1_bss_20[0] = arg0[0].unk0; + lbl_1_bss_20[1] = arg0[1].unk0; + temp_r29 = rand16()%11; + temp_f31 = (temp_r29 < 5) ? 360.0f : 180.0f; + temp_f31 += temp_r29*36.0f; + lbl_1_bss_18[0] = lbl_1_bss_20[0]+temp_f31; + lbl_1_bss_18[1] = lbl_1_bss_20[1]-temp_f31; + lbl_1_bss_14 = (0.01f*temp_f31)*60; + lbl_1_data_162++; + lbl_1_data_164 = HuAudFXPlay(1665); + break; + + case 1: + if(lbl_1_bss_10 == lbl_1_bss_14) { + arg0[0].unk0 = fmod(arg0[0].unk0, 360); + arg0[1].unk0 = fmod(arg0[1].unk0, 360); + if(arg0[0].unk0 < 0.0f) { + arg0[0].unk0 += 360.0f; + } + if(arg0[1].unk0 < 0.0f) { + arg0[1].unk0 += 360.0f; + } + fn_1_48D0(&arg0[0]); + fn_1_48D0(&arg0[1]); + lbl_1_data_162++; + lbl_1_bss_10 = 0; + temp_r25 = 1; + } + break; + + case 2: + temp_r25 = 1; + fn_1_4D4C(); + fn_1_52D8(); + fn_1_566C(1); + for(temp_r29=0; temp_r29<4; temp_r29++) { + temp_r27 = lbl_1_bss_61C[temp_r29]->data; + fn_1_4E30(temp_r27->unkA, temp_r27); + } + lbl_1_data_162 = 0; + fn_1_2050(224, 0); + break; + } + sp8[0] = lbl_1_data_1D0+arg0[0].unk0; + sp8[1] = lbl_1_data_1D0+arg0[1].unk0; + if(temp_r25 == 0) { + lbl_1_bss_10++; + temp_f31 = lbl_1_bss_10/(float)lbl_1_bss_14; + temp_f31 = sind(temp_f31*90.0f); + if(lbl_1_bss_10 > lbl_1_bss_14-120) { + temp_f30 = (lbl_1_bss_10-(lbl_1_bss_14-120))/120.0f; + if(temp_f30 < 0.0f) { + temp_f30 = 0.0f; + } else { + if(temp_f30 > 1.0f) { + temp_f30 = 1.0f; + } + } + if(lbl_1_data_164 != -1) { + HuAudFXPitchSet(lbl_1_data_164, -8191.0f*temp_f30); + fn_1_7A78(lbl_1_data_164, (1.0f-temp_f30)*127); + } + if(lbl_1_bss_10 >= lbl_1_bss_14) { + if(lbl_1_data_164 != -1) { + HuAudFXStop(lbl_1_data_164); + lbl_1_data_164 = -1; + HuAudFXPlay(1675); + } + } + } + if(lbl_1_bss_10 > lbl_1_bss_14) { + lbl_1_bss_10 = lbl_1_bss_14; + temp_f31 = 1; + } + arg0[0].unk0 = lbl_1_bss_20[0]+(temp_f31*(lbl_1_bss_18[0]-lbl_1_bss_20[0])); + arg0[1].unk0 = lbl_1_bss_20[1]+(temp_f31*(lbl_1_bss_18[1]-lbl_1_bss_20[1])); + } + Hu3DData[lbl_1_bss_2C->model[3]].rot.y = sp8[0]; + Hu3DData[lbl_1_bss_2C->model[4]].rot.y = sp8[1]; + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r30 = &arg0->unk4[0]; + for(temp_r26=0; temp_r26<10; temp_r26++, temp_r30++) { + float temp_f29 = temp_r30->unkC.x; + float temp_f28 = temp_r30->unkC.z; + Hu3DModelPosSet(temp_r30->unk1A, temp_f29, 45, temp_f28); + Hu3DModelRotSet(temp_r30->unk1A, 0, temp_r30->unk8, 0); + Hu3DModelPosSet(temp_r30->unk1E, temp_f29, 45, temp_f28); + Hu3DModelRotSet(temp_r30->unk1E, 0, temp_r30->unk8, 0); + Hu3DModelPosSet(temp_r30->unk1C, temp_f29, 50, temp_f28); + Hu3DModelRotSet(temp_r30->unk1C, 0, temp_r30->unk8, 0); + } + } +} + +void fn_1_3FD0(Unk72B4Data18 *arg0); + +void fn_1_5B70(float arg0, float arg1, float arg2, s16 arg3, unkHook72B4Data18 arg4, s16 arg5); + +void fn_1_3D7C(Work2110 *arg0) +{ + Unk2110Obj *temp_r31; + ModelData *temp_r30; + s16 temp_r29; + WorkA44 *temp_r28; + s16 temp_r27; + switch(lbl_1_data_162) { + case 0: + if(++lbl_1_bss_10 > 60) { + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } + break; + + case 1: + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r31 = &arg0->unk4[0]; + for(temp_r27=0; temp_r27<10; temp_r27++, temp_r31++) { + temp_r30 = &Hu3DData[temp_r31->unk1C]; + temp_r31->unk0 &= ~0x1C; + if(!(temp_r31->unk0 & 0x1)) { + fn_1_5B70(temp_r30->pos.x, 20+temp_r30->pos.y, temp_r30->pos.z, 20, fn_1_3FD0, temp_r31->unk1C); + if(temp_r29 == 0) { + HuAudFXPlay(1669); + } else { + HuAudFXPlay(1674); + } + } else { + temp_r30->pos.y = 1000; + } + temp_r31->unk0 &= ~0x3; + Hu3DModelScaleSet(temp_r31->unk1A, 1, 1, 1); + } + } + lbl_1_data_162++; + break; + + case 2: + if(++lbl_1_bss_10 > 60) { + lbl_1_bss_10 = lbl_1_data_162 = 0; + fn_1_2050(224, 32); + } + break; + } +} + +void fn_1_3FD0(Unk72B4Data18 *arg0) +{ + Hu3DData[arg0->unk2C].pos.y = 1000; + Hu3DModelAttrSet(arg0->unk2C, 1); +} + +void fn_1_4028(Work2110 *arg0) +{ + float temp_f31; + float temp_f30; + Unk2110Obj *temp_r31; + WorkA44 *temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + Bss61CWork *temp_r24; + temp_r30 = lbl_1_bss_30->data; + temp_r27 = -1; + switch(lbl_1_data_162) { + case 0: + temp_r30->unk10 = MGSeqTimerCreate(15); + lbl_1_data_162++; + break; + + case 1: + if(lbl_1_bss_12C[0].unk134[0] && lbl_1_bss_12C[0].unk134[1]) { + temp_r27 = 0; + } + if(lbl_1_bss_12C[1].unk134[0] && lbl_1_bss_12C[1].unk134[1]) { + if(temp_r27 == 0) { + temp_r27 = (rand16() % 2) ? 0 : 1; + } else { + temp_r27 = 1; + } + } + temp_r30->unk6[1] = temp_r27; + if(temp_r27 != -1) { + fn_1_A7D0(temp_r30->unk6[1]); + fn_1_20D0(lbl_1_bss_12C[temp_r27].unk138[0]); + fn_1_5480(); + fn_1_566C(3); + lbl_1_bss_12C[temp_r27].unk138[0]++; + MGSeqParamSet(temp_r30->unk10, 2, -1); + temp_r30->unk10 = -1; + temp_r30->unk6[0]++; + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } else { + if(--temp_r30->unkA < -1) { + for(temp_r29=0; temp_r29<4; temp_r29++) { + temp_r24 = lbl_1_bss_61C[temp_r29]->data; + for(temp_r28=0; temp_r28<8; temp_r28++) { + temp_r24->unk5E[temp_r28] = -1; + } + } + fn_1_5480(); + fn_1_566C(4); + temp_r30->unkA = 0; + MGSeqParamSet(temp_r30->unk10, 2, -1); + + temp_r30->unk10 = -1; + temp_r30->unk6[0]++; + lbl_1_bss_10 = 0; + lbl_1_data_162++; + } + } + if(temp_r30->unk6[0] >= 5) { + if(lbl_1_bss_12C[0].unk138[0] == lbl_1_bss_12C[1].unk138[0]) { + HuAudFXPlay(11); + } + } + break; + + case 2: + if(++lbl_1_bss_10 > 90.0f) { + lbl_1_bss_10 = 0; + lbl_1_data_162 = 1; + fn_1_2050(224, 128); + } + break; + } + for(temp_r29=0; temp_r29<2; temp_r29++, arg0++) { + temp_r31 = &arg0->unk4[0]; + for(temp_r28=0; temp_r28<10; temp_r28++, temp_r31++) { + if(!(temp_r31->unk0 & 0x1)) { + continue; + } + if(temp_r31->unk0 & 0x2) { + temp_r31->unk18++; + temp_f31 = temp_r31->unk18/30.0f; + if(temp_f31 >= 1.0f) { + temp_r31->unk20 -= 1.0f; + if(temp_r31->unk20 < 0.4f) { + temp_r31->unk20 = 0.4f; + } + temp_r31->unk18 = 0; + temp_f31 = 1.0f; + } + temp_f31 = (temp_r31->unk20*0.7f)*sind(180.0f*temp_f31)+1.0f; + Hu3DModelScaleSet(temp_r31->unk1A, temp_f31, temp_f31, temp_f31); + } else { + if(!temp_r31->unk20) { + if(++temp_r31->unk18 > 30.0f) { + temp_r31->unk20 = 1; + temp_r31->unk18 = 0; + } + } else { + temp_r31->unk18++; + temp_f31 = temp_r31->unk18/54.0f; + if(temp_f31 >= 1.0f) { + temp_r31->unk18 = 54; + temp_f31 = 1.0f; + } + temp_f31 = cosd(temp_f31*90.0f); + temp_f30 = -50+(95*temp_f31); + Hu3DModelPosSet(temp_r31->unk1A, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + Hu3DModelPosSet(temp_r31->unk1E, temp_r31->unkC.x, temp_f30, temp_r31->unkC.z); + } + } + } + } +} + +s16 fn_1_4724(void) +{ + return lbl_1_data_162; +} + +u32 fn_1_4738(s16 arg0, s16 arg1) +{ + Work2110 *temp_r31; + temp_r31 = lbl_1_bss_2C->data; + temp_r31 += arg0; + if(arg1 == -1) { + return 0; + } + return temp_r31->unk4[temp_r31->unk16C[arg1]].unk0; +} + +void fn_1_66DC(s16 *arg0, s16 arg1, s16 arg2); + +void fn_1_4798(Work2110 *arg0) +{ + s16 temp_r31; + s16 sp10[10]; + Unk2110Obj *sp8[2]; + fn_1_66DC(sp10, 0, 10); + sp8[0] = &arg0[0].unk4[0]; + sp8[1] = &arg0[1].unk4[0]; + for(temp_r31=0; temp_r31<10; temp_r31++, sp8[0]++, sp8[1]++) { + sp8[0]->unk1A = lbl_1_bss_34[sp10[temp_r31]]; + sp8[1]->unk1A = lbl_1_bss_34[sp10[temp_r31]+10]; + sp8[0]->unk18 = sp8[1]->unk18 = (sp10[temp_r31] < 5) ? sp10[temp_r31] : sp10[temp_r31]-5; + } +} + +void fn_1_48D0(Work2110 *arg0) +{ + float temp_f31; + s16 temp_r31; + s16 temp_r30; + for(temp_r30=0; temp_r30<10; temp_r30++) { + temp_f31 = arg0->unk0+arg0->unk4[temp_r30].unk4; + temp_r31 = (temp_f31/360.0f)*10.0f; + if(temp_r31 >= 10) { + temp_r31 -= 10; + } else if(temp_r31 < 0) { + temp_r31 += 10; + } + arg0->unk16C[temp_r31] = temp_r30; + } +} + +void fn_1_498C(s16 arg0, Work2110 *arg1) +{ + float temp_f31; + Unk2110Obj *temp_r31; + Bss12CStruct *temp_r30; + s16 temp_r29; + temp_r31 = &arg1->unk4[0]; + temp_r30 = &lbl_1_bss_12C[arg0]; + for(temp_r29=0; temp_r29<10; temp_r29++, temp_r31++) { + temp_f31 = arg1->unk0+temp_r31->unk4; + if(temp_f31 >= 360.0f) { + temp_f31 -= 360.0f; + } + temp_r31->unkC.x = temp_r30->unkC.x+(153.0*sind(temp_f31)); + temp_r31->unkC.z = temp_r30->unkC.z+(153.0*cosd(temp_f31)); + temp_r31->unk8 = atan2d(temp_r30->unkC.x-temp_r31->unkC.x, temp_r30->unkC.z-temp_r31->unkC.z); + } +} + +s16 fn_1_4B14(s16 arg0, s16 arg1, s16 *arg2) +{ + Unk2110Obj *temp_r31; + s16 temp_r30; + Work2110 *temp_r29; + temp_r29 = lbl_1_bss_2C->data; + *arg2 = 0; + temp_r29 += arg0; + temp_r31 = &temp_r29->unk4[temp_r29->unk16C[arg1]]; + if(temp_r31->unk0 & 0x1) { + return -1; + } + temp_r31->unk0 |= 0x1; + for(temp_r30=0; temp_r30<2; temp_r30++) { + if(!lbl_1_bss_12C[arg0].unk134[temp_r30] && lbl_1_bss_5C.unkC[temp_r30] == temp_r31->unk18) { + *arg2 = 1; + lbl_1_bss_12C[arg0].unk134[temp_r30] = 1; + temp_r31->unk0 |= 0x2; + temp_r31->unk18 = 0; + temp_r31->unk20 = 1; + Hu3DMotionTimeSet(lbl_1_bss_2C->model[arg0+1], 0); + Hu3DModelAttrReset(lbl_1_bss_2C->model[arg0+1], 0x40000002); + HuAudFXPlay(9); + break; + } + + } + return temp_r31->unk1C; +} + +s16 fn_1_4CDC(s16 arg0, s16 arg1) +{ + Work2110 *temp_r31; + Unk2110Obj *temp_r30; + temp_r31 = lbl_1_bss_2C->data; + temp_r31 += arg0; + temp_r30 = &temp_r31->unk4[temp_r31->unk16C[arg1]]; + if(temp_r30->unk0 & 0x1) { + return 0; + } else { + return 1; + } +} + +void fn_1_4D4C(void) +{ + lbl_1_bss_5C.unkC[0] = rand16()%5; + lbl_1_bss_5C.unkC[1] = rand16()%5; + lbl_1_bss_12C[0].unk134[0] = lbl_1_bss_12C[0].unk134[1] = 0; + lbl_1_bss_12C[1].unk134[0] = lbl_1_bss_12C[1].unk134[1] = 0; +} + +void fn_1_6638(s16 *arg0, s16 arg1); + +void fn_1_4E30(s16 arg0, Bss61CWork *arg1) +{ + s16 sp1E[10]; + s16 spA[10]; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + Work2110 *temp_r27; + Unk2110Obj *temp_r26; + temp_r27 = lbl_1_bss_2C->data; + for(temp_r30=0; temp_r30<10; temp_r30++) { + sp1E[temp_r30] = spA[temp_r30] = 0; + } + for(temp_r30=0; temp_r30<8; temp_r30++) { + arg1->unk5E[temp_r30] = -1; + } + temp_r27 += arg0; + for(temp_r28=0, temp_r29=0; temp_r28<2; temp_r28++) { + for(temp_r30=0; temp_r30<10; temp_r30++) { + temp_r26 = &temp_r27->unk4[temp_r27->unk16C[temp_r30]]; + if(temp_r26->unk18 == lbl_1_bss_5C.unkC[temp_r28] && !sp1E[temp_r30]) { + arg1->unk5E[temp_r29++] = temp_r30; + sp1E[temp_r30] = 1; + } + } + } + for(temp_r28=0, temp_r30=0; temp_r28<10; temp_r28++) { + if(!sp1E[temp_r28]) { + spA[temp_r30++] = temp_r28; + } + } + fn_1_6638(spA, temp_r30); + temp_r30 = 0; + if(temp_r29 == 2) { + temp_r29 += 2; + } + + while(1) { + if(temp_r29 >= 8) { + break; + } + arg1->unk5E[temp_r29++] = spA[temp_r30++]; + } + arg1->unk70 = 0; + temp_r29 = arg1->unk14->unk4; + switch(GWPlayerCfg[arg1->unk4].diff) { + case 0: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%3)+2) : ((rand16()%3)+1); + arg1->unk6E = 8; + break; + + case 1: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%3)+1) : ((rand16()%3)+0); + arg1->unk6E = 7; + break; + + case 2: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%3)+0) : ((rand16()%2)+0); + arg1->unk6E = 6; + break; + + case 3: + arg1->unk72 = (GWPlayerCfg[temp_r29].iscom) ? ((rand16()%2)+0) : 0; + arg1->unk6E = 5; + break; + } + if(arg1->unk6E < 4) { + arg1->unk6E = 4; + } +} + +void fn_1_5524(void); + +Unk72B4Data18 *fn_1_6B34(s16 arg0, Vec *arg1, Vec *arg2, float arg3, GXColor *arg4); + +void fn_1_52D8(void) +{ + Bss5CStruct *temp_r31; + s16 temp_r30; + Unk72B4Data18 *temp_r29; + Vec sp18; + Vec spC; + GXColor sp8 = { 255, 255, 255, 255 }; + temp_r31 = &lbl_1_bss_5C; + sp18.x = 0; + sp18.y = 200; + sp18.z = -300; + spC.x = spC.z = 1; + spC.y = 0.5f; + fn_1_6B34(temp_r31->unk0[0], &sp18, &spC, 0, &sp8); + for(temp_r30=0; temp_r30<2; temp_r30++) { + sp18.x = (temp_r30 == 0) ? -60.0f : 60.0f; + sp18.y = 220; + sp18.z = -290; + spC.x = spC.y = spC.z = 1; + temp_r29 = fn_1_6B34(temp_r31->unk0[temp_r31->unkC[temp_r30]+1], &sp18, &spC, 0, &sp8); + temp_r29->unk28 = temp_r30; + } + fn_1_5524(); +} + +Work72B4 *fn_1_7218(s16 arg0); + +void fn_1_5480(void) +{ + Work72B4 *temp_r31; + Bss5CStruct *temp_r30 = &lbl_1_bss_5C; + s16 temp_r29; + temp_r31 = fn_1_7218(temp_r30->unk0[0]); + temp_r31->unk18[0].unk56 = 0; + for(temp_r29=0; temp_r29<2; temp_r29++) { + temp_r31 = fn_1_7218(temp_r30->unk0[temp_r30->unkC[temp_r29]+1]); + temp_r31->unk18[0].unk56 = temp_r31->unk18[1].unk56 = 0; + + } +} + +void fn_1_5524(void) +{ + float temp_f30; + Bss5CStruct *temp_r31; + Work72B4 *temp_r30; + s16 temp_r29; + s16 temp_r28; + temp_r31 = &lbl_1_bss_5C; + temp_r30 = fn_1_7218(temp_r31->unk0[0]); + temp_r30->unk18[0].unk48.x = temp_r31->unk18; + for(temp_r28=0; temp_r28<2; temp_r28++) { + temp_r30 = fn_1_7218(temp_r31->unk0[temp_r31->unkC[temp_r28]+1]); + for(temp_r29=0; temp_r29<2; temp_r29++) { + if(temp_r30->unk18[temp_r29].unk56) { + temp_f30 = (temp_r30->unk18[temp_r29].unk28 == 0) ? -60.0f : 60.0f; + temp_r30->unk18[temp_r29].unk48.x = temp_f30+temp_r31->unk18; + } + } + } + +} + +void fn_1_566C(s16 arg0) +{ + ModelData *sp8 = &Hu3DData[lbl_1_bss_2C->model[5]]; + lbl_1_bss_5C.unk14 = 0; + lbl_1_bss_5C.unk12 = 0; + lbl_1_bss_5C.unk10 = arg0; + lbl_1_bss_5C.unk20 = lbl_1_bss_5C.unk34 = 0; + lbl_1_bss_5C.unk28[1] = lbl_1_bss_5C.unk28[0]; +} + +void fn_1_5708(void) +{ + Bss5CStruct *temp_r31; + ModelData *temp_r30; + WorkA44 *temp_r29; + temp_r30 = &Hu3DData[lbl_1_bss_2C->model[5]]; + temp_r29 = lbl_1_bss_30->data; + temp_r31 = &lbl_1_bss_5C; + switch(temp_r31->unk10) { + case 0: + if(temp_r30->unk_08 != lbl_1_bss_2C->motion[0]) { + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[0], 0, 8, 0x40000001); + } + break; + + case 1: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[1], 0, 8, 0); + } else { + if(temp_r30->unk_0C == -1) { + if(temp_r30->unk_64 >= Hu3DMotionMaxTimeGet(lbl_1_bss_2C->model[5])) { + temp_r31->unk16 = rand16()%2; + temp_r31->unk12 = 0; + temp_r31->unk10 = 2; + } + } + } + break; + + case 2: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[5], 0, 8, 0x40000001); + } else { + if(temp_r29->unkA < 180) { + temp_r31->unk12 = 0; + temp_r31->unk10 = 5; + } + } + break; + + case 3: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[2], 0, 8, 0x40000001); + } else { + if(temp_r30->unk_0C == -1) { + if(temp_r30->unk_64 >= Hu3DMotionMaxTimeGet(lbl_1_bss_2C->model[5])-1.0f) { + if(++temp_r31->unk14 > 1) { + temp_r31->unk12 = 0; + temp_r31->unk10 = 0; + } + } + } + } + break; + + case 4: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[3], 0, 8, 0); + } else { + if(temp_r30->unk_0C == -1) { + if(temp_r30->unk_64 >= Hu3DMotionMaxTimeGet(lbl_1_bss_2C->model[5])) { + temp_r31->unk12 = 0; + temp_r31->unk10 = 0; + } + } + } + break; + + case 5: + if(temp_r31->unk12 == 0) { + temp_r31->unk12 = 1; + Hu3DMotionShiftSet(lbl_1_bss_2C->model[5], lbl_1_bss_2C->motion[6], 0, 8, 0x40000001); + } + break; + } + temp_r30->pos.x = temp_r31->unk18; + temp_r30->rot.y = temp_r31->unk28[0]; +} + +void fn_1_5B70(float arg0, float arg1, float arg2, s16 arg3, unkHook72B4Data18 arg4, s16 arg5) +{ + Vec sp2C; + Vec sp20; + GXColor sp1A; + float temp_f31; + float temp_f30; + + Unk72B4Data18 *temp_r31; + s16 temp_r30; + temp_f30 = 360.0f/arg3; + temp_f31 = rand16()%361; + for(temp_r30=0; temp_r30model[0], &sp2C, &sp20, 0, &sp1A); + if(!temp_r31) { + break; + } + temp_r31->unk30 = arg4; + temp_r31->unk2C = arg5; + temp_r31->unk28 = 0; + temp_r31->unk2A = (rand16()%2)+2; + temp_r31->unk0.x = 3.5*sind(temp_f31); + temp_r31->unk0.y = 0.01f*((rand16()%16)+20); + temp_r31->unk0.z = 3.5*cosd(temp_f31); + temp_r31->unkC.x = temp_r31->unk0.x*0.03f; + temp_r31->unkC.y = temp_r31->unk0.y*0.03f; + temp_r31->unkC.z = temp_r31->unk0.z*0.03f; + } +} + +void fn_1_6030(ModelData *arg0, Work72B4 *arg1, Mtx arg2) +{ + Unk72B4Data18 *temp_r31; + s16 temp_r29; + GXColor *temp_r28; + unkHook72B4Data18 temp_r27; + temp_r31 = arg1->unk18; + temp_r28 = arg1->unk24; + for(temp_r29=0; temp_r29unk0; temp_r29++, temp_r31++, temp_r28++) { + if(temp_r31->unk56 == 0){ + continue; + } + temp_r31->unk48.x += temp_r31->unk0.x; + temp_r31->unk48.y += temp_r31->unk0.y; + temp_r31->unk48.z += temp_r31->unk0.z; + temp_r31->unk0.x -= temp_r31->unkC.x; + temp_r31->unk0.y -= temp_r31->unkC.y; + temp_r31->unk0.z -= temp_r31->unkC.z; + temp_r31->unk28++; + if(temp_r31->unk28 >= temp_r31->unk2A) { + temp_r31->unk28 = 0; + temp_r31->unk54++; + } + if(temp_r31->unk54 >= arg1->unk14) { + temp_r31->unk30 = NULL; + temp_r31->unk56 = 0; + } else { + if(temp_r31->unk54 == 2 && temp_r31->unk30) { + temp_r27 = temp_r31->unk30; + temp_r27(temp_r31); + } + } + } +} + +void fn_1_6184(Vec *arg0, Bss12CInner *arg1) +{ + s16 temp_r31; + s16 temp_r30; + float spC[3]; + float temp_f29; + float temp_f28; + float temp_f27; + float temp_f26; + float temp_f25; + float temp_f24; + float temp_f23; + temp_f28 = arg0[1].x-arg0[0].x; + temp_f27 = arg0[1].y-arg0[0].y; + temp_f26 = arg0[1].z-arg0[0].z; + temp_f25 = arg0[2].x-arg0[0].x; + temp_f24 = arg0[2].y-arg0[0].y; + temp_f23 = arg0[2].z-arg0[0].z; + spC[0] = (temp_f27*temp_f23)-(temp_f26*temp_f24); + spC[1] = (temp_f26*temp_f25)-(temp_f28*temp_f23); + spC[2] = (temp_f28*temp_f24)-(temp_f27*temp_f25); + temp_f29 = VECMagPoint(spC[0], spC[1], spC[2]); + if(0.0f != temp_f29) { + spC[0] /= temp_f29; + spC[1] /= temp_f29; + spC[2] /= temp_f29; + } + arg1->unkC = (spC[0]*arg0[0].x)+(spC[1]*arg0[0].y)+(spC[2]*arg0[0].z); + temp_r30 = 0; + for(temp_r31=1; temp_r31<3; temp_r31++) { + if(ABS(spC[temp_r30]) < ABS(spC[temp_r31])) { + temp_r30 = temp_r31; + } + } + arg1->unk0.x = spC[0]; + arg1->unk0.y = spC[1]; + arg1->unk0.z = spC[2]; + arg1->unk10 = temp_r30; +} + +float fn_1_6504(float arg0, float arg1, float arg2) +{ + float temp_f31 = arg1-arg0; + if(temp_f31 > 180.0f) { + temp_f31 -= 360.0f; + } else if(temp_f31 < -180.0f) { + temp_f31 += 360.0f; + } + temp_f31 = arg0+(temp_f31*arg2); + if(temp_f31 >= 360.0f) { + temp_f31 -= 360.0f; + } else if(temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } + return temp_f31; +} + +float fn_1_65CC(float arg0, float arg1, float arg2) +{ + return arg0+(arg2*(arg1-arg0)); +} + +float fn_1_65DC(float arg0, float arg1, float arg2, float arg3) +{ + float temp_f31 = 1.0f-arg3; + return (arg0*(temp_f31*temp_f31))+((2.0f*temp_f31)*arg3*arg1)+(arg2*(arg3*arg3)); +} + +void fn_1_6638(s16 *arg0, s16 arg1) +{ + s16 temp_r31; + s16 spCE[99]; + s16 sp8[99]; + memcpy(sp8, arg0, arg1*sizeof(s16)); + fn_1_66DC(spCE, 0, arg1); + for(temp_r31=0; temp_r31=0; temp_r31--) { + temp_r29 = rand16()%(s16)(temp_r31+1); + temp_r28 = arg0[temp_r31]; + arg0[temp_r31] = arg0[temp_r29]; + arg0[temp_r29] = temp_r28; + } +} + +void fn_1_67C0(void) +{ + if(HuPadBtnDown[0] & PAD_TRIGGER_L) { + lbl_1_bss_12 ^= 1; + } + if(lbl_1_bss_12 == 0) { + return; + } + if(HuPadBtn[0] & PAD_BUTTON_LEFT) { + CRot.y++; + } + if(HuPadBtn[0] & PAD_BUTTON_RIGHT) { + CRot.y--; + } + if(HuPadBtn[0] & PAD_BUTTON_UP) { + CRot.x--; + } + if(HuPadBtn[0] & PAD_BUTTON_DOWN) { + CRot.x++; + } + Center.x += HuPadSubStkX[0]; + if(HuPadBtn[0] & PAD_TRIGGER_R) { + Center.y += HuPadSubStkY[0]; + } else { + Center.z += HuPadSubStkY[0]; + } + if(HuPadBtn[0] & PAD_BUTTON_X) { + CZoom += 10; + } + if(HuPadBtn[0] & PAD_BUTTON_Y) { + CZoom -= 10; + } + if(HuPadBtnDown[0] & PAD_BUTTON_A) { + OSReport("\nCZoom = %.2f \n", CZoom); + OSReport("Center x = %.2f: y = %.2f: z = %.2f \n", Center.x, Center.y, Center.z); + OSReport("CRot x = %.2f: y = %.2f: z = %.2f \n", CRot.x, CRot.y, CRot.z); + } + +} + +Unk72B4Data18 *fn_1_6B34(s16 arg0, Vec *arg1, Vec *arg2, float arg3, GXColor *arg4) +{ + Unk72B4Data18 *temp_r31; + Work72B4 *temp_r30; + s16 temp_r29; + ModelData *temp_r28; + temp_r28 = &Hu3DData[arg0]; + temp_r30 = temp_r28->unk_120; + for(temp_r29 = 0, temp_r31 = temp_r30->unk18; temp_r29unk0; temp_r29++, temp_r31++) { + if(!temp_r31->unk56) { + break; + } + } + if(temp_r29 == temp_r30->unk0) { + return NULL; + } + temp_r30->unk24[temp_r29].r = arg4->r; + temp_r30->unk24[temp_r29].g = arg4->g; + temp_r30->unk24[temp_r29].b = arg4->b; + temp_r30->unk24[temp_r29].a = arg4->a; + temp_r31->unk34 = temp_r29; + temp_r31->unk38 = arg3; + temp_r31->unk3C = *arg2; + temp_r31->unk48 = *arg1; + temp_r31->unk54 = 0; + temp_r31->unk30 = NULL; + temp_r31->unk56 = 1; + return temp_r31; +} + +void fn_1_72B4(ModelData *model, Mtx mtx); +void fn_1_7824(HsfVector2f *arg0, s16 arg1, s16 arg2, float arg3, float arg4); + +s16 fn_1_6C74(AnimData *arg0, s16 arg1, float arg2, s16 arg3, s16 arg4) +{ + Work72B4 *temp_r31; + s16 temp_r30; + HsfVector2f *temp_r29; + ModelData *temp_r28; + GXColor *temp_r27; + Vec *temp_r25; + Unk72B4Data18 *temp_r24; + s16 temp_r22; + void *temp_r21; + s16 temp_r20; + s16 temp_r19; + void *temp_r18; + temp_r20 = Hu3DHookFuncCreate(fn_1_72B4); + temp_r28 = &Hu3DData[temp_r20]; + temp_r31 = HuMemDirectMallocNum(HEAP_DATA, sizeof(Work72B4), temp_r28->unk_48); + temp_r28->unk_120 = temp_r31; + arg0->useNum++; + temp_r31->unk10 = arg0; + temp_r31->unk0 = arg1; + temp_r31->unk8 = 0; + temp_r31->unkC = 0; + temp_r24 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(Unk72B4Data18), temp_r28->unk_48); + temp_r31->unk18 = temp_r24; + for(temp_r30=0; temp_r30unk54 = -1; + temp_r24->unk56 = 0; + } + temp_r25 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(Vec)*4, temp_r28->unk_48); + temp_r31->unk1C = temp_r25; + for(temp_r30=0; temp_r30x = temp_r25->y = temp_r25->z = 0; + } + temp_r27 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(GXColor), temp_r28->unk_48); + temp_r31->unk24 = temp_r27; + for(temp_r30=0; temp_r30r = temp_r27->g = temp_r27->b = temp_r27->a = 255; + } + temp_r29 = HuMemDirectMallocNum(HEAP_DATA, arg1*sizeof(HsfVector2f)*4, temp_r28->unk_48); + temp_r31->unk20 = temp_r29; + for(temp_r30=0; temp_r30x = 0; + temp_r29->y = 0; + temp_r29++; + temp_r29->x = 1; + temp_r29->y = 0; + temp_r29++; + temp_r29->x = 1; + temp_r29->y = 1; + temp_r29++; + temp_r29->x = 0; + temp_r29->y = 1; + temp_r29++; + } + if(arg3 != 0 || arg4 != 0) { + temp_r22 = arg0->bmp->sizeX/arg3; + temp_r19 = arg0->bmp->sizeY/arg4; + temp_r31->unk14 = temp_r22*temp_r19; + temp_r31->unk60 = 1.0f/temp_r22; + temp_r31->unk64 = 1.0f/temp_r19; + } else { + temp_r22 = 1; + temp_r31->unk14 = 1; + temp_r31->unk60 = 1; + temp_r31->unk64 = 1; + } + temp_r31->unk5C = HuMemDirectMallocNum(HEAP_DATA, temp_r31->unk14*sizeof(HsfVector2f), temp_r28->unk_48); + fn_1_7824(temp_r31->unk5C, temp_r31->unk14, temp_r22, temp_r31->unk60, temp_r31->unk64); + temp_r31->unk2C[0].x = temp_r31->unk2C[3].x = temp_r31->unk2C[2].y = temp_r31->unk2C[3].y = -arg2; + temp_r31->unk2C[1].x = temp_r31->unk2C[2].x = temp_r31->unk2C[0].y = temp_r31->unk2C[1].y = arg2; + temp_r31->unk2C[0].z = temp_r31->unk2C[1].z = temp_r31->unk2C[2].z = temp_r31->unk2C[3].z = 0; + temp_r21 = HuMemDirectMallocNum(HEAP_DATA, 0x20000, temp_r28->unk_48); + temp_r18 = temp_r21; + DCFlushRange(temp_r21, 0x20000); + GXBeginDisplayList(temp_r18, 0x20000); + GXBegin(GX_QUADS, GX_VTXFMT0, 4*arg1); + for(temp_r30=0; temp_r30unk4 = GXEndDisplayList(); + temp_r31->unk28 = HuMemDirectMallocNum(HEAP_DATA, temp_r31->unk4, temp_r28->unk_48); + memcpy(temp_r31->unk28, temp_r21, temp_r31->unk4); + DCFlushRange(temp_r31->unk28, temp_r31->unk4); + HuMemDirectFree(temp_r21); + return temp_r20; +} + +void fn_1_71B8(s16 arg0) +{ + ModelData *temp_r31; + Work72B4 *temp_r30; + temp_r31 = &Hu3DData[arg0]; + temp_r30 = temp_r31->unk_120; + HuSprAnimKill(temp_r30->unk10); + Hu3DModelKill(arg0); +} + +Work72B4 *fn_1_7218(s16 arg0) +{ + ModelData *temp_r31; + temp_r31 = &Hu3DData[arg0]; + return temp_r31->unk_120; +} + +void fn_1_7244(s16 arg0, unkHook72B4 arg1) +{ + ModelData *temp_r31; + Work72B4 *temp_r30; + temp_r31 = &Hu3DData[arg0]; + temp_r30 = temp_r31->unk_120; + temp_r30->unkC = arg1; +} + +void fn_1_727C(s16 arg0, u8 arg1) +{ + ModelData *temp_r31; + Work72B4 *temp_r30; + temp_r31 = &Hu3DData[arg0]; + temp_r30 = temp_r31->unk_120; + temp_r30->unk8 = arg1; +} + +void fn_1_78F0(HsfVector2f *arg0, HsfVector2f *arg1, s16 arg2, float arg3, float arg4); +void fn_1_7994(Vec *arg0, Vec *arg1, Vec *arg2, s16 arg3); + +void fn_1_79FC(Mtx arg0, Mtx arg1); + +void fn_1_72B4(ModelData *model, Mtx mtx) +{ + Mtx sp128; + ROMtx spF8; + Mtx spC8; + Mtx sp98; + Vec sp68[4]; + Vec sp38[4]; + Vec sp8[4]; + Vec *temp_r31; + Work72B4 *temp_r30; + Unk72B4Data18 *temp_r29; + HsfVector2f *temp_r27; + s16 temp_r26; + s16 temp_r25; + unkHook72B4 temp_r23; + temp_r30 = model->unk_120; + GXLoadPosMtxImm(mtx, GX_PNMTX0); + GXSetNumTevStages(1); + GXSetNumTexGens(1); + GXSetTexCoordGen(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); + GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR0A0); + temp_r25 = temp_r30->unk10->bmp->dataFmt & ANIM_BMP_FMTMASK; + if(temp_r25 == ANIM_BMP_I8 || temp_r25 == ANIM_BMP_I4) { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ONE, GX_CC_RASC, GX_CC_ZERO); + } else { + GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO); + } + GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_TEXA, GX_CA_RASA, GX_CA_ZERO); + GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); + GXSetNumChans(1); + GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_VTX, 0, GX_DF_CLAMP, GX_AF_NONE); + if(model->attr & 0x2) { + GXSetZMode(GX_TRUE, GX_LEQUAL, GX_TRUE); + } else { + GXSetZMode(GX_FALSE, GX_LEQUAL, GX_FALSE); + } + HuSprTexLoad(temp_r30->unk10, 0, 0, GX_REPEAT, GX_REPEAT, GX_LINEAR); + GXSetAlphaCompare(GX_GEQUAL, 1, GX_AOP_AND, GX_GEQUAL, 1); + GXSetZCompLoc(GX_FALSE); + switch(temp_r30->unk8) { + case 0: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_NOOP); + break; + + case 1: + GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_NOOP); + break; + + case 2: + GXSetBlendMode(GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVSRCCLR, GX_LO_NOOP); + break; + } + GXClearVtxDesc(); + GXSetVtxDesc(GX_VA_POS, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); + GXSetArray(GX_VA_POS, temp_r30->unk1C, sizeof(Vec)); + GXSetVtxDesc(GX_VA_CLR0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0); + GXSetArray(GX_VA_CLR0, temp_r30->unk24, sizeof(GXColor)); + GXSetVtxDesc(GX_VA_TEX0, GX_INDEX16); + GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); + GXSetArray(GX_VA_TEX0, temp_r30->unk20, sizeof(HsfVector2f)); + fn_1_79FC(mtx, sp128); + PSMTXReorder(sp128, spF8); + if(!omPauseChk() && temp_r30->unkC) { + temp_r23 = temp_r30->unkC; + temp_r23(model, temp_r30, mtx); + } + temp_r29 = temp_r30->unk18; + temp_r31 = temp_r30->unk1C; + temp_r27 = temp_r30->unk20; + PSMTXROMultVecArray(spF8, temp_r30->unk2C, sp68, 4); + for(temp_r26=0; temp_r26unk0; temp_r26++, temp_r29++, temp_r27 += 4) { + if(temp_r29->unk56 == 0) { + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + temp_r31->x = temp_r31->y = temp_r31->z = 0; + temp_r31++; + } else { + if(0.0f == temp_r29->unk38) { + fn_1_7994(sp68, sp38, &temp_r29->unk3C, 4); + VECAdd(&sp38[0], &temp_r29->unk48, temp_r31++); + VECAdd(&sp38[1], &temp_r29->unk48, temp_r31++); + VECAdd(&sp38[2], &temp_r29->unk48, temp_r31++); + VECAdd(&sp38[3], &temp_r29->unk48, temp_r31++); + } else { + fn_1_7994(temp_r30->unk2C, sp38, &temp_r29->unk3C, 4); + MTXRotDeg(spC8, 'Z', temp_r29->unk38); + MTXConcat(sp128, spC8, sp98); + MTXMultVecArray(sp98, sp38, sp8, 4); + VECAdd(&sp8[0], &temp_r29->unk48, temp_r31++); + VECAdd(&sp8[1], &temp_r29->unk48, temp_r31++); + VECAdd(&sp8[2], &temp_r29->unk48, temp_r31++); + VECAdd(&sp8[3], &temp_r29->unk48, temp_r31++); + } + if(temp_r29->unk54 != -1) { + fn_1_78F0(temp_r27, temp_r30->unk5C, temp_r29->unk54, temp_r30->unk60, temp_r30->unk64); + } + } + } + DCFlushRangeNoSync(temp_r30->unk1C, (temp_r30->unk0*sizeof(Vec))*4); + DCFlushRangeNoSync(temp_r30->unk20, (temp_r30->unk0*sizeof(HsfVector2f))*4); + PPCSync(); + GXCallDisplayList(temp_r30->unk28, temp_r30->unk4); +} + +void fn_1_7824(HsfVector2f *arg0, s16 arg1, s16 arg2, float arg3, float arg4) +{ + s16 temp_r30; + s16 temp_r29; + s16 temp_r31; + for(temp_r31=0; temp_r31x = temp_r30*arg3; + arg0->y = temp_r29*arg4; + } +} + +void fn_1_78F0(HsfVector2f *arg0, HsfVector2f *arg1, s16 arg2, float arg3, float arg4) +{ + arg0[0].x = arg1[arg2].x; + arg0[0].y = arg1[arg2].y; + arg0[1].x = arg3+arg1[arg2].x; + arg0[1].y = arg1[arg2].y; + arg0[2].x = arg3+arg1[arg2].x; + arg0[2].y = arg4+arg1[arg2].y; + arg0[3].x = arg1[arg2].x; + arg0[3].y = arg4+arg1[arg2].y; +} + +void fn_1_7994(Vec *arg0, Vec *arg1, Vec *arg2, s16 arg3) +{ + s16 temp_r31; + for(temp_r31=0; temp_r31x = arg0->x*arg2->x; + arg1->y = arg0->y*arg2->y; + arg1->z = arg0->z*arg2->z; + } +} + +void fn_1_79FC(Mtx arg0, Mtx arg1) +{ + arg1[0][0] = arg0[0][0]; + arg1[1][0] = arg0[0][1]; + arg1[2][0] = arg0[0][2]; + arg1[0][1] = arg0[1][0]; + arg1[1][1] = arg0[1][1]; + arg1[2][1] = arg0[1][2]; + arg1[0][2] = arg0[2][0]; + arg1[1][2] = arg0[2][1]; + arg1[2][2] = arg0[2][2]; + arg1[0][3] = 0; + arg1[1][3] = 0; + arg1[2][3] = 0; +} + +s32 fn_1_7A78(s32 arg0, s16 arg1) +{ + UnkMsmStruct_01 sp10; + sp10.unk00 = 1; + sp10.unk04 = arg1; + return msmSeSetParam(arg0, &sp10); +} \ No newline at end of file diff --git a/src/game/hsfdraw.c b/src/game/hsfdraw.c index 5d5b32d5..7018f952 100755 --- a/src/game/hsfdraw.c +++ b/src/game/hsfdraw.c @@ -2375,14 +2375,14 @@ static void ObjDraw(HsfDrawObject *arg0) { } } -void MakeDisplayList(s16 arg0, HsfData *arg1) { +void MakeDisplayList(s16 arg0, u32 arg1) { HsfData *temp_r31; ModelData *var_r30; temp_r31 = Hu3DData[arg0].hsfData; var_r30 = &Hu3DData[arg0]; curModelID = arg0; - mallocNo = (u32) arg1; + mallocNo = arg1; faceNumBuf = HuMemDirectMallocNum(HEAP_DATA, 0x800 * sizeof(u16), mallocNo); MDObjCall(temp_r31, temp_r31->root); HuMemDirectFree(faceNumBuf); diff --git a/src/game/hsfman.c b/src/game/hsfman.c index ad679e66..1a30df2c 100644 --- a/src/game/hsfman.c +++ b/src/game/hsfman.c @@ -38,7 +38,7 @@ s32 shadowModelDrawF; s16 Hu3DProjectionNum; s16 Hu3DCameraNo; s16 Hu3DCameraBit; -HsfData* Hu3DMallocNo; +u32 Hu3DMallocNo; s16 Hu3DPauseF; u16 Hu3DCameraExistF; static u16 NoSyncF; @@ -343,11 +343,11 @@ s16 Hu3DModelCreate(void *arg0) { return -1; } var_r31->hsfData = LoadHSF(arg0); - var_r31->unk_48 = Hu3DMallocNo = var_r31->hsfData; + var_r31->unk_48 = Hu3DMallocNo = (u32)var_r31->hsfData; var_r31->attr = 0; var_r31->motion_attr = 0; var_r31->unk_02 = 0; - MakeDisplayList(var_r30, (HsfData* ) var_r31->unk_48); + MakeDisplayList(var_r30, var_r31->unk_48); var_r31->unk_68 = 1.0f; for (i = 0; i < 4; i++) { var_r31->unk_10[i] = -1; @@ -424,10 +424,10 @@ s16 Hu3DModelLink(s16 arg0) { return -1; } var_r31->unk_C8 = temp_r30->hsfData; - var_r31->hsfData = HuMemDirectMallocNum(HEAP_DATA, 0x80, (u32)var_r31->unk_4C); - var_r31->unk_4C = var_r31->hsfData; + var_r31->hsfData = HuMemDirectMallocNum(HEAP_DATA, 0x80, var_r31->unk_4C); + var_r31->unk_4C = (u32)var_r31->hsfData; *var_r31->hsfData = *temp_r30->hsfData; - temp_r3_2 = Hu3DObjDuplicate(var_r31->hsfData, (u32)var_r31->unk_4C); + temp_r3_2 = Hu3DObjDuplicate(var_r31->hsfData, var_r31->unk_4C); var_r31->hsfData->root = (HsfObject*)((u32)temp_r3_2 + ((u32)var_r31->hsfData->root - (u32)var_r31->hsfData->object)); var_r31->hsfData->object = temp_r3_2; var_r31->unk_48 = temp_r30->unk_48; @@ -487,7 +487,7 @@ s16 Hu3DHookFuncCreate(ModelHookFunc hook) { return -1; } var_r31->hook = hook; - var_r31->unk_48 = (HsfData *)(var_r29 + 10000); + var_r31->unk_48 = var_r29+10000; var_r31->attr = 0x10; var_r31->motion_attr = 0; var_r31->pos.x = var_r31->pos.y = var_r31->pos.z = 0.0f; @@ -536,7 +536,7 @@ void Hu3DModelKill(s16 arg0) { layerNum[temp_r31->layer] -= 1; if ((temp_r31->attr & 0x10) != 0) { - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); if ((temp_r31->attr & 0x20) != 0) { copy = temp_r31->unk_120; HuSprAnimKill(copy->unk_44); @@ -551,14 +551,14 @@ void Hu3DModelKill(s16 arg0) { if (temp_r31->unk_08 != -1) { Hu3DMotionKill(temp_r31->unk_08); } - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); temp_r31->hsfData = NULL; return; } Hu3DAnimModelKill(arg0); if (temp_r31->unk_24 != -1) { HuMemDirectFree(temp_r31->hsfData); - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_4C); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_4C); var_r28 = temp_r31->unk_C8; temp_r31->hsfData = var_r28; } @@ -586,7 +586,7 @@ void Hu3DModelKill(s16 arg0) { } if (temp_r31->unk_20 != -1 && Hu3DMotionKill(temp_r31->unk_20) == 0) { Hu3DMotion[temp_r31->unk_20].unk_02 = -1; - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); temp_r31->hsfData = NULL; if (modelKillAllF == 0) { HuMemDCFlush(HEAP_DATA); @@ -594,7 +594,7 @@ void Hu3DModelKill(s16 arg0) { return; } HuMemDirectFree(temp_r31->hsfData); - HuMemDirectFreeNum(HEAP_DATA, (u32) temp_r31->unk_48); + HuMemDirectFreeNum(HEAP_DATA, temp_r31->unk_48); for (i = 0; i < temp_r31->unk_26; i++) { Hu3DGLightKill(temp_r31->unk_28[i]); } @@ -2103,7 +2103,7 @@ void Hu3DMipMapSet(char* arg0, s16 arg1, s32 arg2, f32 arg8) { for ( i = 0, var_r24 = i; i < temp_r3->bmpNum; i++, var_r30++) { var_r24 += var_r30->dataSize; } - var_r23 = HuMemDirectMallocNum(HEAP_DATA, var_r24, (u32)temp_r25->unk_48); + var_r23 = HuMemDirectMallocNum(HEAP_DATA, var_r24, temp_r25->unk_48); temp_r22 = var_r23; var_r30 = temp_r3->bmp; temp_r31->data = temp_r22;