From dab5f6028ec9e803869fb9ed5168355623f72799 Mon Sep 17 00:00:00 2001 From: Rainchus Date: Thu, 4 Apr 2024 11:48:13 -0500 Subject: [PATCH] match and link m407dll/player.c --- config/GMPE01_00/rels/m407dll/symbols.txt | 140 +++--- configure.py | 2 +- include/game/object.h | 1 + src/REL/m407dll/player.c | 497 ++++++++++++++++++++++ 4 files changed, 569 insertions(+), 71 deletions(-) create mode 100644 src/REL/m407dll/player.c diff --git a/config/GMPE01_00/rels/m407dll/symbols.txt b/config/GMPE01_00/rels/m407dll/symbols.txt index f89ae85a..4098a254 100644 --- a/config/GMPE01_00/rels/m407dll/symbols.txt +++ b/config/GMPE01_00/rels/m407dll/symbols.txt @@ -111,75 +111,75 @@ fn_1_6218 = .text:0x00006218; // type:function size:0x88 fn_1_62A0 = .text:0x000062A0; // type:function size:0x164 _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_28 = .rodata:0x00000028; // type:object size:0x8 data:double -lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x8 data:double -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_48 = .rodata:0x00000048; // type:object size:0x8 data:double -lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 data:double -lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 data:float -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:0x20 -lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 data:double -lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 data:double -lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 data:double -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:0x4 data:float -lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 data:float -lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 data:float -lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 data:float -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_CC = .rodata:0x000000CC; // 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:0x8 data:double -lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 data:double -lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 data:double -lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 data:float -lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 data:double -lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 data:float -lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 data:float -lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 data:float -lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 data:float -lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 data:double -lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x8 data:double -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_154 = .rodata:0x00000154; // type:object size:0x4 data:float -lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 data:float -lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 data:float -lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 data:float -lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 data:float -lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 data:float -lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 data:float -lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 data:float -lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 data:float -lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 data:float -lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 data:float -lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 data:double -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_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_28 = .rodata:0x00000028; // type:object size:0x8 scope:local data:double +lbl_1_rodata_30 = .rodata:0x00000030; // type:object size:0x8 scope:local data:double +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_48 = .rodata:0x00000048; // type:object size:0x8 scope:local data:double +lbl_1_rodata_50 = .rodata:0x00000050; // type:object size:0x8 scope:local data:double +lbl_1_rodata_58 = .rodata:0x00000058; // type:object size:0x4 scope:local data:float +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:0x20 scope:local +lbl_1_rodata_90 = .rodata:0x00000090; // type:object size:0x8 scope:local data:double +lbl_1_rodata_98 = .rodata:0x00000098; // type:object size:0x8 scope:local data:double +lbl_1_rodata_A0 = .rodata:0x000000A0; // type:object size:0x8 scope:local data:double +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:0x4 scope:local data:float +lbl_1_rodata_B4 = .rodata:0x000000B4; // type:object size:0x4 scope:local data:float +lbl_1_rodata_B8 = .rodata:0x000000B8; // type:object size:0x4 scope:local data:float +lbl_1_rodata_BC = .rodata:0x000000BC; // type:object size:0x4 scope:local data:float +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_CC = .rodata:0x000000CC; // 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:0x8 scope:local data:double +lbl_1_rodata_100 = .rodata:0x00000100; // type:object size:0x8 scope:local data:double +lbl_1_rodata_108 = .rodata:0x00000108; // type:object size:0x8 scope:local data:double +lbl_1_rodata_110 = .rodata:0x00000110; // type:object size:0x4 scope:local data:float +lbl_1_rodata_118 = .rodata:0x00000118; // type:object size:0x8 scope:local data:double +lbl_1_rodata_120 = .rodata:0x00000120; // type:object size:0x4 scope:local data:float +lbl_1_rodata_124 = .rodata:0x00000124; // type:object size:0x4 scope:local data:float +lbl_1_rodata_128 = .rodata:0x00000128; // type:object size:0x4 scope:local data:float +lbl_1_rodata_12C = .rodata:0x0000012C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_130 = .rodata:0x00000130; // type:object size:0x8 scope:local data:double +lbl_1_rodata_138 = .rodata:0x00000138; // type:object size:0x8 scope:local data:double +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_154 = .rodata:0x00000154; // type:object size:0x4 scope:local data:float +lbl_1_rodata_158 = .rodata:0x00000158; // type:object size:0x4 scope:local data:float +lbl_1_rodata_15C = .rodata:0x0000015C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_160 = .rodata:0x00000160; // type:object size:0x4 scope:local data:float +lbl_1_rodata_164 = .rodata:0x00000164; // type:object size:0x4 scope:local data:float +lbl_1_rodata_168 = .rodata:0x00000168; // type:object size:0x4 scope:local data:float +lbl_1_rodata_16C = .rodata:0x0000016C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_170 = .rodata:0x00000170; // type:object size:0x4 scope:local data:float +lbl_1_rodata_174 = .rodata:0x00000174; // type:object size:0x4 scope:local data:float +lbl_1_rodata_178 = .rodata:0x00000178; // type:object size:0x4 scope:local data:float +lbl_1_rodata_17C = .rodata:0x0000017C; // type:object size:0x4 scope:local data:float +lbl_1_rodata_180 = .rodata:0x00000180; // type:object size:0x8 scope:local data:double +lbl_1_rodata_188 = .rodata:0x00000188; // type:object size:0x4 scope:local data:float +lbl_1_rodata_18C = .rodata:0x0000018C; // type:object size:0x4 scope:local data:float lbl_1_rodata_190 = .rodata:0x00000190; // type:object size:0x4 data:float lbl_1_rodata_194 = .rodata:0x00000194; // type:object size:0x4 data:float lbl_1_rodata_198 = .rodata:0x00000198; // type:object size:0x4 data:float @@ -214,7 +214,7 @@ lbl_1_data_120 = .data:0x00000120; // type:object size:0x19 data:string lbl_1_data_13C = .data:0x0000013C; // type:object size:0x20 lbl_1_data_15C = .data:0x0000015C; // type:object size:0x28 lbl_1_data_184 = .data:0x00000184; // type:object size:0x8 -lbl_1_data_18C = .data:0x0000018C; // type:object size:0xB data:string +lbl_1_data_18C = .data:0x0000018C; // type:object size:0xB scope:local data:string lbl_1_data_198 = .data:0x00000198; // type:object size:0x34 data:4byte lbl_1_data_1CC = .data:0x000001CC; // type:object size:0x30 lbl_1_data_1FC = .data:0x000001FC; // type:object size:0xC data:float diff --git a/configure.py b/configure.py index a1b33cb7..002e330b 100644 --- a/configure.py +++ b/configure.py @@ -834,7 +834,7 @@ config.libs = [ Rel('m407dll', objects = { Object(Matching, "REL/executor.c"), - Object(NonMatching, "REL/m407dll/player.c"), + Object(Matching, "REL/m407dll/player.c"), Object(NonMatching, "REL/m407dll/map.c"), Object(NonMatching, "REL/m407dll/camera.c"), Object(NonMatching, "REL/m407dll/whomp.c"), diff --git a/include/game/object.h b/include/game/object.h index 99934e45..a78e5b07 100644 --- a/include/game/object.h +++ b/include/game/object.h @@ -26,6 +26,7 @@ typedef enum { #define OM_GET_WORK_PTR(object, type) ((type *)(&((object)->work[0]))) +#define OM_GET_DATA_PTR(object, type) ((type *)(((object)->data))) typedef void (*omObjFunc)(struct om_obj_data *); diff --git a/src/REL/m407dll/player.c b/src/REL/m407dll/player.c new file mode 100644 index 00000000..22257fd6 --- /dev/null +++ b/src/REL/m407dll/player.c @@ -0,0 +1,497 @@ +#include "game/process.h" +#include "game/object.h" +#include "game/gamework_data.h" +#include "game/pad.h" +#include "game/objsub.h" +#include "game/chrman.h" +#include "game/hsfman.h" +#include "rel_sqrt_consts.h" + +//structs +typedef struct unkDominationData { + u8 unk_00; + u8 unk_01; + u8 unk_02; + //padding unk_03 + s32 unk_04; + s32 unk_08; + u8 unk_0C; + //padding unk_0D + f32 unk_10; + f32 unk_14; + f32 unk_18; + s32 unk_1C; + s32 unk_20; + f32 unk_24; + f32 unk_28; + f32 unk_2C; + f32 unk_30; + s32 unk_34; + s32 unk_38; +} unkDominationData; + +s32 pad_20; +Process* lbl_1_bss_18; +omObjData* lbl_1_bss_8[4]; +Process* lbl_1_bss_0[2]; + +//data +typedef void (*ObjFuncs)(omObjData*); + +void fn_1_A88(omObjData* arg0); +void fn_1_A8C(omObjData* arg0); +void fn_1_C58(omObjData* arg0); +void fn_1_CF4(omObjData* arg0); +void fn_1_DB4(omObjData* arg0); +void fn_1_F8C(omObjData* arg0); +void fn_1_1074(omObjData* arg0); +void fn_1_11CC(omObjData* arg0); +void fn_1_13E4(omObjData* arg0); +void fn_1_1460(omObjData* arg0); + +//function signatures +void fn_1_628(omObjData*, s32); +void fn_1_64C(omObjData*); +void fn_1_99C(omObjData*); +void fn_1_A1C(omObjData* arg0); +void fn_1_26CC(u8); +void fn_1_4544(s32, s32, f32, f32, f32); +s16 fn_1_28B8(u8); /* extern */ +s16 fn_1_28E4(u8); /* extern */ +double cos(double x); +double sin(double x); + +inline SetDominationDataStuff(omObjData* arg0, s32 val0, s32 val1) { + unkDominationData* temp_r29 = arg0->data; + temp_r29->unk_1C = val0; + temp_r29->unk_20 = val1; +} + +void ModuleProlog(void) { + lbl_1_bss_0[0] = omInitObjMan(0x2F8, 0x2000); + omGameSysInit(lbl_1_bss_0[0]); + fn_1_4980(lbl_1_bss_0[0]); +} + +void fn_1_F4(Process* arg0) { + u32 i; + lbl_1_bss_18 = arg0; + + for (i = 0; i < 4; i++) { + lbl_1_bss_8[i] = omAddObjEx(lbl_1_bss_18, 0x100, 2U, 8U, 0, fn_1_64C); + lbl_1_bss_8[i]->work[0] = i; + } +} + +void fn_1_194(void) { + s32 i; + + for (i = 0; i < 4; i++) { + fn_1_99C(lbl_1_bss_8[i]); + } +} + +void fn_1_1E4(void) { + s32 i; + + for (i = 0; i < 4; i++) { + fn_1_628(lbl_1_bss_8[i], 1); + } +} + +void fn_1_238(void) { + s32 i; + + for (i = 0; i < 4; i++) { + fn_1_628(lbl_1_bss_8[i], 2); + } +} + +void fn_1_28C(void) { + s32 i; + + for (i = 0; i < 4; i++) { + fn_1_628(lbl_1_bss_8[i], 3); + } +} + +void fn_1_2E0(void) { + s32 i; + + for (i = 0; i < 4; i++) { + fn_1_628(lbl_1_bss_8[i], 4); + } +} + +void fn_1_334(void) { + s32 i; + + for (i = 0; i < 4; i++) { + fn_1_628(lbl_1_bss_8[i], 5); + } +} + +void fn_1_388(u8 arg0, s32 arg1) { + omObjData* obj = lbl_1_bss_8[arg0]; + unkDominationData* unkData = obj->data; + unkData->unk_38 = arg1; +} + +void fn_1_3C4(u8 arg0) { + fn_1_628(lbl_1_bss_8[arg0], 8); +} + +void fn_1_404(void) { + omObjData* temp_r31; + unkDominationData* unkData; + s32 temp_r0; + u8 i; + + for (i = 0; i < 4; i++) { + temp_r31 = lbl_1_bss_8[i]; + unkData = temp_r31->data; + switch (unkData->unk_38) { + case 0: + fn_1_628(temp_r31, 9); + break; + case 1: + fn_1_628(temp_r31, 6); + break; + case 2: + fn_1_628(temp_r31, 9); + break; + } + } +} + +s32 fn_1_4C0(u8 arg0) { + unkDominationData* unkData; + + if (arg0 >= 4) { + return -1; + } + + unkData = lbl_1_bss_8[arg0]->data; + return unkData->unk_01; +} + +s32 fn_1_508(u8 arg0) { + unkDominationData* unkData = lbl_1_bss_8[arg0]->data; + return unkData->unk_04; +} + +s32 fn_1_53C(u8 arg0) { + return OM_GET_DATA_PTR(lbl_1_bss_8[arg0], unkDominationData)->unk_1C == 0; +} + +void fn_1_568(s16 arg0, s16 arg1, s16 arg2) { + unkDominationData* unkData; + + unkData = OM_GET_DATA_PTR(lbl_1_bss_8[arg0], unkDominationData); + switch (arg1) { + case 0: + omVibrate(unkData->unk_00, arg2, 6, 6); + break; + case 1: + omVibrate(unkData->unk_00, arg2, 4, 2); + break; + case 2: + omVibrate(unkData->unk_00, arg2, 0xC, 0); + break; + } +} + +void fn_1_628(omObjData* arg0, s32 arg1) { + unkDominationData* temp_r31; + + temp_r31 = OM_GET_DATA_PTR(arg0, unkDominationData); + temp_r31->unk_1C = arg1; + temp_r31->unk_20 = 0; +} + +typedef struct m407UnkDataStruct0 { + u32 unk_00[8]; +} m407UnkDataStruct0; + +m407UnkDataStruct0 lbl_1_data_0[] = { + {0x005F0000, 0x005F0024, 0x005F0029, 0x005F0005, 0x005F0006, 0x005F004A, 0x005F004B, 0x005F0018}, + {0x001A0000, 0x001A0024, 0x001A0029, 0x001A0005, 0x001A0006, 0x001A004A, 0x001A004B, 0x001A0018}, + {0x006D0000, 0x006D0024, 0x006D0029, 0x006D0005, 0x006D0006, 0x006D004A, 0x006D004B, 0x006D0018}, + {0x008A0000, 0x008A0024, 0x008A0029, 0x008A0005, 0x008A0006, 0x008A004A, 0x008A004B, 0x008A0018}, + {0x00850000, 0x00850024, 0x00850029, 0x00850005, 0x00850006, 0x0085004A, 0x0085004B, 0x00850018}, + {0x00110000, 0x00110024, 0x00110029, 0x00110005, 0x00110006, 0x0011004A, 0x0011004B, 0x00110018}, + {0x000D0000, 0x000D0024, 0x000D0029, 0x000D0005, 0x000D0006, 0x000D004A, 0x000D004B, 0x000D0018}, + {0x00810000, 0x00810024, 0x00810029, 0x00810005, 0x00810006, 0x0081004A, 0x0081004B, 0x00810018} +}; +s32 lbl_1_data_100[] = {0x0026000D, 0x0026000E, 0x0026000F, 0x00260010, 0x00260011, 0x00260012, 0x00260013, 0x00260014}; + +char lbl_1_data_120[] = "test11_tex_we-itemhook-r"; + +char* lbl_1_data_13C[] = { + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120, + lbl_1_data_120 +}; + +ObjFuncs lbl_1_data_15C[] = { + fn_1_A88, + fn_1_A8C, + fn_1_C58, + fn_1_CF4, + fn_1_DB4, + fn_1_F8C, + fn_1_1074, + fn_1_11CC, + fn_1_13E4, + fn_1_1460 +}; + +typedef struct m407UnkDataStruct1 { + u8 unk_00; + u8 unk_01; +} m407UnkDataStruct1; + +m407UnkDataStruct1 lbl_1_data_184[] = {{0x3C, 0x0F}, {0x50, 0x0F}, {0x64, 0x14}, {0x78, 0x14}}; //??? + +void fn_1_64C(omObjData* arg0) { + u32 temp_r29; + unkDominationData* temp_r27; + unkDominationData* temp_r31; + u32 i; + + arg0->func = fn_1_A1C; + arg0->data = HuMemDirectMallocNum(HEAP_SYSTEM, 0x3C, 0x10000000U); + temp_r31 = arg0->data; + temp_r29 = arg0->work[0]; + temp_r31->unk_00 = temp_r29; + temp_r31->unk_01 = GWPlayerCfg[temp_r29].character; + temp_r31->unk_0C = GWPlayerCfg[temp_r29].pad_idx; + temp_r31->unk_04 = GWPlayerCfg[temp_r29].iscom; + temp_r31->unk_02 = GWPlayerCfg[temp_r29].diff; + temp_r31->unk_08 = 0; + temp_r31->unk_34 = 0; + temp_r31->unk_38 = 0; + temp_r31->unk_28 = 0.0f; + //frand implicit declaration? (probably frandf inline?) + temp_r31->unk_30 = (600.0f / (lbl_1_data_184[temp_r31->unk_02].unk_00 - ((frand() & 0x7FFFFFFF) % lbl_1_data_184[temp_r31->unk_02].unk_01))); + temp_r31->unk_2C = temp_r31->unk_30; + arg0->model[0] = CharModelCreate(temp_r31->unk_01, 8); + arg0->model[1] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_data_100[temp_r31->unk_01], 0x10000000, HEAP_DATA)); + Hu3DModelAmbSet(arg0->model[0], 1.0f, 1.0f, 1.0f); + Hu3DModelAmbSet(arg0->model[1], 1.0f, 1.0f, 1.0f); + + for (i = 0; i < 8; i++) { + arg0->motion[i] = CharModelMotionCreate(temp_r31->unk_01, lbl_1_data_0[temp_r31->unk_01].unk_00[i]); + } + + Hu3DModelShadowSet(arg0->model[0]); + Hu3DModelShadowSet(arg0->model[1]); + CharModelMotionDataClose(temp_r31->unk_01); + CharModelMotionSet(temp_r31->unk_01, arg0->motion[1]); + Hu3DModelAttrSet(arg0->model[0], 0x40000001); + Hu3DModelHookSet(arg0->model[0], lbl_1_data_13C[temp_r31->unk_01], arg0->model[1]); + temp_r31->unk_10 = (600.0f - (400.0f * temp_r29)); + temp_r31->unk_14 = 0.0f; + temp_r31->unk_18 = -500.0f; + SetDominationDataStuff(arg0, 0, 0); +} + +void fn_1_99C(omObjData* arg0) { + s32 i; + + for (i = 0; i < 8; i++) { + Hu3DMotionKill(arg0->motion[i]); + } + + for (i = 0; i < 2; i++){ + Hu3DModelKill(arg0->model[i]); + } + + HuMemDirectFree(arg0->data); +} + +void fn_1_A1C(omObjData* arg0) { + unkDominationData* temp_r31; + + temp_r31 = arg0->data; + lbl_1_data_15C[temp_r31->unk_1C](arg0); + omSetTra(arg0, temp_r31->unk_10, temp_r31->unk_14, temp_r31->unk_18); +} + +void fn_1_A88(omObjData* arg0) { + +} + +void fn_1_A8C(omObjData* arg0) { + s32 var_r29; + unkDominationData* temp_r31; + + var_r29 = 0; + temp_r31 = OM_GET_DATA_PTR(arg0, unkDominationData); + temp_r31->unk_28 += 1.0f; + + if (temp_r31->unk_04 == 0) { + var_r29 = (HuPadBtnDown[temp_r31->unk_0C] & 0x100) ? 1 : 0; + } else if ((u32) temp_r31->unk_28 >= (u32) temp_r31->unk_2C) { + var_r29 = 1; + temp_r31->unk_2C = (f32) (temp_r31->unk_2C + temp_r31->unk_30); + } + + if (var_r29 != 0) { + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[2], 0.0f, 0.0f, 0); + fn_1_4544(4, 0x10, 600.0f - (400.0f * (f32) temp_r31->unk_00), -20.0f, -450.0f); + fn_1_26CC(temp_r31->unk_00); + temp_r31->unk_34 = 1; + return; + } + + if ((temp_r31->unk_34 != 0) && (Hu3DMotionEndCheck(arg0->model[0]) != 0)) { + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[1], 0.0f, 0.0f, 0x40000001); + temp_r31->unk_34 = 0; + } +} + +void fn_1_C58(omObjData* arg0) { + unkDominationData* temp_r30; + + temp_r30 = arg0->data; + if (Hu3DMotionEndCheck(arg0->model[0]) != 0) { + CharModelMotionShiftSet(temp_r30->unk_01, arg0->motion[1], 0.0f, 10.0f, 0x40000001); + temp_r30->unk_34 = 0; + SetDominationDataStuff(arg0, 0, 0); + } +} + +void fn_1_CF4(omObjData* arg0) { + unkDominationData* temp_r31; + + temp_r31 = arg0->data; + if (temp_r31->unk_20 == 0) { + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[1], 0.0f, 10.0f, 0x40000001U); + CharModelItemHookCreate(temp_r31->unk_01, lbl_1_data_13C[temp_r31->unk_01]); + } + if (temp_r31->unk_20++ >= 30) { + SetDominationDataStuff(arg0, 0, 0); + } +} + +void fn_1_DB4(omObjData* arg0) { + f32 temp_f31; + f32 temp_f30; + unkDominationData* temp_r31; + + temp_r31 = arg0->data; + + if (temp_r31->unk_20 == 0) { + CharModelVoiceEnableSet(temp_r31->unk_01, arg0->motion[3], 0); + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[3], 0.0f, 10.0f, 0); + temp_r31->unk_24 = 0.0f; + temp_r31->unk_20++; + } + + temp_f31 = (32.0f * sin(1.0471975511965976)) - (9.8f * temp_r31->unk_24); + temp_f30 = 22.0f * cos(1.0471975511965976); + temp_r31->unk_18 = temp_r31->unk_18 + temp_f30; + temp_r31->unk_14 = temp_r31->unk_14 + temp_f31; + temp_r31->unk_24 += 0.3f; + + if (!(temp_f31 < 0.0f) || !(temp_r31->unk_14 <= 30.0f)) { + return; + } + + temp_r31->unk_14 = 30.0f; + CharModelMotionShiftSet((s16) temp_r31->unk_01, arg0->motion[4], 0.0f, 10.0f, 0U); + SetDominationDataStuff(arg0, 0, 0); +} + +const s32 lbl_1_rodata_70[] = {0x00000122, 0x00000162, 0x000001A2, 0x000001E2, 0x00000222, 0x00000262, 0x000002A2, 0x000002E2}; + +void fn_1_F8C(omObjData* arg0) { + unkDominationData* temp_r31; + + temp_r31 = arg0->data; + + if (temp_r31->unk_20 == 0) { + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[5], 0.0f, 10.0f, 0); + HuAudFXPlay(lbl_1_rodata_70[temp_r31->unk_01]); + } + + if (temp_r31->unk_20++ >= 0x78) { + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[0], 0.0f, 10.0f, 0x40000001); + SetDominationDataStuff(arg0, 0, 0); + } +} + +void fn_1_1074(omObjData* arg0) { + unkDominationData* temp_r31; + + temp_r31 = arg0->data; + + if (temp_r31->unk_20 == 0) { + CharModelVoiceEnableSet(temp_r31->unk_01, arg0->motion[3], 0); + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[3], 0.0f, 10.0f, 0U); + temp_r31->unk_24 = 0.0f; + temp_r31->unk_20 = 1; + } + + temp_r31->unk_14 = (temp_r31->unk_14 + ((80.0 * sin(1.5707963267948966)) - (9.8 * temp_r31->unk_24))); + temp_r31->unk_24 += 0.3f; + + if (!(temp_r31->unk_14 < 1000.0f)) { + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[4], 0.0f, 10.0f, 0); + SetDominationDataStuff(arg0, 7, 0); + } +} + +void fn_1_11CC(omObjData* arg0) { + unkDominationData* temp_r31; + s16 temp; + + temp_r31 = arg0->data; + if (temp_r31->unk_20 == 0) { + CharModelVoiceEnableSet(temp_r31->unk_01, arg0->motion[3], 0); + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[3], 0.0f, 10.0f, 0); + temp_r31->unk_14 = 1000.0f; + temp_r31->unk_18 = 200.0f * (fn_1_28B8(temp_r31->unk_00) + 2); + temp_r31->unk_24 = 0.0f; + temp_r31->unk_20 = 1; + } + + temp_r31->unk_14 = (temp_r31->unk_14 - (2.0f + (9.8f * temp_r31->unk_24))); + temp_r31->unk_24 += 0.3f; + + if (!(temp_r31->unk_14 > 300.0f)) { + temp_r31->unk_14 = 300.0f; + CharModelVoiceEnableSet(temp_r31->unk_01, arg0->motion[4], 0); + CharModelMotionShiftSet(temp_r31->unk_01, arg0->motion[4], 0.0f, 10.0f, 0); + temp = fn_1_28E4(temp_r31->unk_00); + //can remove \0 after matching whole rel likely + Hu3DModelHookSet(temp, "itemhook_c\0", arg0->model[0]); + temp_r31->unk_10 = 0.0f; + temp_r31->unk_14 = 0.0f; + temp_r31->unk_18 = 0.0f; + SetDominationDataStuff(arg0, 0, 0); + } +} + +void fn_1_13E4(omObjData* arg0) { + unkDominationData* temp_r30; + + temp_r30 = arg0->data; + CharModelMotionShiftSet(temp_r30->unk_01, arg0->motion[6], 0.0f, 10.0f, 0); + SetDominationDataStuff(arg0, 0, 0); +} + +void fn_1_1460(omObjData* arg0) { + unkDominationData* temp_r30; + + temp_r30 = arg0->data; + CharModelVoiceEnableSet(temp_r30->unk_01, arg0->motion[7], 0); + CharModelMotionShiftSet(temp_r30->unk_01, arg0->motion[7], 0.0f, 10.0f, 0); + SetDominationDataStuff(arg0, 0, 0); +} \ No newline at end of file