From 1c921e92ae97f2371961a51308b5fef6a7179b9e Mon Sep 17 00:00:00 2001 From: gamemasterplc Date: Sun, 16 Jun 2024 11:44:05 -0500 Subject: [PATCH] Decompile m431dll/object.c --- config/GMPE01_00/rels/m431Dll/symbols.txt | 68 +- configure.py | 2 +- include/REL/m431Dll.h | 109 +- src/REL/m431Dll/main.c | 42 +- src/REL/m431Dll/object.c | 1268 +++++++++++++++++++++ 5 files changed, 1404 insertions(+), 85 deletions(-) create mode 100644 src/REL/m431Dll/object.c diff --git a/config/GMPE01_00/rels/m431Dll/symbols.txt b/config/GMPE01_00/rels/m431Dll/symbols.txt index 10f102a4..8ff48a81 100644 --- a/config/GMPE01_00/rels/m431Dll/symbols.txt +++ b/config/GMPE01_00/rels/m431Dll/symbols.txt @@ -169,37 +169,37 @@ lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x8 scope:local data: 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 -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:0x8 data:double -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_1B8 = .rodata:0x000001B8; // type:object size:0x8 data:double -lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 data:2byte -lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 data:float -lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 data:double -lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 data:double -lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 data:float -lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 data:float -lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 data:float -lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 data:float -lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 data:float -lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 data:float -lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 data:float -lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 data:float -lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 data:float -lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 data:float -lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 data:float -lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 data:float -lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 data:float -lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 data:double -lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 data:float -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_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 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:0x8 scope:local data:double +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_1B8 = .rodata:0x000001B8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1C0 = .rodata:0x000001C0; // type:object size:0x8 scope:local data:2byte +lbl_1_rodata_1C8 = .rodata:0x000001C8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1D0 = .rodata:0x000001D0; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1D8 = .rodata:0x000001D8; // type:object size:0x8 scope:local data:double +lbl_1_rodata_1E0 = .rodata:0x000001E0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E4 = .rodata:0x000001E4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1E8 = .rodata:0x000001E8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1EC = .rodata:0x000001EC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F0 = .rodata:0x000001F0; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F4 = .rodata:0x000001F4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1F8 = .rodata:0x000001F8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_1FC = .rodata:0x000001FC; // type:object size:0x4 scope:local data:float +lbl_1_rodata_200 = .rodata:0x00000200; // type:object size:0x4 scope:local data:float +lbl_1_rodata_204 = .rodata:0x00000204; // type:object size:0x4 scope:local data:float +lbl_1_rodata_208 = .rodata:0x00000208; // type:object size:0x4 scope:local data:float +lbl_1_rodata_20C = .rodata:0x0000020C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_210 = .rodata:0x00000210; // type:object size:0x4 scope:local data:float +lbl_1_rodata_218 = .rodata:0x00000218; // type:object size:0x8 scope:local data:double +lbl_1_rodata_220 = .rodata:0x00000220; // type:object size:0x4 scope:local data:float +lbl_1_rodata_228 = .rodata:0x00000228; // type:object size:0x8 scope:local data:double +lbl_1_rodata_230 = .rodata:0x00000230; // type:object size:0x4 scope:local 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:0x4 @@ -223,11 +223,11 @@ lbl_1_data_174 = .data:0x00000174; // type:object size:0x10 scope:local data:str 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_1D4 = .data:0x000001D4; // type:object size:0x20 data:float lbl_1_data_1F4 = .data:0x000001F4; // type:object size:0x20 -lbl_1_data_214 = .data:0x00000214; // type:object size:0x19 data:string +lbl_1_data_214 = .data:0x00000214; // type:object size:0x19 scope:local data:string lbl_1_data_230 = .data:0x00000230; // type:object size:0x20 -lbl_1_data_250 = .data:0x00000250; // type:object size:0x10 +lbl_1_data_250 = .data:0x00000250; // type:object size:0x10 scope:local lbl_1_data_260 = .data:0x00000260; // type:object size:0x8 lbl_1_data_268 = .data:0x00000268; // type:object size:0x4 data:2byte lbl_1_bss_0 = .bss:0x00000000; // type:object size:0x1 data:byte diff --git a/configure.py b/configure.py index 06f12fe6..690937cf 100644 --- a/configure.py +++ b/configure.py @@ -1072,7 +1072,7 @@ config.libs = [ objects={ Object(Matching, "REL/executor.c"), Object(Matching, "REL/m431Dll/main.c"), - Object(NonMatching, "REL/m431Dll/object.c"), + Object(Matching, "REL/m431Dll/object.c"), }, ), Rel( diff --git a/include/REL/m431Dll.h b/include/REL/m431Dll.h index a886a409..78bcb746 100644 --- a/include/REL/m431Dll.h +++ b/include/REL/m431Dll.h @@ -3,6 +3,9 @@ #include "game/object.h" +#define rand16() ((rand8() << 8)|(rand8())) + + typedef struct bss_12C_inner { Vec unk0; float unkC; @@ -11,34 +14,122 @@ typedef struct bss_12C_inner { typedef struct bss_12c_struct { s16 unk0[2]; - u8 unk4[0x8]; + s16 unk4; + s16 unk6; + s16 unk8; Vec unkC; - u8 unk18[4]; - Bss12CInner unk1C[2]; - u8 unk44[0xF0]; + float unk18; + Bss12CInner unk1C[10]; + float unkE4[10][2]; s16 unk134[2]; s16 unk138[2]; } Bss12CStruct; typedef struct bss_61C_work { - u8 unk0[0x4]; + u32 unk0; s16 unk4; - s16 unk6[2]; + s16 unk6; + s16 unk8; s16 unkA; - u8 unkC[8]; + s16 unkC; + float unk10; struct bss_61C_work *unk14; - u8 unk18[0x46]; + Vec unk18; + Vec unk24; + float unk30; + omObjFunc unk34; + s16 unk38; + s16 unk3A; + u32 unk3C; + s16 unk40; + s16 unk42; + Vec unk44; + s16 unk50; + s8 unk52; + u32 unk54; + s16 unk58; + s16 unk5A; + s16 unk5C; s16 unk5E[8]; s16 unk6E; s16 unk70; s16 unk72; - u8 unk74[0x44]; + u32 unk74; + s16 unk78; + s16 unk7A; + s16 unk7C; + s16 unk7E; + s16 unk80; + s16 unk82; + s16 unk84; + s16 unk86; + float unk88; + Vec unk8C; + float unk98; + Vec unk9C; + float unkA8; + s32 unkAC; + s16 unkB0; + s16 unkB2; + s8 unkB4; + s8 unkB5; } Bss61CWork; +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; + +extern s32 lbl_1_bss_4; extern Bss12CStruct lbl_1_bss_12C[4]; extern omObjData *lbl_1_bss_61C[4]; extern float lbl_1_data_1D0; +void fn_1_2000(s16 arg0); +void fn_1_2050(u16 arg0, u16 arg1); +u16 fn_1_2090(u16 arg0); +s16 fn_1_4724(void); +u32 fn_1_4738(s16 arg0, s16 arg1); +s16 fn_1_4B14(s16 arg0, s16 arg1, s16 *arg2); +s16 fn_1_4CDC(s16 arg0, s16 arg1); + +void fn_1_5B70(float arg0, float arg1, float arg2, s16 arg3, unkHook72B4Data18 arg4, s16 arg5); + +void fn_1_6184(Vec *arg0, Bss12CInner *arg1); +float fn_1_6504(float arg0, float arg1, float arg2); + void fn_1_7ABC(Process *objman); s32 fn_1_7FB8(s16 arg0); void fn_1_A7D0(s16 arg0); diff --git a/src/REL/m431Dll/main.c b/src/REL/m431Dll/main.c index 7d30afcd..3c6959c0 100644 --- a/src/REL/m431Dll/main.c +++ b/src/REL/m431Dll/main.c @@ -18,7 +18,6 @@ #include "rel_sqrt_consts.h" -#define rand16() ((rand8() << 8)|(rand8())) typedef struct bss_5C_struct { s16 unk0[6]; @@ -267,42 +266,6 @@ s32 fn_1_7B0(void) 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); @@ -400,9 +363,7 @@ void fn_1_A44(omObjData *object) 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) @@ -1174,7 +1135,6 @@ void fn_1_3540(Work2110 *arg0) 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) { diff --git a/src/REL/m431Dll/object.c b/src/REL/m431Dll/object.c new file mode 100644 index 00000000..78687d3a --- /dev/null +++ b/src/REL/m431Dll/object.c @@ -0,0 +1,1268 @@ +#include "game/hsfman.h" +#include "game/hsfmotion.h" +#include "game/chrman.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" + +typedef struct bss_struct_62C { + u8 unk0; + float unk4; +} BssStruct62C; + +BssStruct62C lbl_1_bss_62C[10]; +omObjData *lbl_1_bss_61C[4]; +Bss12CStruct lbl_1_bss_12C[4]; +s32 lbl_1_bss_AC[16][2]; +u32 lbl_1_bss_9C[4]; +s8 lbl_1_bss_98; + +float lbl_1_data_1D0 = 18; +float lbl_1_data_1D4[8] = { + 30.000002f, + 0, + 20.0f, + 0, + 20.0f, + 50.0f, + 20.0f, + 30.000002f +}; + +u32 lbl_1_data_1F4[8] = { + 0x5F0000, + 0x5F0002, + 0x5F0003, + -1, + 0x5F0048, + 0x5F0049, + 0x5F0017, + 0x5F0072 +}; + +char *lbl_1_data_230[8] = { + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r", + "test11_tex_we-itemhook-r" +}; + +void fn_1_858C(omObjData *object); +void fn_1_9440(omObjData *object); + +void fn_1_B384(Process *objman); + +void fn_1_7ABC(Process *objman) +{ + Vec sp20; + Vec sp14; + Vec sp8; + Bss12CStruct *temp_r31; + s16 temp_r30; + s16 temp_r29; + BssStruct62C *temp_r28; + omObjData *temp_r26; + omMakeGroupEx(objman, 0, 4); + omGetGroupMemberListEx(objman, 0); + memset(lbl_1_bss_12C, 0, sizeof(lbl_1_bss_12C)); + for(temp_r30=0, temp_r29=0; temp_r30<4; temp_r30++) { + temp_r31 = &lbl_1_bss_12C[GWPlayerCfg[temp_r30].group]; + if(GWPlayerCfg[temp_r30].group != 0 && GWPlayerCfg[temp_r30].group != 1) { + break; + } + temp_r31->unk0[temp_r31->unk8++] = temp_r30; + if(temp_r31->unk8 == 2) { + temp_r29++; + } + } + if(temp_r29 != 2) { + GWPlayerCfg[0].group = GWPlayerCfg[1].group = 0; + GWPlayerCfg[2].group = GWPlayerCfg[3].group = 1; + lbl_1_bss_12C[0].unk0[0] = 0; + lbl_1_bss_12C[0].unk0[1] = 1; + lbl_1_bss_12C[0].unk8 = 2; + lbl_1_bss_12C[1].unk0[0] = 2; + lbl_1_bss_12C[1].unk0[1] = 3; + lbl_1_bss_12C[1].unk8 = 2; + } + for(temp_r30=0, temp_r28 = &lbl_1_bss_62C[0]; temp_r30<10; temp_r30++, temp_r28++) { + temp_r28->unk0 = 1; + temp_r28->unk4 = lbl_1_data_1D0+(temp_r30*36.0f); + } + lbl_1_bss_12C[0].unkC.x = -317; + lbl_1_bss_12C[1].unkC.x = 317; + lbl_1_bss_12C[0].unkC.y = lbl_1_bss_12C[1].unkC.y = 0; + lbl_1_bss_12C[0].unkC.z = lbl_1_bss_12C[1].unkC.z = 100; + lbl_1_bss_12C[0].unk18 = lbl_1_bss_12C[1].unk18 = 230; + for(temp_r30=0, temp_r31 = &lbl_1_bss_12C[0]; temp_r30<2; temp_r30++, temp_r31++) { + sp8.x = temp_r31->unkC.x; + sp8.y = temp_r31->unkC.y; + sp8.z = temp_r31->unkC.z; + for(temp_r29=0; temp_r29<10; temp_r29++) { + sp14.x = sp20.x = (temp_r31->unk18*sind(lbl_1_bss_62C[temp_r29].unk4))+sp8.x; + sp14.z = sp20.z = (temp_r31->unk18*cosd(lbl_1_bss_62C[temp_r29].unk4))+sp8.z; + sp14.y = sp8.y; + sp20.y = sp8.y-50; + fn_1_6184(&sp8, &temp_r31->unk1C[temp_r29]); + temp_r31->unkE4[temp_r29][0] = sp14.x; + temp_r31->unkE4[temp_r29][1] = sp14.z; + } + temp_r31->unk138[0] = 0; + } + for(temp_r30=0; temp_r30<4; temp_r30++) { + OSReport("PNo:%d Grp:%d\n", temp_r30, GWPlayerCfg[temp_r30].group); + temp_r26 = omAddObjEx(objman, 99, 0, 0, -1, fn_1_858C); + lbl_1_bss_61C[temp_r30] = omAddObjEx(objman, 100, 9, 8, 0, fn_1_9440); + lbl_1_bss_61C[temp_r30]->work[0] = temp_r26->work[0] = temp_r30; + + } + fn_1_B384(objman); +} + +s16 lbl_1_data_260[4] = { 0, 0, 0, 0 }; +s16 lbl_1_data_268[2] = { 0, 9 }; + +s16 fn_1_8AD4(Bss61CWork *arg0, s16 arg1, s16 arg2, s16 *arg3, u8 arg4); +void fn_1_8CC0(omObjData *object); + +s16 fn_1_B4F8(float arg0); +s16 fn_1_B530(s16 arg0); + +s32 fn_1_7FB8(s16 arg0) +{ + Bss61CWork *temp_r31; + Bss12CStruct *temp_r30 = &lbl_1_bss_12C[arg0]; + s16 sp18[4] = { 0, 9, 9, 0}; + + s16 sp14[2]; + s16 sp10[2]; + s16 spC[2]; + s16 spA; + s16 temp_r29; + s32 temp_r28; + if(lbl_1_bss_98 != 0) { + (void)lbl_1_bss_98; + } else { + for(temp_r29=0, temp_r28=0; temp_r29<2; temp_r29++) { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[temp_r29]]->data; + if((temp_r31->unk0 & 0xC0) || (temp_r31->unk0 & 0x600)) { + temp_r28 = 1; + } + fn_1_8CC0(lbl_1_bss_61C[temp_r30->unk0[temp_r29]]); + sp10[temp_r29] = temp_r31->unk40 = fn_1_B4F8(temp_r31->unk44.y); + spC[temp_r29] = fn_1_B530(temp_r31->unk40); + + } + if(temp_r28 != 0) { + return 0; + } + if(spC[0] != spC[1]) { + if(spC[0] == 0) { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[0]]->data; + temp_r31->unk84 = lbl_1_data_268[0]; + temp_r31->unk14->unk84 = lbl_1_data_268[1]; + } else { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[1]]->data; + temp_r31->unk84 = lbl_1_data_268[0]; + temp_r31->unk14->unk84 = lbl_1_data_268[1]; + } + } else { + if(spC[0] == 0) { + if(sp10[0] < sp10[1]) { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[0]]->data; + temp_r31->unk84 = lbl_1_data_268[1]; + temp_r31->unk14->unk84 = lbl_1_data_268[0]; + } else { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[1]]->data; + temp_r31->unk84 = lbl_1_data_268[1]; + temp_r31->unk14->unk84 = lbl_1_data_268[0]; + } + } else { + if(sp10[0] > sp10[1]) { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[0]]->data; + temp_r31->unk84 = lbl_1_data_268[0]; + temp_r31->unk14->unk84 = lbl_1_data_268[1]; + } else { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[1]]->data; + temp_r31->unk84 = lbl_1_data_268[0]; + temp_r31->unk14->unk84 = lbl_1_data_268[1]; + } + } + } + lbl_1_bss_98++; + } + for(temp_r29=0; temp_r29<2; temp_r29++) { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[temp_r29]]->data; + temp_r31->unkC = 0; + temp_r31->unk86 = 1; + temp_r31->unkB4 = 0; + temp_r31->unkB5 = 0; + sp14[temp_r29] = fn_1_8AD4(temp_r31, temp_r31->unk40, temp_r31->unk84, &spA, 0); + if(sp14[temp_r29] != 0) { + temp_r31->unkB4 = (spA == 0) ? 50 : -50; + } else { + temp_r31->unk86 = 0; + } + fn_1_8CC0(lbl_1_bss_61C[temp_r30->unk0[temp_r29]]); + sp14[temp_r29] = (temp_r31->unk0 & 0xC0) ? 1 : 0; + if(temp_r31->unk0 & 0x600) { + sp14[temp_r29] = 1; + } + } + if(sp14[0] == 0 && sp14[1] == 0) { + return 1; + } + return 0; +} + +s32 fn_1_8474(s16 arg0) +{ + s32 spC[2]; + s32 temp_r31; + Bss61CWork *temp_r30; + Bss12CStruct *temp_r29; + temp_r29 = &lbl_1_bss_12C[arg0]; + for(temp_r31=0; temp_r31<2; temp_r31++) { + temp_r30 = lbl_1_bss_61C[temp_r29->unk0[temp_r31]]->data; + fn_1_8CC0(lbl_1_bss_61C[temp_r29->unk0[temp_r31]]); + if((temp_r30->unk0 & 0xC0) || (temp_r30->unk0 & 0x600) || (temp_r30->unk0 & 0x20)) { + spC[temp_r31] = 1; + } else { + spC[temp_r31] = 0; + } + } + if(spC[0] == 0 && spC[1] == 0) { + return 1; + } + return 0; +} + +void fn_1_8790(omObjData *object); +Bss61CWork *fn_1_AAF0(omObjData *object); +u32 fn_1_ABA0(omObjData *object, u32 arg1); + +void fn_1_858C(omObjData *object) +{ + Bss61CWork *temp_r31; + u16 temp_r29; + if(lbl_1_data_260[object->work[0]] == 0) { + return; + } + temp_r31 = lbl_1_bss_61C[object->work[0]]->data; + temp_r31->unkB0 = HuPadBtn[temp_r31->unk6]; + temp_r31->unkB2 = HuPadBtnDown[temp_r31->unk6]; + temp_r31->unkB4 = HuPadStkX[temp_r31->unk6]; + temp_r31->unkB5 = HuPadStkY[temp_r31->unk6]; + if(fn_1_2090(1) != 0) { + return; + } + temp_r29 = fn_1_2090(28); + if(temp_r29 == 12 || temp_r29 == 16) { + if(fn_1_ABA0(lbl_1_bss_61C[object->work[0]], 0x600) == 0 && lbl_1_data_260[object->work[0]] != 0) { + temp_r31 = lbl_1_bss_61C[object->work[0]]->data; + if(temp_r31->unk14 == 0) { + temp_r31->unk14 = fn_1_AAF0(lbl_1_bss_61C[object->work[0]]); + } + if(GWPlayerCfg[temp_r31->unk4].iscom) { + fn_1_8790(lbl_1_bss_61C[object->work[0]]); + } + fn_1_8CC0(lbl_1_bss_61C[object->work[0]]); + } + + } +} + +void fn_1_8790(omObjData *object) +{ + Bss61CWork *temp_r31; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + u32 temp_r26; + s16 sp18[9]; + s16 sp8[8]; + temp_r31 = object->data; + temp_r31->unkB4 = temp_r31->unkB5 = 0; + temp_r31->unkB2 = 0; + if(fn_1_2090(224)) { + return; + } + sp18[8] = 999; + for(temp_r30=0, temp_r28=0, temp_r29=8; temp_r30unk6E; temp_r30++) { + temp_r26 = fn_1_4738(temp_r31->unkA, temp_r31->unk5E[temp_r30]); + if(temp_r26 & 0x1) { + temp_r31->unk5E[temp_r30] = -1; + } + sp18[temp_r30] = fn_1_8AD4(temp_r31, temp_r31->unk40, temp_r31->unk5E[temp_r30], &sp8[temp_r30], 1); + if(sp18[temp_r30] < sp18[temp_r29]) { + temp_r29 = temp_r30; + } + if(temp_r31->unk5E[temp_r30] == -1) { + temp_r28++; + } + } + if(temp_r28 == temp_r31->unk6E) { + return; + } + if(temp_r31->unk70 < temp_r31->unk72 && temp_r29 < 4) { + for(temp_r30=4; temp_r30unk6E; temp_r30++) { + if(sp18[temp_r30] < 10) { + temp_r29 = temp_r30; + break; + } + } + } + if(temp_r31->unk7C == 0) { + if(GWPlayerCfg[temp_r31->unk14->unk4].iscom) { + if(temp_r31->unk4 > temp_r31->unk14->unk4 && (temp_r31->unk0 & 0x20)) { + temp_r31->unk7C = 1; + } + } else { + if(temp_r31->unk0 & 0x20) { + temp_r31->unk7C = 1; + } + } + } + if(temp_r31->unk7C && temp_r28 == temp_r31->unk6E-1) { + if(++temp_r31->unk7C > 120) { + temp_r31->unk7C = 0; + } + if((temp_r31->unk14->unk0 & 0xC0) == 0x40) { + sp8[temp_r29] = 0; + } else { + if((temp_r31->unk14->unk0 & 0xC0) == 0x80) { + sp8[temp_r29] = 1; + } else { + temp_r31->unk7C = 0; + } + } + } + if(sp18[temp_r29] != -1) { + temp_r31->unkB4 = (sp8[temp_r29] == 0) ? 50 : -50; + } else { + if(temp_r31->unk44.z <= 15.0f) { + temp_r31->unkB2 = PAD_BUTTON_A; + } + } +} + +s16 fn_1_8AD4(Bss61CWork *arg0, s16 arg1, s16 arg2, s16 *arg3, u8 arg4) +{ + s16 temp_r31; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r26; + s16 temp_r25; + + if(arg2 == -1) { + *arg3 = rand16()%2; + temp_r29 = 99; + } else if(arg1 == arg2) { + *arg3 = -1; + temp_r29 = (arg4) ? -1 : 0; + } else { + temp_r28 = temp_r27 = temp_r26 = temp_r25 = 0; + temp_r31 = arg1; + do { + temp_r31++; + temp_r28++; + if(temp_r31 >= 10) { + temp_r31 = 0; + } + if(arg4 && temp_r31 == arg0->unk14->unk40) { + temp_r26 = 99; + break; + } + } while(temp_r31 != arg2); + temp_r31 = arg1; + do { + temp_r31--; + temp_r27++; + if(temp_r31 < 0) { + temp_r31 = 9; + } + if(arg4 && temp_r31 == arg0->unk14->unk40) { + temp_r25 = 99; + break; + } + } while(temp_r31 != arg2); + if(temp_r26 != temp_r25) { + temp_r28 += temp_r26; + temp_r27 += temp_r25; + if(temp_r28 < temp_r27) { + *arg3 = 0; + temp_r29 = temp_r28; + } else { + *arg3 = 1; + temp_r29 = temp_r27; + } + } else { + if(temp_r28 < temp_r27) { + *arg3 = 0; + temp_r29 = temp_r28; + } else { + *arg3 = 1; + temp_r29 = temp_r27; + } + temp_r29 += 10; + } + } + return temp_r29; +} + +s16 fn_1_938C(omObjData *object); +void fn_1_ABC0(omObjData *object, u32 arg1, u32 arg2); + +void fn_1_8CC0(omObjData *object) +{ + float temp_f31; + float temp_f30; + float temp_f28; + + Bss61CWork *temp_r31; + s16 temp_r30; + s16 temp_r29; + s16 temp_r28; + s16 temp_r27; + s16 temp_r26; + + + Vec sp10; + u16 sp8; + Bss12CInner *temp_r25; + temp_r31 = object->data; + if(temp_r31->unk38 == 3 || temp_r31->unk38 == 5) { + return; + } + sp8 = fn_1_2090(28); + if((temp_r31->unk0 & 0x20) || (fn_1_2090(28) != 12 && temp_r31->unk86 == 0)) { + temp_r28 = temp_r26 = 0; + } else { + temp_r28 = temp_r31->unkB4; + temp_r26 = temp_r31->unkB5; + } + temp_r30 = temp_r29 = 0; + if(temp_r31->unk52 == 0) { + switch(temp_r31->unkC) { + case 0: + if(temp_r28 > 10) { + temp_r30 = 1; + } else if(temp_r28 < -10) { + temp_r29 = 1; + } + break; + + case 1: + if(ABS(temp_r28) >= 10 || ABS(temp_r26) >= 10) { + temp_r25 = &lbl_1_bss_12C[temp_r31->unkA].unk1C[temp_r31->unk40]; + sp10.x = temp_r28+lbl_1_bss_12C[temp_r31->unkA].unkE4[temp_r31->unk40][0]; + sp10.z = lbl_1_bss_12C[temp_r31->unkA].unkE4[temp_r31->unk40][1]-temp_r26; + temp_f28 = (temp_r25->unk0.x*sp10.x)+(temp_r25->unk0.z*sp10.z)-temp_r25->unkC; + if(temp_f28 > 0.0f) { + if(temp_r31->unk50 != temp_r31->unk40) { + if(temp_r31->unk54 == 128) { + temp_r31->unk52 = 1; + } + } else { + temp_r30 = 1; + } + } else { + if(temp_f28 < 0.0f) { + if(temp_r31->unk50 != temp_r31->unk40) { + if(temp_r31->unk54 == 64) { + temp_r31->unk52 = 1; + } + + } else { + temp_r29 = 1; + } + } + } + } + break; + } + } else { + if(temp_r31->unk58 != temp_r28 || temp_r31->unk5A != temp_r26) { + temp_r31->unk52 = 0; + } + } + temp_f31 = temp_r31->unk24.x-temp_r31->unk14->unk24.x; + temp_f30 = temp_r31->unk24.z-temp_r31->unk14->unk24.z; + temp_f28 = VECMagPoint(temp_f31, 0, temp_f30); + if(temp_f28 < 90 && (temp_r31->unk0 & 0x20) == 0) { + if(fn_1_938C(object) == 0) { + temp_r30 = 0; + temp_r29 = 1; + } else { + temp_r30 = 1; + temp_r29 = 0; + } + temp_r31->unk0 |= 0x20; + } else { + if(temp_r31->unk54 == 64) { + temp_r27 = temp_r31->unk42-temp_r31->unk40; + if(temp_r27 < 0) { + temp_r27 += 10; + } + if(temp_r27 > 1) { + temp_r31->unk42 = 1; + } + } else { + temp_r27 = temp_r31->unk40-temp_r31->unk42; + if(temp_r27 < 0) { + temp_r27 += 10; + } + if(temp_r27 > 1) { + temp_r31->unk42 = 9; + } + } + } + if(temp_r30) { + temp_r30 = 0; + if(temp_r31->unk54 == 64) { + if(temp_r31->unk44.z <= 2.0f) { + temp_r30 = 1; + } + } else if(temp_r31->unk54 == 128) { + if(temp_r31->unk40 != temp_r31->unk42) { + temp_r31->unk40 = temp_r31->unk42; + } + temp_r30 = 1; + } else { + temp_r30 = 1; + } + if(temp_r30) { + fn_1_ABC0(object, 192, 64); + temp_r31->unk42 = temp_r31->unk40+1; + if(temp_r31->unk42 >= 10) { + temp_r31->unk42 = 0; + } + } + } else if(temp_r29) { + temp_r29 = 0; + if(temp_r31->unk54 == 128) { + if(temp_r31->unk44.z <= 2.0f) { + temp_r29 = 1; + } + } else if(temp_r31->unk54 == 64) { + if(temp_r31->unk40 != temp_r31->unk42) { + temp_r31->unk40 = temp_r31->unk42; + } + temp_r29 = 1; + } else { + temp_r29 = 1; + } + if(temp_r29) { + fn_1_ABC0(object, 192, 128); + temp_r31->unk42 = temp_r31->unk40-1; + if(temp_r31->unk42 < 0) { + temp_r31->unk42 = 9; + } + } + } + temp_r31->unk50 = temp_r31->unk40; + temp_r31->unk54 = fn_1_ABA0(object, 192); + temp_r31->unk58 = temp_r28; + temp_r31->unk5A = temp_r26; +} + +s16 fn_1_938C(omObjData *object) +{ + Bss61CWork *temp_r31; + float temp_f31; + temp_r31 = object->data; + temp_f31 = temp_r31->unk44.y-temp_r31->unk14->unk44.y; + if(temp_f31 > 180.0f) { + temp_f31 -= 360.0f; + } else if(temp_f31 < -180.0f) { + temp_f31 = 360.0f+temp_f31; + } + return (temp_f31 <= 0.0f) ? 0 : 1; +} + +void fn_1_98D4(omObjData *object); + +void fn_1_B0E8(omObjData *object, s16 arg1, u32 arg2); + +void fn_1_9440(omObjData *object) +{ + Bss61CWork *temp_r31; + Bss12CStruct *temp_r29; + s16 temp_r28; + object->data = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(Bss61CWork), MEMORY_DEFAULT_NUM); + temp_r31 = object->data; + memset(temp_r31, 0, sizeof(Bss61CWork)); + object->stat |= 0x100; + temp_r31->unk4 = object->work[0]; + temp_r31->unk6 = GWPlayerCfg[temp_r31->unk4].pad_idx; + temp_r31->unk8 = GWPlayerCfg[temp_r31->unk4].character; + temp_r31->unkA = GWPlayerCfg[temp_r31->unk4].group; + temp_r31->unkC = (GWPlayerCfg[temp_r31->unk4].iscom) ? 0 : 1; + temp_r31->unkAC = 0; + object->model[0] = CharModelCreate(temp_r31->unk8, 2); + Hu3DModelLayerSet(object->model[0], 0); + Hu3DModelShadowSet(object->model[0]); + CharModelStepTypeSet(temp_r31->unk8, 0); + for(temp_r28=0; temp_r28<8; temp_r28++) { + if(lbl_1_data_1F4[temp_r28] != -1) { + object->motion[temp_r28] = CharModelMotionCreate(temp_r31->unk8, lbl_1_data_1F4[temp_r28]); + } else { + object->motion[temp_r28] = Hu3DJointMotionFile(object->model[0], 0x3E0021+temp_r31->unk8); + } + if(temp_r28 == 4 || temp_r28 == 5) { + CharModelVoiceEnableSet(temp_r31->unk8, object->motion[temp_r28], 0); + } + } + CharModelMotionDataClose(temp_r31->unk8); + temp_r29 = &lbl_1_bss_12C[temp_r31->unkA]; + for(temp_r28=0; temp_r28<8; temp_r28++) { + temp_r31->unk5E[temp_r28] = -1; + } + if(temp_r31->unkA == 0) { + if(temp_r29->unk0[0] == object->work[0]) { + temp_r31->unk44.y = lbl_1_bss_62C[9].unk4; + } else { + temp_r31->unk44.y = lbl_1_bss_62C[4].unk4; + } + } else { + if(temp_r29->unk0[0] == object->work[0]) { + temp_r31->unk44.y = lbl_1_bss_62C[5].unk4; + } else { + temp_r31->unk44.y = lbl_1_bss_62C[0].unk4; + } + } + temp_r31->unk40 = (temp_r31->unk44.y/360.0f)*10.0f; + temp_r31->unk42 = temp_r31->unk40; + temp_r31->unk10 = lbl_1_data_1D4[temp_r31->unk8]; + temp_r31->unk24.x = ((temp_r29->unk18+temp_r31->unk10)*sind(temp_r31->unk44.y))+temp_r29->unkC.x; + temp_r31->unk24.y = temp_r29->unkC.y; + temp_r31->unk24.z = ((temp_r29->unk18+temp_r31->unk10)*cosd(temp_r31->unk44.y))+temp_r29->unkC.z; + temp_r31->unk30 = atan2d(temp_r29->unkC.x-temp_r31->unk24.x, temp_r29->unkC.z-temp_r31->unk24.z); + Hu3DModelPosSet(object->model[0], temp_r31->unk24.x, temp_r31->unk24.y, temp_r31->unk24.z); + Hu3DModelRotSet(object->model[0], 0, temp_r31->unk30, 0); + temp_r31->unk38 = temp_r31->unk3A = -1; + fn_1_B0E8(object, 0, 10); + lbl_1_data_260[object->work[0]] = 1; + object->func = fn_1_98D4; +} + +void fn_1_9A04(omObjData *object); +void fn_1_9C5C(omObjData *object); +void fn_1_A0F8(omObjData *object); +void fn_1_A450(omObjData *object); + +void fn_1_AA40(omObjData *object); + +void fn_1_B130(omObjData *object, s16 arg1, u32 arg2); +void fn_1_B150(omObjData *object, omObjFunc arg1); + +void fn_1_B18C(omObjData *object); + +s32 fn_1_B494(s32 arg0, s32 arg1); + +void fn_1_98D4(omObjData *object) +{ + Vec sp8; + + Bss61CWork *temp_r31; + ModelData *temp_r29; + temp_r31 = object->data; + temp_r29 = &Hu3DData[object->model[0]]; + sp8.x = temp_r31->unk24.x-temp_r29->pos.x; + sp8.z = temp_r31->unk24.z-temp_r29->pos.z; + if((temp_r31->unk0 & 0x600) == 0 || 0.0f != sp8.x || 0.0f != sp8.z || (temp_r31->unk0 & 0x20)) { + fn_1_9A04(object); + fn_1_9C5C(object); + fn_1_A0F8(object); + } else { + fn_1_A450(object); + } + fn_1_B18C(object); + Hu3DModelPosSet(object->model[0], temp_r31->unk24.x, temp_r31->unk24.y, temp_r31->unk24.z); + Hu3DModelRotSet(object->model[0], 0, temp_r31->unk30, 0); + +} + +void fn_1_9A04(omObjData *object) +{ + Bss61CWork *temp_r31; + ModelData *temp_r29; + + temp_r29 = &Hu3DData[object->model[0]]; + temp_r31 = object->data; + if(fn_1_2090(28) != 12 || fn_1_2090(224) != 0) { + return; + } + if(fn_1_4724() == 2) { + return; + } + if(fn_1_ABA0(object, 192) != 0) { + return; + } + if(temp_r31->unk38 == 0) { + if(temp_r29->unk_0C == -1 && temp_r31->unkB2 == PAD_BUTTON_A) { + if(fn_1_4CDC(temp_r31->unkA, temp_r31->unk40)) { + fn_1_B0E8(object, 3, 4); + fn_1_B130(object, 0, 8); + } + } + } else { + if(temp_r31->unk38 == 3) { + if(temp_r29->unk_0C == -1 && temp_r29->unk_64 == 14.0f) { + temp_r31->unk5C = fn_1_4B14(temp_r31->unkA, temp_r31->unk40, &temp_r31->unk7E); + if(temp_r31->unk5C != -1) { + if(temp_r31->unkA == 0) { + HuAudFXPlay(1668); + } else { + HuAudFXPlay(1673); + } + if(temp_r31->unk7E != 0) { + omVibrate(temp_r31->unk4, 12, 6, 6); + if(temp_r31->unkA == 0) { + fn_1_B494(1666, 30); + } else { + fn_1_B494(1671, 30); + } + } else { + if(temp_r31->unkA == 0) { + fn_1_B494(1667, 30); + } else { + fn_1_B494(1672, 30); + } + } + temp_r31->unk70++; + Hu3DModelPosSet(temp_r31->unk5C, 0, 0, 0); + Hu3DModelHookSet(object->model[0], lbl_1_data_230[temp_r31->unk8], temp_r31->unk5C); + fn_1_B150(object, fn_1_AA40); + } + } + } + } +} + +void fn_1_9C5C(omObjData *object) +{ + float temp_f31; + Bss61CWork *temp_r31; + Bss12CStruct *temp_r30; + s8 temp_r29; + u32 temp_r27; + temp_r31 = object->data; + temp_r30 = &lbl_1_bss_12C[temp_r31->unkA]; + temp_r29 = 0; + if((temp_r27 = fn_1_ABA0(object, 192)) == 0) { + return; + } + if(temp_r27 == 192) { + temp_r29 = 1; + } else if(temp_r27 == 64) { + temp_r31->unk44.x += 0.3f; + if(temp_r31->unk44.x > 1.5f) { + temp_r31->unk44.x = 1.5f; + } + temp_r31->unk44.y += temp_r31->unk44.x; + temp_f31 = lbl_1_bss_62C[temp_r31->unk42].unk4; + if(temp_r31->unk40 == 9 && temp_r31->unk42 == 0) { + temp_f31 += 360.0f; + } else { + if(temp_r31->unk44.y >= 360.0f) { + temp_r31->unk44.y -= 360.0f; + } + } + temp_r31->unk44.z = ABS(temp_r31->unk44.y-temp_f31); + if(temp_r31->unk44.y >= temp_f31) { + temp_r29 = 1; + } + } else { + temp_r31->unk44.x -= 0.3f; + if(temp_r31->unk44.x < -1.5f) { + temp_r31->unk44.x = -1.5f; + } + temp_r31->unk44.y += temp_r31->unk44.x; + temp_f31 = lbl_1_bss_62C[temp_r31->unk42].unk4; + if(temp_r31->unk42 == 9 && temp_r31->unk40 == 0) { + if(temp_r31->unk44.y < 0.0f) { + temp_r31->unk44.y += 360.0f; + } else { + temp_f31 -= 360.0f; + } + } else { + if(temp_r31->unk42 == 0 || temp_r31->unk40 == 0) { + if(temp_r31->unk44.y < 0.0f) { + temp_r31->unk44.y += 360.0f; + temp_f31 += 360.0f; + } + } else { + if(temp_r31->unk44.y < 0.0f) { + temp_r31->unk44.y += 360.0f; + } + } + } + temp_r31->unk44.z = ABS(temp_r31->unk44.y-temp_f31); + if(temp_r31->unk44.y <= temp_f31) { + temp_r29 = 1; + } + } + if(temp_r29 != 0) { + temp_r31->unk44.x = 0; + temp_r31->unk44.y = lbl_1_bss_62C[temp_r31->unk42].unk4; + temp_r31->unk0 &= ~0xE0; + } + temp_r31->unk40 = (temp_r31->unk44.y/360.0f)*10.0f; + if(temp_r31->unk40 >= 10) { + temp_r31->unk40 -= 10; + } + temp_r31->unk24.x = ((temp_r30->unk18+temp_r31->unk10)*sind(temp_r31->unk44.y))+temp_r30->unkC.x; + temp_r31->unk24.y = temp_r30->unkC.y; + temp_r31->unk24.z = ((temp_r30->unk18+temp_r31->unk10)*cosd(temp_r31->unk44.y))+temp_r30->unkC.z; + fn_1_B0E8(object, 2, 8); +} + +void fn_1_A0F8(omObjData *object) +{ + Vec sp8; + Bss61CWork *temp_r31; + ModelData *temp_r29; + Bss12CStruct *temp_r28; + s32 temp_r27; + temp_r29 = &Hu3DData[object->model[0]]; + temp_r31 = object->data; + temp_r28 = &lbl_1_bss_12C[temp_r31->unkA]; + temp_r27 = 0; + if(temp_r31->unk38 == 3 || temp_r31->unk38 == 5) { + return; + } + sp8.x = temp_r31->unk24.x-temp_r29->pos.x; + sp8.z = temp_r31->unk24.z-temp_r29->pos.z; + if(0.0f == sp8.x && 0.0f == sp8.z) { + if(fn_1_2090(224) == 0 && temp_r31->unk38 == 2 && (temp_r31->unkB0 & PAD_BUTTON_A)) { + temp_r31->unk7A = 1; + } + if(temp_r31->unk78 == 0) { + sp8.x = temp_r28->unkC.x-temp_r31->unk24.x; + sp8.z = temp_r28->unkC.z-temp_r31->unk24.z; + temp_r31->unk8C.x = temp_r31->unk30; + temp_r31->unk8C.y = atan2d(sp8.x, sp8.z); + temp_r31->unk8C.z = 0; + if(temp_r31->unk8C.y < 0.0f) { + temp_r31->unk8C.y += 360.0f; + } + temp_r31->unk78 = 1; + } + temp_r31->unk8C.z += 0.1f; + if(temp_r31->unk8C.z >= 1.0f) { + temp_r31->unk8C.z = 1.0f; + if(temp_r31->unk7A == 0) { + fn_1_B0E8(object, 0, 8); + } else { + if(fn_1_4CDC(temp_r31->unkA, temp_r31->unk40) && fn_1_2090(28) == 12 && fn_1_2090(224) == 0 && fn_1_4724() < 2) { + fn_1_B0E8(object, 3, 4); + fn_1_B130(object, 0, 8); + temp_r27 = 1; + } + if(temp_r27 == 0) { + fn_1_B0E8(object, 0, 8); + } + } + temp_r31->unk7A = 0; + } + temp_r31->unk30 = fn_1_6504(temp_r31->unk8C.x, temp_r31->unk8C.y, temp_r31->unk8C.z); + } else { + temp_r31->unk78 = temp_r31->unk7A = 0; + temp_r31->unk30 = atan2d(sp8.x, sp8.z); + if(temp_r31->unk30 < 0.0f) { + temp_r31->unk30 += 360.0f; + } + + } + lbl_1_bss_9C[object->work[0]] = temp_r31->unk0 & 0xC0; +} + +void fn_1_A450(omObjData *object) +{ + float temp_f31; + Bss61CWork *temp_r31; + s32 temp_r29; + ModelData *temp_r28; + temp_r28 = &Hu3DData[object->model[0]]; + temp_r31 = object->data; + if(temp_r31->unk38 == 3) { + return; + } + temp_r31->unk7A = 0; + switch(temp_r31->unk80) { + case 0: + temp_r31->unk9C.y += 0.05f; + if(temp_r31->unk9C.y > 1.0f) { + temp_r31->unk9C.y = 1.0f; + temp_r31->unk80++; + } + temp_r29 = fn_1_2090(28); + if(temp_r29 >= 16 && lbl_1_bss_4) { + temp_f31 = CRot.y; + } else { + temp_f31 = 0.0f; + } + if(temp_f31 < 0.0f) { + temp_f31 += 360.0f; + } else if(temp_f31 >= 360.0f) { + temp_f31 -= 360.0f; + } + temp_r31->unk30 = fn_1_6504(temp_r31->unk9C.x, temp_f31, temp_r31->unk9C.y); + fn_1_B0E8(object, 2, 8); + break; + + case 1: + temp_r31->unk3A = -1; + temp_r29 = fn_1_2090(28); + if(temp_r29 >= 16 && lbl_1_bss_4) { + if(temp_r31->unkAC == 0) { + fn_1_B0E8(object, 6, 4); + } else { + fn_1_B0E8(object, 7, 4); + } + temp_r31->unk80 = 99; + } else { + fn_1_B0E8(object, 4, 4); + HuAudCharVoicePlay(temp_r31->unk8, 290); + temp_r31->unk80++; + } + break; + + case 2: + if(temp_r28->unk_0C == -1) { + if(Hu3DMotionTimeGet(object->model[0]) >= Hu3DMotionMaxTimeGet(object->model[0])-1.0f){ + fn_1_B0E8(object, 1, 8); + temp_r31->unk9C.y = 0; + temp_r31->unk80++; + } + } + break; + + case 3: + temp_r31->unk9C.y += 0.05f; + if(temp_r31->unk9C.y > 1.0f) { + if(fn_1_2090(1)) { + fn_1_2050(2, 2); + } + fn_1_B0E8(object, 0, 8); + fn_1_ABC0(object, 0x600, 0); + temp_r31->unk9C.y = 1.0f; + temp_r31->unk80++; + } + if(!temp_r31->unkAC) { + temp_r31->unk30 = fn_1_6504(0, temp_r31->unk9C.x, temp_r31->unk9C.y); + } + break; + } +} + +void fn_1_A7D0(s16 arg0) +{ + Bss61CWork *temp_r31; + Bss12CStruct *temp_r30; + s16 temp_r29; + s16 temp_r28; + temp_r30 = &lbl_1_bss_12C[arg0]; + if(arg0 == -1) { + return; + } + for(temp_r29=0; temp_r29<1; temp_r29++) { + if(temp_r29 == 0) { + temp_r30 = &lbl_1_bss_12C[arg0]; + } else { + temp_r30 = &lbl_1_bss_12C[arg0^1]; + } + for(temp_r28=0; temp_r28unk8; temp_r28++) { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[temp_r28]]->data; + temp_r31->unk80 = 0; + temp_r31->unk9C.x = temp_r31->unk30; + temp_r31->unk9C.y = 0; + temp_r31->unk0 &= ~0x600; + + if(temp_r29 == 0) { + temp_r31->unk0 |= 0x200; + } else { + temp_r31->unk0 |= 0x400; + } + } + } +} + +void fn_1_A904(s16 arg0) +{ + Bss61CWork *temp_r31; + Bss12CStruct *temp_r30; + s16 temp_r29; + s16 temp_r28; + temp_r30 = &lbl_1_bss_12C[arg0]; + if(arg0 == -1) { + return; + } + for(temp_r29=0; temp_r29<1; temp_r29++) { + if(temp_r29 == 0) { + temp_r30 = &lbl_1_bss_12C[arg0]; + } else { + temp_r30 = &lbl_1_bss_12C[arg0^1]; + } + for(temp_r28=0; temp_r28unk8; temp_r28++) { + temp_r31 = lbl_1_bss_61C[temp_r30->unk0[temp_r28]]->data; + temp_r31->unk80 = 1; + temp_r31->unk9C.x = temp_r31->unk30; + temp_r31->unk9C.y = 0; + temp_r31->unk0 &= ~0x600; + + if(temp_r29 == 0) { + temp_r31->unk0 |= 0x200; + } else { + temp_r31->unk0 |= 0x400; + } + temp_r31->unkAC = 1; + } + } +} + +void fn_1_AC80(omObjData *object, Vec *arg1); +void fn_1_B16C(omObjData *object); + +void fn_1_AA40(omObjData *object) +{ + Vec sp8; + Bss61CWork *temp_r30; + temp_r30 = object->data; + fn_1_AC80(object, &sp8); + fn_1_5B70(sp8.x, sp8.y, sp8.z, 20, NULL, -1); + Hu3DModelAttrSet(temp_r30->unk5C, 1); + Hu3DModelHookReset(object->model[0]); + temp_r30->unk5C = -1; + if(temp_r30->unk7E == 0) { + fn_1_B0E8(object, 5, 4); + fn_1_B130(object, 0, 8); + } + fn_1_B16C(object); +} + +Bss61CWork *fn_1_AAF0(omObjData *object) +{ + Bss12CStruct *temp_r31; + s16 temp_r30; + Bss61CWork *temp_r29 = object->data; + s32 sp8 = 0; + + temp_r31= &lbl_1_bss_12C[temp_r29->unkA]; + for(temp_r30=0; temp_r30unk8; temp_r30++) { + if(object->work[temp_r30] != temp_r31->unk0[temp_r30]) { + return lbl_1_bss_61C[temp_r31->unk0[temp_r30]]->data; + } + } + return NULL; +} + +u32 fn_1_ABA0(omObjData *object, u32 arg1) +{ + Bss61CWork *temp_r31 = object->data; + return temp_r31->unk0 & arg1; +} + +void fn_1_ABC0(omObjData *object, u32 arg1, u32 arg2) +{ + Bss61CWork *temp_r31 = object->data; + temp_r31->unk0 &= ~arg1; + temp_r31->unk0 |= arg2; +} + +void fn_1_ABF0(s16 arg0, u32 arg1, u32 arg2) +{ + Bss12CStruct *temp_r31; + Bss61CWork *temp_r30; + s16 temp_r29; + temp_r31= &lbl_1_bss_12C[arg0]; + for(temp_r29=0; temp_r29unk8; temp_r29++) { + temp_r30 = lbl_1_bss_61C[temp_r31->unk0[temp_r29]]->data; + temp_r30->unk0 &= ~arg1; + temp_r30->unk0 |= arg2; + } +} + +void fn_1_AC80(omObjData *object, Vec *arg1) +{ + Bss61CWork *temp_r31; + float temp_f31; + temp_r31 = object->data; + temp_f31 = lbl_1_bss_62C[temp_r31->unk40].unk4; + arg1->x = temp_r31->unk24.x-(50.0*sind(temp_f31)); + arg1->y = temp_r31->unk24.y+100; + arg1->z = temp_r31->unk24.z-(50.0*cosd(temp_f31)); +} + +float fn_1_AD88(s8 arg0) +{ + float temp_f31; + if(arg0 > 65) { + arg0 = 65; + } else if(arg0 < -65) { + arg0 = -65; + } + temp_f31 = arg0; + temp_f31 /= 65.0f; + return temp_f31; +} + +float fn_1_AE04(s8 arg0, s8 arg1) +{ + float temp_f30; + temp_f30 = 0.01539*VECMagPoint(arg0, arg1, 0); + if(temp_f30 > 1.0f) { + temp_f30 = 1.0f; + } + return temp_f30; +} + +void fn_1_B0E8(omObjData *object, s16 arg1, u32 arg2) +{ + Bss61CWork *temp_r31 = object->data; + if(temp_r31->unk38 != arg1) { + temp_r31->unk0 &= ~0xF; + temp_r31->unk38 = arg1; + temp_r31->unk0 |= arg2; + } +} + +void fn_1_B130(omObjData *object, s16 arg1, u32 arg2) +{ + Bss61CWork *temp_r31 = object->data; + temp_r31->unk3A = arg1; + temp_r31->unk3C = arg2; +} + +void fn_1_B150(omObjData *object, omObjFunc arg1) +{ + Bss61CWork *temp_r31 = object->data; + temp_r31->unk34 = arg1; +} + +void fn_1_B16C(omObjData *object) +{ + fn_1_B150(object, NULL); +} + +void fn_1_B18C(omObjData *object) +{ + Bss61CWork *temp_r31; + u32 temp_r28; + ModelData *temp_r27; + omObjFunc temp_r25; + temp_r27 = &Hu3DData[object->model[0]]; + temp_r31 = object->data; + if(temp_r31->unk0 & 0x1) { + if(temp_r31->unk3A != -1 && temp_r27->unk_0C == -1) { + if(Hu3DMotionTimeGet(object->model[0]) >= Hu3DMotionMaxTimeGet(object->model[0])) { + fn_1_B0E8(object, temp_r31->unk3A, temp_r31->unk3C); + temp_r31->unk3A = -1; + if(temp_r31->unk34) { + temp_r25 = temp_r31->unk34; + temp_r25(object); + } + } + } else { + return; + } + } else { + Hu3DModelAttrReset(object->model[0], 0x40000007); + switch(temp_r31->unk0 & 0xC) { + case 0: + temp_r28 = 0x40000002; + break; + + case 4: + temp_r28 = 0; + break; + + case 8: + temp_r28 = 0x40000001; + break; + } + if(temp_r31->unk0 & 0x2) { + Hu3DMotionSet(object->model[0], object->motion[temp_r31->unk38]); + Hu3DModelAttrSet(object->model[0], temp_r28); + } else { + Hu3DMotionShiftSet(object->model[0], object->motion[temp_r31->unk38], 0, 8, temp_r28); + } + temp_r31->unk0 |= 0x1; + } +} + +void fn_1_B404(omObjData *object); + +void fn_1_B384(Process *objman) +{ + s32 *temp_r31; + s32 temp_r30; + omAddObjEx(objman, 100, 0, 0, -1, fn_1_B404); + temp_r31 = &lbl_1_bss_AC[0][0]; + for(temp_r30=0; temp_r30<16; temp_r30++, temp_r31 += 2) { + temp_r31[0] = -1; + temp_r31[1] = -1; + } +} + +void fn_1_B404(omObjData *object) +{ + s32 *temp_r31; + s32 temp_r30; + temp_r31 = &lbl_1_bss_AC[0][0]; + for(temp_r30=0; temp_r30<16; temp_r30++, temp_r31 += 2) { + if(temp_r31[0] >= 0 && temp_r31[1] > 0) { + if(--temp_r31[1] <= 0) { + HuAudFXPlay(temp_r31[0]); + temp_r31[0] = -1; + temp_r31[1] = -1; + } + } + } +} + +s32 fn_1_B494(s32 arg0, s32 arg1) +{ + s32 *temp_r31; + s32 temp_r30; + temp_r31 = &lbl_1_bss_AC[0][0]; + for(temp_r30=0; temp_r30<16; temp_r30++, temp_r31 += 2) { + if(temp_r31[0] == -1) { + break; + } + } + if(temp_r30 >= 16) { + return -1; + } + temp_r31[0] = arg0; + temp_r31[1] = arg1; + return temp_r30; +} + +s16 fn_1_B4F8(float arg0) +{ + return 10.0f*(arg0/360.0f); +} + +s16 fn_1_B530(s16 arg0) +{ + if(arg0 >= 0 && arg0 <= 4) { + return 0; + } + return 1; +}