From b5b908f3c5d648a8c7bb0fd778fdb2d479afe660 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Fri, 2 Aug 2024 00:59:49 +0200 Subject: [PATCH 1/7] Added fn_1_D588 to m444dll.h --- include/REL/m444dll.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/REL/m444dll.h b/include/REL/m444dll.h index b0165d19..ba2894c5 100644 --- a/include/REL/m444dll.h +++ b/include/REL/m444dll.h @@ -41,6 +41,7 @@ void fn_1_C214(void); void fn_1_D1E0(s16 model); void fn_1_D558(DataListModel *model_list); +void fn_1_D588(DataListModel *model_list); void fn_1_D818(DataListSprite *sprite_list); void fn_1_D950(void); void fn_1_D9C8(void); @@ -70,4 +71,4 @@ extern float lbl_1_bss_288[2]; extern DataListModel lbl_1_data_470[]; -#endif \ No newline at end of file +#endif From 8589c3e6c98ce14c38598f75b6755c1a33bf848f Mon Sep 17 00:00:00 2001 From: kabiskac Date: Fri, 2 Aug 2024 01:00:02 +0200 Subject: [PATCH 2/7] Added types in m439Dll/symbols.txt --- config/GMPE01_00/rels/m439Dll/symbols.txt | 146 +++++++++++----------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/config/GMPE01_00/rels/m439Dll/symbols.txt b/config/GMPE01_00/rels/m439Dll/symbols.txt index 246ef044..f3f1ec36 100644 --- a/config/GMPE01_00/rels/m439Dll/symbols.txt +++ b/config/GMPE01_00/rels/m439Dll/symbols.txt @@ -173,89 +173,89 @@ lbl_1_data_EA8 = .data:0x00000EA8; // type:object size:0x9C lbl_1_data_F44 = .data:0x00000F44; // type:object size:0x9C lbl_1_data_FE0 = .data:0x00000FE0; // type:object size:0x34 lbl_1_data_1014 = .data:0x00001014; // type:object size:0x60 -lbl_1_data_1074 = .data:0x00001074; // type:object size:0x18 -lbl_1_data_108C = .data:0x0000108C; // type:object size:0x30 -lbl_1_data_10BC = .data:0x000010BC; // type:object size:0x204 -lbl_1_data_12C0 = .data:0x000012C0; // type:object size:0x204 -lbl_1_data_14C4 = .data:0x000014C4; // type:object size:0x204 +lbl_1_data_1074 = .data:0x00001074; // type:object size:0x18 data:2byte +lbl_1_data_108C = .data:0x0000108C; // type:object size:0x30 data:float +lbl_1_data_10BC = .data:0x000010BC; // type:object size:0x204 data:float +lbl_1_data_12C0 = .data:0x000012C0; // type:object size:0x204 data:float +lbl_1_data_14C4 = .data:0x000014C4; // type:object size:0x204 data:float lbl_1_data_16C8 = .data:0x000016C8; // type:object size:0xC -lbl_1_data_16D4 = .data:0x000016D4; // type:object size:0x4 -lbl_1_data_16D8 = .data:0x000016D8; // type:object size:0x1D4 -lbl_1_data_18AC = .data:0x000018AC; // type:object size:0x1D4 -lbl_1_data_1A80 = .data:0x00001A80; // type:object size:0x1D4 -lbl_1_data_1C54 = .data:0x00001C54; // type:object size:0x120 -lbl_1_data_1D74 = .data:0x00001D74; // type:object size:0x120 -lbl_1_data_1E94 = .data:0x00001E94; // type:object size:0x120 -lbl_1_data_1FB4 = .data:0x00001FB4; // type:object size:0xF0 -lbl_1_data_20A4 = .data:0x000020A4; // type:object size:0xF0 -lbl_1_data_2194 = .data:0x00002194; // type:object size:0xF0 +lbl_1_data_16D4 = .data:0x000016D4; // type:object size:0x4 data:4byte +lbl_1_data_16D8 = .data:0x000016D8; // type:object size:0x1D4 data:float +lbl_1_data_18AC = .data:0x000018AC; // type:object size:0x1D4 data:float +lbl_1_data_1A80 = .data:0x00001A80; // type:object size:0x1D4 data:float +lbl_1_data_1C54 = .data:0x00001C54; // type:object size:0x120 data:float +lbl_1_data_1D74 = .data:0x00001D74; // type:object size:0x120 data:float +lbl_1_data_1E94 = .data:0x00001E94; // type:object size:0x120 data:float +lbl_1_data_1FB4 = .data:0x00001FB4; // type:object size:0xF0 data:float +lbl_1_data_20A4 = .data:0x000020A4; // type:object size:0xF0 data:float +lbl_1_data_2194 = .data:0x00002194; // type:object size:0xF0 data:float lbl_1_data_2284 = .data:0x00002284; // type:object size:0x24 -lbl_1_data_22A8 = .data:0x000022A8; // type:object size:0xC -lbl_1_data_22B4 = .data:0x000022B4; // type:object size:0x174 -lbl_1_data_2428 = .data:0x00002428; // type:object size:0x174 -lbl_1_data_259C = .data:0x0000259C; // type:object size:0x174 -lbl_1_data_2710 = .data:0x00002710; // type:object size:0x144 -lbl_1_data_2854 = .data:0x00002854; // type:object size:0x144 -lbl_1_data_2998 = .data:0x00002998; // type:object size:0x144 -lbl_1_data_2ADC = .data:0x00002ADC; // type:object size:0x1A4 -lbl_1_data_2C80 = .data:0x00002C80; // type:object size:0x1A4 -lbl_1_data_2E24 = .data:0x00002E24; // type:object size:0x1A4 +lbl_1_data_22A8 = .data:0x000022A8; // type:object size:0xC data:4byte +lbl_1_data_22B4 = .data:0x000022B4; // type:object size:0x174 data:float +lbl_1_data_2428 = .data:0x00002428; // type:object size:0x174 data:float +lbl_1_data_259C = .data:0x0000259C; // type:object size:0x174 data:float +lbl_1_data_2710 = .data:0x00002710; // type:object size:0x144 data:float +lbl_1_data_2854 = .data:0x00002854; // type:object size:0x144 data:float +lbl_1_data_2998 = .data:0x00002998; // type:object size:0x144 data:float +lbl_1_data_2ADC = .data:0x00002ADC; // type:object size:0x1A4 data:float +lbl_1_data_2C80 = .data:0x00002C80; // type:object size:0x1A4 data:float +lbl_1_data_2E24 = .data:0x00002E24; // type:object size:0x1A4 data:float lbl_1_data_2FC8 = .data:0x00002FC8; // type:object size:0x24 -lbl_1_data_2FEC = .data:0x00002FEC; // type:object size:0xC -lbl_1_data_2FF8 = .data:0x00002FF8; // type:object size:0x294 -lbl_1_data_328C = .data:0x0000328C; // type:object size:0x294 -lbl_1_data_3520 = .data:0x00003520; // type:object size:0x294 +lbl_1_data_2FEC = .data:0x00002FEC; // type:object size:0xC data:4byte +lbl_1_data_2FF8 = .data:0x00002FF8; // type:object size:0x294 data:float +lbl_1_data_328C = .data:0x0000328C; // type:object size:0x294 data:float +lbl_1_data_3520 = .data:0x00003520; // type:object size:0x294 data:float lbl_1_data_37B4 = .data:0x000037B4; // type:object size:0xC -lbl_1_data_37C0 = .data:0x000037C0; // type:object size:0x4 -lbl_1_data_37C4 = .data:0x000037C4; // type:object size:0x198 -lbl_1_data_395C = .data:0x0000395C; // type:object size:0x198 -lbl_1_data_3AF4 = .data:0x00003AF4; // type:object size:0x198 -lbl_1_data_3C8C = .data:0x00003C8C; // type:object size:0x198 -lbl_1_data_3E24 = .data:0x00003E24; // type:object size:0x198 -lbl_1_data_3FBC = .data:0x00003FBC; // type:object size:0x198 +lbl_1_data_37C0 = .data:0x000037C0; // type:object size:0x4 data:4byte +lbl_1_data_37C4 = .data:0x000037C4; // type:object size:0x198 data:float +lbl_1_data_395C = .data:0x0000395C; // type:object size:0x198 data:float +lbl_1_data_3AF4 = .data:0x00003AF4; // type:object size:0x198 data:float +lbl_1_data_3C8C = .data:0x00003C8C; // type:object size:0x198 data:float +lbl_1_data_3E24 = .data:0x00003E24; // type:object size:0x198 data:float +lbl_1_data_3FBC = .data:0x00003FBC; // type:object size:0x198 data:float lbl_1_data_4154 = .data:0x00004154; // type:object size:0x18 -lbl_1_data_416C = .data:0x0000416C; // type:object size:0x8 -lbl_1_data_4174 = .data:0x00004174; // type:object size:0x210 -lbl_1_data_4384 = .data:0x00004384; // type:object size:0x210 -lbl_1_data_4594 = .data:0x00004594; // type:object size:0x210 -lbl_1_data_47A4 = .data:0x000047A4; // type:object size:0x210 -lbl_1_data_49B4 = .data:0x000049B4; // type:object size:0x210 -lbl_1_data_4BC4 = .data:0x00004BC4; // type:object size:0x210 +lbl_1_data_416C = .data:0x0000416C; // type:object size:0x8 data:4byte +lbl_1_data_4174 = .data:0x00004174; // type:object size:0x210 data:float +lbl_1_data_4384 = .data:0x00004384; // type:object size:0x210 data:float +lbl_1_data_4594 = .data:0x00004594; // type:object size:0x210 data:float +lbl_1_data_47A4 = .data:0x000047A4; // type:object size:0x210 data:float +lbl_1_data_49B4 = .data:0x000049B4; // type:object size:0x210 data:float +lbl_1_data_4BC4 = .data:0x00004BC4; // type:object size:0x210 data:float lbl_1_data_4DD4 = .data:0x00004DD4; // type:object size:0x18 -lbl_1_data_4DEC = .data:0x00004DEC; // type:object size:0x8 -lbl_1_data_4DF4 = .data:0x00004DF4; // type:object size:0x1D4 -lbl_1_data_4FC8 = .data:0x00004FC8; // type:object size:0x1D4 -lbl_1_data_519C = .data:0x0000519C; // type:object size:0x1D4 -lbl_1_data_5370 = .data:0x00005370; // type:object size:0x1D4 -lbl_1_data_5544 = .data:0x00005544; // type:object size:0x1D4 -lbl_1_data_5718 = .data:0x00005718; // type:object size:0x1D4 +lbl_1_data_4DEC = .data:0x00004DEC; // type:object size:0x8 data:4byte +lbl_1_data_4DF4 = .data:0x00004DF4; // type:object size:0x1D4 data:float +lbl_1_data_4FC8 = .data:0x00004FC8; // type:object size:0x1D4 data:float +lbl_1_data_519C = .data:0x0000519C; // type:object size:0x1D4 data:float +lbl_1_data_5370 = .data:0x00005370; // type:object size:0x1D4 data:float +lbl_1_data_5544 = .data:0x00005544; // type:object size:0x1D4 data:float +lbl_1_data_5718 = .data:0x00005718; // type:object size:0x1D4 data:float lbl_1_data_58EC = .data:0x000058EC; // type:object size:0x18 -lbl_1_data_5904 = .data:0x00005904; // type:object size:0x8 -lbl_1_data_590C = .data:0x0000590C; // type:object size:0x18C -lbl_1_data_5A98 = .data:0x00005A98; // type:object size:0x18C -lbl_1_data_5C24 = .data:0x00005C24; // type:object size:0x18C -lbl_1_data_5DB0 = .data:0x00005DB0; // type:object size:0x168 -lbl_1_data_5F18 = .data:0x00005F18; // type:object size:0x168 -lbl_1_data_6080 = .data:0x00006080; // type:object size:0x168 +lbl_1_data_5904 = .data:0x00005904; // type:object size:0x8 data:4byte +lbl_1_data_590C = .data:0x0000590C; // type:object size:0x18C data:float +lbl_1_data_5A98 = .data:0x00005A98; // type:object size:0x18C data:float +lbl_1_data_5C24 = .data:0x00005C24; // type:object size:0x18C data:float +lbl_1_data_5DB0 = .data:0x00005DB0; // type:object size:0x168 data:float +lbl_1_data_5F18 = .data:0x00005F18; // type:object size:0x168 data:float +lbl_1_data_6080 = .data:0x00006080; // type:object size:0x168 data:float lbl_1_data_61E8 = .data:0x000061E8; // type:object size:0x18 -lbl_1_data_6200 = .data:0x00006200; // type:object size:0x8 -lbl_1_data_6208 = .data:0x00006208; // type:object size:0x174 -lbl_1_data_637C = .data:0x0000637C; // type:object size:0x174 -lbl_1_data_64F0 = .data:0x000064F0; // type:object size:0x174 -lbl_1_data_6664 = .data:0x00006664; // type:object size:0x15C -lbl_1_data_67C0 = .data:0x000067C0; // type:object size:0x15C -lbl_1_data_691C = .data:0x0000691C; // type:object size:0x15C +lbl_1_data_6200 = .data:0x00006200; // type:object size:0x8 data:4byte +lbl_1_data_6208 = .data:0x00006208; // type:object size:0x174 data:float +lbl_1_data_637C = .data:0x0000637C; // type:object size:0x174 data:float +lbl_1_data_64F0 = .data:0x000064F0; // type:object size:0x174 data:float +lbl_1_data_6664 = .data:0x00006664; // type:object size:0x15C data:float +lbl_1_data_67C0 = .data:0x000067C0; // type:object size:0x15C data:float +lbl_1_data_691C = .data:0x0000691C; // type:object size:0x15C data:float lbl_1_data_6A78 = .data:0x00006A78; // type:object size:0x18 -lbl_1_data_6A90 = .data:0x00006A90; // type:object size:0x8 -lbl_1_data_6A98 = .data:0x00006A98; // type:object size:0x18C -lbl_1_data_6C24 = .data:0x00006C24; // type:object size:0x18C -lbl_1_data_6DB0 = .data:0x00006DB0; // type:object size:0x18C -lbl_1_data_6F3C = .data:0x00006F3C; // type:object size:0x174 -lbl_1_data_70B0 = .data:0x000070B0; // type:object size:0x174 -lbl_1_data_7224 = .data:0x00007224; // type:object size:0x174 +lbl_1_data_6A90 = .data:0x00006A90; // type:object size:0x8 data:4byte +lbl_1_data_6A98 = .data:0x00006A98; // type:object size:0x18C data:float +lbl_1_data_6C24 = .data:0x00006C24; // type:object size:0x18C data:float +lbl_1_data_6DB0 = .data:0x00006DB0; // type:object size:0x18C data:float +lbl_1_data_6F3C = .data:0x00006F3C; // type:object size:0x174 data:float +lbl_1_data_70B0 = .data:0x000070B0; // type:object size:0x174 data:float +lbl_1_data_7224 = .data:0x00007224; // type:object size:0x174 data:float lbl_1_data_7398 = .data:0x00007398; // type:object size:0x18 -lbl_1_data_73B0 = .data:0x000073B0; // type:object size:0x8 -lbl_1_data_73B8 = .data:0x000073B8; // type:object size:0x14 +lbl_1_data_73B0 = .data:0x000073B0; // type:object size:0x8 data:4byte +lbl_1_data_73B8 = .data:0x000073B8; // type:object size:0x14 data:4byte lbl_1_data_73CC = .data:0x000073CC; // type:object size:0x28 lbl_1_data_73F4 = .data:0x000073F4; // type:object size:0x28 lbl_1_data_741C = .data:0x0000741C; // type:object size:0x70 data:float From 579e3dd2e2ecbb12944b881abc92235204584234 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Fri, 2 Aug 2024 01:43:10 +0200 Subject: [PATCH 3/7] present cleanups --- src/REL/present/camera.c | 57 +-- src/REL/present/common.c | 154 +++---- src/REL/present/init.c | 81 ++-- src/REL/present/main.c | 267 ++++++------ src/REL/present/present.c | 896 ++++++++++++++++++++------------------ 5 files changed, 729 insertions(+), 726 deletions(-) diff --git a/src/REL/present/camera.c b/src/REL/present/camera.c index 95c6a85a..f6b2e29f 100644 --- a/src/REL/present/camera.c +++ b/src/REL/present/camera.c @@ -9,11 +9,8 @@ void fn_1_C20(omObjData *object); omObjData *fn_1_6B4(void) { - omObjData *var_r30; - UnkPresentCameraStruct *var_r31; - - var_r30 = omAddObjEx(lbl_1_bss_4, 1001, 0, 0, 3, fn_1_BF8); - var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM); + omObjData *var_r30 = omAddObjEx(lbl_1_bss_4, 1001, 0, 0, 3, fn_1_BF8); + UnkPresentCameraStruct *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM); var_r30->data = var_r31; var_r31->pos.x = 0.0f; @@ -48,9 +45,8 @@ void fn_1_8F0(omObjData *object) void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1) { - UnkPresentCameraStruct *var_r31; + UnkPresentCameraStruct *var_r31 = object->data; - var_r31 = object->data; var_r31->unk_58.x = arg8; var_r31->unk_58.y = arg9; var_r31->unk_58.z = argA; @@ -62,9 +58,8 @@ void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1) void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1) { - UnkPresentCameraStruct *var_r31; + UnkPresentCameraStruct *var_r31 = object->data; - var_r31 = object->data; var_r31->unk_64.x = arg8; var_r31->unk_64.y = arg9; var_r31->unk_64.z = argA; @@ -76,9 +71,8 @@ void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1) void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) { - UnkPresentCameraStruct *var_r31; + UnkPresentCameraStruct *var_r31 = object->data; - var_r31 = object->data; var_r31->unk_64.y = argA; var_r31->unk_7C = arg8; var_r31->unk_80 = arg9; @@ -92,29 +86,24 @@ void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) float fn_1_AAC(omObjData *object) { - UnkPresentCameraStruct *var_r31; - float var_f31; + UnkPresentCameraStruct *var_r31 = object->data; - var_r31 = object->data; - var_f31 = var_r31->unk_24; + float var_f31 = var_r31->unk_24; return var_f31; } float fn_1_ADC(omObjData *object) { - UnkPresentCameraStruct *var_r31; - float var_f31; + UnkPresentCameraStruct *var_r31 = object->data; - var_r31 = object->data; - var_f31 = var_r31->unk_28; + float var_f31 = var_r31->unk_28; return var_f31; } void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) { - UnkPresentCameraStruct *var_r31; + UnkPresentCameraStruct *var_r31 = object->data; - var_r31 = object->data; *arg1 = var_r31->pos.x; *arg2 = var_r31->pos.y; *arg3 = var_r31->pos.z; @@ -122,9 +111,8 @@ void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) { - UnkPresentCameraStruct *var_r31; + UnkPresentCameraStruct *var_r31 = object->data; - var_r31 = object->data; *arg1 = var_r31->target.x; *arg2 = var_r31->target.y; *arg3 = var_r31->target.z; @@ -132,13 +120,11 @@ void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) s32 fn_1_B6C(omObjData *object) { - UnkPresentCameraStruct *var_r31; - s32 var_r30; - s32 var_r29; + UnkPresentCameraStruct *var_r31 = object->data; + + s32 var_r30 = 1; + s32 var_r29 = 1; - var_r31 = object->data; - var_r30 = 1; - var_r29 = 1; if (!(var_r31->unk_8C < 1.0f) && !(var_r31->unk_94 < 1.0f)) { var_r29 = 0; } @@ -155,14 +141,14 @@ void fn_1_BF8(omObjData *object) void fn_1_C20(omObjData *object) { - UnkPresentCameraStruct *var_r31; float var_f31; float var_f30; float var_f29; float var_f28; float var_f27; - var_r31 = object->data; + UnkPresentCameraStruct *var_r31 = object->data; + if (var_r31->unk_84 < 1.0f) { var_f28 = sind(90.0f * var_r31->unk_84); var_r31->pos.x = var_r31->unk_2C.x + var_f28 * (var_r31->unk_58.x - var_r31->unk_2C.x); @@ -211,10 +197,9 @@ void fn_1_C20(omObjData *object) void fn_1_1198(omObjData *object) { - UnkPresentCameraStruct *var_r31; - if (HuPadBtn[0] & PAD_BUTTON_B) { - var_r31 = object->data; + UnkPresentCameraStruct *var_r31 = object->data; + var_r31->target.x = var_r31->target.x + (0.5f * HuPadStkX[0]); var_r31->target.y = var_r31->target.y + (0.5f * HuPadStkY[0]); var_r31->pos.z = var_r31->pos.z + (0.5f * HuPadTrigL[0]); @@ -226,9 +211,7 @@ void fn_1_1198(omObjData *object) void fn_1_1398(omObjData *object) { - UnkPresentCameraStruct *var_r31; - - var_r31 = object->data; + UnkPresentCameraStruct *var_r31 = object->data; print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", var_r31->target.x, var_r31->target.y, var_r31->target.z); print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", var_r31->unk_24, var_r31->unk_28); diff --git a/src/REL/present/common.c b/src/REL/present/common.c index c06f944d..02e984fa 100644 --- a/src/REL/present/common.c +++ b/src/REL/present/common.c @@ -6,8 +6,8 @@ #include "REL/present.h" -void fn_1_4620(omObjData *arg0); -void fn_1_4880(omObjData *arg0); +void fn_1_4620(omObjData *object); +void fn_1_4880(omObjData *object); omObjFunc lbl_1_data_1A0[] = { NULL, fn_1_4620, fn_1_4880 }; @@ -18,14 +18,12 @@ float fn_1_4CEC(float arg8, float arg9, float argA); omObjData *fn_1_42F4(void) { - omObjData *var_r31; - s32 var_lr; s32 var_r29; - UnkPresentStruct5 *var_r30; - var_r31 = omAddObjEx(lbl_1_bss_4, 1002, 1, 3, 2, NULL); - var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, 88, MEMORY_DEFAULT_NUM); + omObjData *var_r31 = omAddObjEx(lbl_1_bss_4, 1002, 1, 3, 2, NULL); + UnkPresentStruct5 *var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, 88, MEMORY_DEFAULT_NUM); var_r31->data = var_r30; + var_r30->x = 0.0f; var_r30->z = 0.0f; var_r30->y = 0.0f; @@ -56,10 +54,7 @@ omObjData *fn_1_42F4(void) void fn_1_4534(omObjData *object) { s32 var_r31; - void *var_r29; - void *var_r30; - - var_r29 = object->data; + void *var_r29 = object->data; for (var_r31 = 0; var_r31 < 1; var_r31++) { Hu3DModelKill(object->model[var_r31]); @@ -73,9 +68,8 @@ void fn_1_4534(omObjData *object) void fn_1_45C0(omObjData *object, s32 arg1) { - UnkPresentStruct5 *var_r31; + UnkPresentStruct5 *var_r31 = object->data; - var_r31 = object->data; var_r31->unk_00 = arg1; object->func = lbl_1_data_1A0[arg1]; object->unk10 = 0; @@ -84,56 +78,52 @@ void fn_1_45C0(omObjData *object, s32 arg1) s32 fn_1_4604(omObjData *object) { - s32 *var_r31; + UnkPresentStruct5 *var_r31 = object->data; - var_r31 = object->data; - return *var_r31; + return var_r31->unk_00; } void fn_1_4620(omObjData *object) { float var_f31; - omObjData *var_r30; - void *var_r29; - UnkPresentStruct5 *var_r31; + UnkPresentStruct5 *var_r31 = object->data; - var_r31 = object->data; switch (object->unk10) { - case 0: - Hu3DModelAttrReset(object->model[0], 1); - var_r31->x = -300.0f; - var_r31->z = -180.0f; - var_r31->unk_48 = 0.0f; - var_r31->unk_4C = 0.025f; - object->unk10 = 1; - case 1: - var_f31 = sind(90.0f * var_r31->unk_48); - var_f31 *= var_f31; - var_r31->unk_14 = -300.0f + (300.0f * var_f31); - var_r31->unk_2C = var_r31->unk_14 - var_r31->x; - if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + case 0: + Hu3DModelAttrReset(object->model[0], 1); + var_r31->x = -300.0f; + var_r31->z = -180.0f; + var_r31->unk_48 = 0.0f; + var_r31->unk_4C = 0.025f; + object->unk10 = 1; + case 1: + var_f31 = sind(90.0f * var_r31->unk_48); + var_f31 *= var_f31; + var_r31->unk_14 = -300.0f + (300.0f * var_f31); + var_r31->unk_2C = var_r31->unk_14 - var_r31->x; + if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + break; + } + var_r31->x = 0.0f; + var_r31->unk_48 = 0.0f; + var_r31->unk_4C = 0.05f; + object->unk10 = 2; + case 2: + var_r31->unk_2C = 0.0f; + var_r31->unk_34 = 0.01f; + if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + break; + } + var_r31->unk_24 = 0.0f; + var_r31->unk_2C = 0.0f; + var_r31->unk_30 = 0.0f; + var_r31->unk_34 = 0.0f; + object->unk10 = 3; + case 3: + fn_1_45C0(object, 0); break; - } - var_r31->x = 0.0f; - var_r31->unk_48 = 0.0f; - var_r31->unk_4C = 0.05f; - object->unk10 = 2; - case 2: - var_r31->unk_2C = 0.0f; - var_r31->unk_34 = 0.01f; - if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + default: break; - } - var_r31->unk_24 = 0.0f; - var_r31->unk_2C = 0.0f; - var_r31->unk_30 = 0.0f; - var_r31->unk_34 = 0.0f; - object->unk10 = 3; - case 3: - fn_1_45C0(object, 0); - break; - default: - break; } fn_1_4A04(object); } @@ -141,31 +131,29 @@ void fn_1_4620(omObjData *object) void fn_1_4880(omObjData *object) { float var_f31; - UnkPresentStruct5 *var_r30; - void *var_r29; - var_r30 = object->data; + UnkPresentStruct5 *var_r30 = object->data; switch (object->unk10) { - case 0: - var_r30->unk_48 = 0.0f; - var_r30->unk_4C = 0.025f; - Hu3DModelAttrReset(object->model[0], 1); - object->unk10 = 1; - case 1: - var_f31 = sind(90.0f * var_r30->unk_48); - var_f31 *= var_f31; - var_r30->unk_14 = -(300.0f * var_f31); - var_r30->unk_2C = var_r30->unk_14 - var_r30->x; - if ((var_r30->unk_48 = var_r30->unk_48 + var_r30->unk_4C) < 1.0f) { + case 0: + var_r30->unk_48 = 0.0f; + var_r30->unk_4C = 0.025f; + Hu3DModelAttrReset(object->model[0], 1); + object->unk10 = 1; + case 1: + var_f31 = sind(90.0f * var_r30->unk_48); + var_f31 *= var_f31; + var_r30->unk_14 = -(300.0f * var_f31); + var_r30->unk_2C = var_r30->unk_14 - var_r30->x; + if ((var_r30->unk_48 = var_r30->unk_48 + var_r30->unk_4C) < 1.0f) { + break; + } + object->unk10 = 2; + case 2: + Hu3DModelAttrSet(object->model[0], 1); + fn_1_45C0(object, 0); + break; + default: break; - } - object->unk10 = 2; - case 2: - Hu3DModelAttrSet(object->model[0], 1); - fn_1_45C0(object, 0); - break; - default: - break; } fn_1_4A04(object); (void)object; @@ -173,14 +161,10 @@ void fn_1_4880(omObjData *object) void fn_1_4A04(omObjData *object) { - float var_f29; - float var_f30; - s16 var_r29; - UnkPresentStruct5 *var_r31; + UnkPresentStruct5 *var_r31 = object->data; + s16 var_r29 = 0; + float var_f30 = var_r31->unk_2C * var_r31->unk_2C + var_r31->unk_34 * var_r31->unk_34; - var_r31 = object->data; - var_r29 = 0; - var_f30 = var_r31->unk_2C * var_r31->unk_2C + var_r31->unk_34 * var_r31->unk_34; var_r31->unk_38 = sqrtf(var_f30); if (0.001f <= var_r31->unk_38) { if (12.0f <= var_r31->unk_38) { @@ -194,7 +178,8 @@ void fn_1_4A04(omObjData *object) if (8.0f <= var_r31->unk_38) { var_r29 = 2; - } else { + } + else { var_r29 = 1; } } @@ -210,9 +195,8 @@ void fn_1_4A04(omObjData *object) float fn_1_4CEC(float arg8, float arg9, float argA) { float var_f30; - float var_f31; - var_f31 = fmod(arg9 - arg8, 360.0f); + float var_f31 = fmod(arg9 - arg8, 360.0f); if (0.0f > var_f31) { var_f31 += 360.0f; } diff --git a/src/REL/present/init.c b/src/REL/present/init.c index b006e64d..5b8a3164 100644 --- a/src/REL/present/init.c +++ b/src/REL/present/init.c @@ -33,15 +33,15 @@ void ObjectSetup(void) void fn_1_144(s16 arg0, s32 arg1, s32 arg2) { Process *var_r30; - UnkPresentStruct6 *var_r31; - var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM); + UnkPresentStruct6 *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM); var_r31->unk_00 = arg0; var_r31->unk_08 = 1.0f / arg2; if (arg1) { var_r31->unk_08 = var_r31->unk_08; var_r31->unk_04 = 0.0f; - } else { + } + else { var_r31->unk_08 = -var_r31->unk_08; var_r31->unk_04 = 1.0f; } @@ -53,18 +53,19 @@ void fn_1_144(s16 arg0, s32 arg1, s32 arg2) void fn_1_254(void) { - UnkPresentStruct6 *var_r31; + UnkPresentStruct6 *var_r31 = HuPrcCurrentGet()->user_data; - var_r31 = HuPrcCurrentGet()->user_data; while (TRUE) { var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_08; if (var_r31->unk_04 > 1.0f) { var_r31->unk_04 = 1.0f; break; - } else if (var_r31->unk_04 < 0.0f) { + } + else if (var_r31->unk_04 < 0.0f) { var_r31->unk_04 = 0.0f; break; - } else { + } + else { espTPLvlSet(var_r31->unk_00, var_r31->unk_04); HuPrcVSleep(); } @@ -80,8 +81,8 @@ void fn_1_254(void) void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) { Process *var_r30; - UnkPresentStruct6Weird *var_r31; // TODO correct type? why are only 12 bytes allocated? - var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM); + // TODO correct type? why are only 12 bytes allocated? + UnkPresentStruct6Weird *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM); var_r31->unk_00 = arg0; var_r31->unk_0C = 1.0f / arg2; var_r31->unk_04 = arg8; @@ -89,7 +90,8 @@ void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) if (arg1) { var_r31->unk_0C = var_r31->unk_0C; var_r31->unk_08 = 0.0f; - } else { + } + else { var_r31->unk_0C = -var_r31->unk_0C; var_r31->unk_08 = 1.0f; } @@ -101,18 +103,19 @@ void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) void fn_1_45C(void) { - UnkPresentStruct6Weird *var_r31; // TODO correct type? how is 0C possible? + UnkPresentStruct6Weird *var_r31 = HuPrcCurrentGet()->user_data; - var_r31 = HuPrcCurrentGet()->user_data; while (TRUE) { var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_0C; if (var_r31->unk_08 > 1.0f) { var_r31->unk_08 = 1.0f; break; - } else if (var_r31->unk_08 < 0.0f) { + } + else if (var_r31->unk_08 < 0.0f) { var_r31->unk_08 = 0.0f; break; - } else { + } + else { Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04); HuPrcVSleep(); } @@ -127,50 +130,44 @@ void fn_1_45C(void) u32 fn_1_550(u16 arg0) { - u32 var_r31; - - var_r31 = HuPadBtnDown[0] & arg0; + u32 var_r31 = HuPadBtnDown[0] & arg0; return var_r31 != 0; } u32 fn_1_584(u16 arg0) { - u32 var_r31; - - var_r31 = HuPadDStkRep[0] & arg0; + u32 var_r31 = HuPadDStkRep[0] & arg0; return var_r31 != 0; } u32 fn_1_5B8(u16 arg0) { - u32 var_r31; - - var_r31 = HuPadDStk[0] & arg0; + u32 var_r31 = HuPadDStk[0] & arg0; return var_r31 != 0; } void fn_1_5EC(omObjData *object) { switch (object->unk10) { - case 0: - object->unk10 = 1; - case 1: - if (!omSysExitReq) { + case 0: + object->unk10 = 1; + case 1: + if (!omSysExitReq) { + break; + } + object->unk10 = 2; + case 2: + WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); + HuAudFadeOut(1000); + object->unk10 = 3; + break; + case 3: + if (!WipeStatGet()) { + fn_1_3B18(lbl_1_bss_18); + omOvlReturnEx(1, 1); + } + break; + default: break; - } - object->unk10 = 2; - case 2: - WipeCreate(WIPE_MODE_OUT, WIPE_TYPE_NORMAL, 60); - HuAudFadeOut(1000); - object->unk10 = 3; - break; - case 3: - if (!WipeStatGet()) { - fn_1_3B18(lbl_1_bss_18); - omOvlReturnEx(1, 1); - } - break; - default: - break; } } diff --git a/src/REL/present/main.c b/src/REL/present/main.c index 6542a7b7..0e4cbfa7 100644 --- a/src/REL/present/main.c +++ b/src/REL/present/main.c @@ -20,12 +20,10 @@ void fn_1_41BC(UnkWindowDataStruct *arg0, s32 arg1); omObjData *fn_1_39A8(void) { - omObjData *object; - UnkPresentStruct *var_r30; - - object = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 4, NULL); - var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct), MEMORY_DEFAULT_NUM); + omObjData *object = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 4, NULL); + UnkPresentStruct *var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct), MEMORY_DEFAULT_NUM); object->data = var_r30; + var_r30->unk_04 = 0; lbl_1_bss_8 = fn_1_6B4(); lbl_1_bss_10 = fn_1_1458(); @@ -38,7 +36,8 @@ omObjData *fn_1_39A8(void) OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n"); object->func = fn_1_3DB8; object->unk10 = 0; - } else { + } + else { OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n"); object->func = fn_1_3B8C; object->unk10 = 0; @@ -49,9 +48,8 @@ omObjData *fn_1_39A8(void) void fn_1_3B18(omObjData *object) { - UnkWindowDataStruct **var_r31; + UnkWindowDataStruct **var_r31 = object->data; - var_r31 = object->data; fn_1_8F0(lbl_1_bss_8); fn_1_1784(lbl_1_bss_10); fn_1_4534(lbl_1_bss_20); @@ -61,121 +59,119 @@ void fn_1_3B18(omObjData *object) void fn_1_3B8C(omObjData *object) { - UnkPresentStruct *var_r30; - - var_r30 = object->data; + UnkPresentStruct *var_r30 = object->data; switch (object->unk10) { - case 0: - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); - object->unk10 = 1; - case 1: - if (WipeStatGet()) { - return; - } - object->unk10 = 2; - case 2: - fn_1_180C(lbl_1_bss_10, 1); - object->unk10 = 3; - case 3: - if (fn_1_1850(lbl_1_bss_10)) { - return; - } - object->unk10 = 4; - case 4: - fn_1_45C0(lbl_1_bss_20, 1); - object->unk10 = 5; - case 5: - if (fn_1_4604(lbl_1_bss_20)) { - return; - } - object->unk10 = 6; - case 6: - HuAudFXPlay(66); - fn_1_4080(var_r30->unk_00); - fn_1_40B0(var_r30->unk_00, 0x320002); - object->unk10 = 7; - case 7: - if (var_r30->unk_00->unk_20) { + case 0: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 60); + object->unk10 = 1; + case 1: + if (WipeStatGet()) { + return; + } + object->unk10 = 2; + case 2: + fn_1_180C(lbl_1_bss_10, 1); + object->unk10 = 3; + case 3: + if (fn_1_1850(lbl_1_bss_10)) { + return; + } + object->unk10 = 4; + case 4: + fn_1_45C0(lbl_1_bss_20, 1); + object->unk10 = 5; + case 5: + if (fn_1_4604(lbl_1_bss_20)) { + return; + } + object->unk10 = 6; + case 6: + HuAudFXPlay(66); + fn_1_4080(var_r30->unk_00); + fn_1_40B0(var_r30->unk_00, 0x320002); + object->unk10 = 7; + case 7: + if (var_r30->unk_00->unk_20) { + return; + } + fn_1_41BC(var_r30->unk_00, 1); + object->unk10 = 8; + case 8: + if (var_r30->unk_00->unk_20) { + return; + } + fn_1_4098(var_r30->unk_00); + if (!var_r30->unk_00->choice) { + var_r30->unk_04 = 0; + object->unk10 = 11; + return; + } + else { + object->unk10 = 9; + return; + } + case 9: + fn_1_45C0(lbl_1_bss_20, 2); + object->unk10 = 10; return; - } - fn_1_41BC(var_r30->unk_00, 1); - object->unk10 = 8; - case 8: - if (var_r30->unk_00->unk_20) { + case 10: + if (fn_1_4604(lbl_1_bss_20)) { + return; + } + object->unk10 = 2; return; - } - fn_1_4098(var_r30->unk_00); - if (!var_r30->unk_00->choice) { + case 11: + object->unk10 = 12; var_r30->unk_04 = 0; - object->unk10 = 11; - return; - } else { - object->unk10 = 9; - return; - } - case 9: - fn_1_45C0(lbl_1_bss_20, 2); - object->unk10 = 10; - return; - case 10: - if (fn_1_4604(lbl_1_bss_20)) { - return; - } - object->unk10 = 2; - return; - case 11: - object->unk10 = 12; - var_r30->unk_04 = 0; - case 12: - if (var_r30->unk_00->unk_20) { - return; - } - if (var_r30->unk_04++ >= 60) { - omSysExitReq = 1; - object->func = NULL; - object->unk10 = 0; - } - default: - break; + case 12: + if (var_r30->unk_00->unk_20) { + return; + } + if (var_r30->unk_04++ >= 60) { + omSysExitReq = 1; + object->func = NULL; + object->unk10 = 0; + } + default: + break; } } void fn_1_3DB8(omObjData *arg0) { - void *sp8; + void *sp8 = arg0->data; - sp8 = arg0->data; switch (arg0->unk10) { - case 0: - fn_1_186C(lbl_1_bss_10, omovlevtno - 1); - arg0->unk10 = 1; - case 1: - fn_1_180C(lbl_1_bss_10, 3); - arg0->unk10 = 2; - case 2: - if (!fn_1_1850(lbl_1_bss_10)) { - arg0->unk10 = 3; - } else { + case 0: + fn_1_186C(lbl_1_bss_10, omovlevtno - 1); + arg0->unk10 = 1; + case 1: + fn_1_180C(lbl_1_bss_10, 3); + arg0->unk10 = 2; + case 2: + if (!fn_1_1850(lbl_1_bss_10)) { + arg0->unk10 = 3; + } + else { + break; + } + case 3: + arg0->unk10 = 4; + case 4: + omSysExitReq = 1; + arg0->func = NULL; + arg0->unk10 = 0; + break; + default: break; - } - case 3: - arg0->unk10 = 4; - case 4: - omSysExitReq = 1; - arg0->func = NULL; - arg0->unk10 = 0; - break; - default: - break; } } UnkWindowDataStruct *fn_1_3EA4(s32 arg0) { - UnkWindowDataStruct *var_r31; + UnkWindowDataStruct *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); - var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); var_r31->unk18 = 0; var_r31->unk10 = 0; var_r31->unk14 = 0; @@ -184,18 +180,18 @@ UnkWindowDataStruct *fn_1_3EA4(s32 arg0) var_r31->process->user_data = var_r31; var_r31->unk08 = arg0; switch (arg0) { - case 0: - var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); - HuWinBGTPLvlSet(var_r31->window, 0.8f); - HuWinMesSpeedSet(var_r31->window, 0); - HuWinMesPalSet(var_r31->window, 7, 0, 0, 0); - break; - case 1: - var_r31->window = HuWinExCreateStyled(-10000.0f, 326.0f, 500, 40, -1, 0); - HuWinAttrSet(var_r31->window, 2048); - HuWinBGTPLvlSet(var_r31->window, 0.0f); - HuWinMesSpeedSet(var_r31->window, 0); - break; + case 0: + var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); + HuWinBGTPLvlSet(var_r31->window, 0.8f); + HuWinMesSpeedSet(var_r31->window, 0); + HuWinMesPalSet(var_r31->window, 7, 0, 0, 0); + break; + case 1: + var_r31->window = HuWinExCreateStyled(-10000.0f, 326.0f, 500, 40, -1, 0); + HuWinAttrSet(var_r31->window, 2048); + HuWinBGTPLvlSet(var_r31->window, 0.0f); + HuWinMesSpeedSet(var_r31->window, 0); + break; } HuWinDrawNoSet(var_r31->window, 63); fn_1_4190(var_r31); @@ -272,28 +268,27 @@ void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) void fn_1_41E0(void) { - UnkWindowDataStruct *windowData; - - windowData = HuPrcCurrentGet()->user_data; + UnkWindowDataStruct *windowData = HuPrcCurrentGet()->user_data; + while (TRUE) { switch (windowData->unk_20) { - case 1: - windowData->unk0C = 1; - HuWinExAnimIn(windowData->window); - break; - case 2: - HuWinExAnimOut(windowData->window); - windowData->unk0C = 0; - break; - case 3: - winData[windowData->window].active_pad = 1; - HuWinMesWait(windowData->window); - windowData->unk10 = 0; - break; - case 4: - windowData->choice = HuWinChoiceGet(windowData->window, windowData->choice); - windowData->unk14 = 0; - break; + case 1: + windowData->unk0C = 1; + HuWinExAnimIn(windowData->window); + break; + case 2: + HuWinExAnimOut(windowData->window); + windowData->unk0C = 0; + break; + case 3: + winData[windowData->window].active_pad = 1; + HuWinMesWait(windowData->window); + windowData->unk10 = 0; + break; + case 4: + windowData->choice = HuWinChoiceGet(windowData->window, windowData->choice); + windowData->unk14 = 0; + break; } if (windowData->unk18 != 0) { HuWinMesSet(windowData->window, windowData->unk18); diff --git a/src/REL/present/present.c b/src/REL/present/present.c index 51e47269..1aa725eb 100644 --- a/src/REL/present/present.c +++ b/src/REL/present/present.c @@ -41,68 +41,125 @@ static const s32 lbl_1_rodata_A0[] = { 0x006E006C, 0x006E006B, 0x006E0000, 0x006 0x006E0082, 0x006E0083, 0x006E0084, 0x006E0085, 0x006E0086 }; static const UnkPresentNestedOuterStruct lbl_1_rodata_2B8[] = { - { 0x00000006, { { 0x00000002, 0x00000008, 0x00320006, 0x00320042 }, { 0x00000003, 0x00000009, 0x00320007, 0x00320043 }, - { 0x00000004, 0x0000000A, 0x00320008, 0x00320044 }, { 0x00000005, 0x0000000B, 0x00320009, 0x00320045 }, - { 0x00000006, 0x0000000C, 0x0032000A, 0x00320046 }, { 0x00000007, 0x0000000D, 0x0032000B, 0x00320047 }, - }, - }, - { 0x00000006, { { 0x0000000E, 0x00000014, 0x0032000C, 0x00320048 }, { 0x0000000F, 0x00000015, 0x0032000D, 0x00320049 }, - { 0x00000010, 0x00000016, 0x0032000E, 0x0032004A }, { 0x00000011, 0x00000017, 0x0032000F, 0x0032004B }, - { 0x00000012, 0x00000018, 0x00320010, 0x0032004C }, { 0x00000013, 0x00000019, 0x00320011, 0x0032004D }, - }, - }, - { 0x00000006, { { 0x0000001A, 0x00000020, 0x00320012, 0x0032004E }, { 0x0000001B, 0x00000021, 0x00320013, 0x0032004F }, - { 0x0000001C, 0x00000022, 0x00320014, 0x00320050 }, { 0x0000001D, 0x00000023, 0x00320015, 0x00320051 }, - { 0x0000001E, 0x00000024, 0x00320016, 0x00320052 }, { 0x0000001F, 0x00000025, 0x00320017, 0x00320053 }, - }, - }, - { 0x00000006, { { 0x00000026, 0x0000002C, 0x00320018, 0x00320054 }, { 0x00000027, 0x0000002D, 0x00320019, 0x00320055 }, - { 0x00000028, 0x0000002E, 0x0032001A, 0x00320056 }, { 0x00000029, 0x0000002F, 0x0032001B, 0x00320057 }, - { 0x0000002A, 0x00000030, 0x0032001C, 0x00320058 }, { 0x0000002B, 0x00000031, 0x0032001D, 0x00320059 }, - }, - }, - { 0x00000006, { { 0x00000032, 0x00000038, 0x0032001E, 0x0032005A }, { 0x00000033, 0x00000039, 0x0032001F, 0x0032005B }, - { 0x00000034, 0x0000003A, 0x00320020, 0x0032005C }, { 0x00000035, 0x0000003B, 0x00320021, 0x0032005D }, - { 0x00000036, 0x0000003C, 0x00320022, 0x0032005E }, { 0x00000037, 0x0000003D, 0x00320023, 0x0032005F }, - }, - }, - { 0x00000001, { { 0x00000001, 0xFFFFFFFF, 0x00320041, 0x00320041 } } }, - { 0x00000006, { { 0x0000003E, 0x00000044, 0x00320024, 0x00320060 }, { 0x0000003F, 0x00000045, 0x00320025, 0x00320061 }, - { 0x00000040, 0x00000046, 0x00320026, 0x00320062 }, { 0x00000041, 0x00000047, 0x00320027, 0x00320063 }, - { 0x00000042, 0x00000048, 0x00320028, 0x00320064 }, { 0x00000043, 0x00000049, 0x00320029, 0x00320065 }, - }, - }, - { 0x00000006, { { 0x0000004A, 0x00000050, 0x0032002A, 0x00320066 }, { 0x0000004B, 0x00000051, 0x0032002B, 0x00320067 }, - { 0x0000004C, 0x00000052, 0x0032002C, 0x00320068 }, { 0x0000004D, 0x00000053, 0x0032002D, 0x00320069 }, - { 0x0000004E, 0x00000054, 0x0032002E, 0x0032006A }, { 0x0000004F, 0x00000055, 0x0032002F, 0x0032006B }, - }, - }, - { 0x00000006, { { 0x00000056, 0x0000005C, 0x00320030, 0x0032006C }, { 0x00000057, 0x0000005D, 0x00320031, 0x0032006D }, - { 0x00000058, 0x0000005E, 0x00320032, 0x0032006E }, { 0x00000059, 0x0000005F, 0x00320033, 0x0032006F }, - { 0x0000005A, 0x00000060, 0x00320034, 0x00320070 }, { 0x0000005B, 0x00000061, 0x00320035, 0x00320071 }, - }, - }, - { 0x0000000B, { { 0x00000062, 0xFFFFFFFF, 0x00320036, 0x00320072 }, { 0x00000063, 0xFFFFFFFF, 0x00320037, 0x00320073 }, - { 0x00000064, 0xFFFFFFFF, 0x00320038, 0x00320074 }, { 0x00000065, 0xFFFFFFFF, 0x00320039, 0x00320075 }, - { 0x00000066, 0xFFFFFFFF, 0x0032003A, 0x00320076 }, { 0x00000067, 0xFFFFFFFF, 0x0032003B, 0x00320077 }, - { 0x00000068, 0xFFFFFFFF, 0x0032003C, 0x00320078 }, { 0x00000069, 0xFFFFFFFF, 0x0032003D, 0x00320079 }, - { 0x0000006A, 0xFFFFFFFF, 0x0032003E, 0x0032007A }, { 0x0000006B, 0xFFFFFFFF, 0x0032003F, 0x0032007B }, - { 0x0000006C, 0xFFFFFFFF, 0x00320040, 0x0032007C } - }, - }, + { + 0x00000006, + { + { 0x00000002, 0x00000008, 0x00320006, 0x00320042 }, + { 0x00000003, 0x00000009, 0x00320007, 0x00320043 }, + { 0x00000004, 0x0000000A, 0x00320008, 0x00320044 }, + { 0x00000005, 0x0000000B, 0x00320009, 0x00320045 }, + { 0x00000006, 0x0000000C, 0x0032000A, 0x00320046 }, + { 0x00000007, 0x0000000D, 0x0032000B, 0x00320047 }, + }, + }, + { + 0x00000006, + { + { 0x0000000E, 0x00000014, 0x0032000C, 0x00320048 }, + { 0x0000000F, 0x00000015, 0x0032000D, 0x00320049 }, + { 0x00000010, 0x00000016, 0x0032000E, 0x0032004A }, + { 0x00000011, 0x00000017, 0x0032000F, 0x0032004B }, + { 0x00000012, 0x00000018, 0x00320010, 0x0032004C }, + { 0x00000013, 0x00000019, 0x00320011, 0x0032004D }, + }, + }, + { + 0x00000006, + { + { 0x0000001A, 0x00000020, 0x00320012, 0x0032004E }, + { 0x0000001B, 0x00000021, 0x00320013, 0x0032004F }, + { 0x0000001C, 0x00000022, 0x00320014, 0x00320050 }, + { 0x0000001D, 0x00000023, 0x00320015, 0x00320051 }, + { 0x0000001E, 0x00000024, 0x00320016, 0x00320052 }, + { 0x0000001F, 0x00000025, 0x00320017, 0x00320053 }, + }, + }, + { + 0x00000006, + { + { 0x00000026, 0x0000002C, 0x00320018, 0x00320054 }, + { 0x00000027, 0x0000002D, 0x00320019, 0x00320055 }, + { 0x00000028, 0x0000002E, 0x0032001A, 0x00320056 }, + { 0x00000029, 0x0000002F, 0x0032001B, 0x00320057 }, + { 0x0000002A, 0x00000030, 0x0032001C, 0x00320058 }, + { 0x0000002B, 0x00000031, 0x0032001D, 0x00320059 }, + }, + }, + { + 0x00000006, + { + { 0x00000032, 0x00000038, 0x0032001E, 0x0032005A }, + { 0x00000033, 0x00000039, 0x0032001F, 0x0032005B }, + { 0x00000034, 0x0000003A, 0x00320020, 0x0032005C }, + { 0x00000035, 0x0000003B, 0x00320021, 0x0032005D }, + { 0x00000036, 0x0000003C, 0x00320022, 0x0032005E }, + { 0x00000037, 0x0000003D, 0x00320023, 0x0032005F }, + }, + }, + { + 0x00000001, + { { 0x00000001, 0xFFFFFFFF, 0x00320041, 0x00320041 } }, + }, + { + 0x00000006, + { + { 0x0000003E, 0x00000044, 0x00320024, 0x00320060 }, + { 0x0000003F, 0x00000045, 0x00320025, 0x00320061 }, + { 0x00000040, 0x00000046, 0x00320026, 0x00320062 }, + { 0x00000041, 0x00000047, 0x00320027, 0x00320063 }, + { 0x00000042, 0x00000048, 0x00320028, 0x00320064 }, + { 0x00000043, 0x00000049, 0x00320029, 0x00320065 }, + }, + }, + { + 0x00000006, + { + { 0x0000004A, 0x00000050, 0x0032002A, 0x00320066 }, + { 0x0000004B, 0x00000051, 0x0032002B, 0x00320067 }, + { 0x0000004C, 0x00000052, 0x0032002C, 0x00320068 }, + { 0x0000004D, 0x00000053, 0x0032002D, 0x00320069 }, + { 0x0000004E, 0x00000054, 0x0032002E, 0x0032006A }, + { 0x0000004F, 0x00000055, 0x0032002F, 0x0032006B }, + }, + }, + { + 0x00000006, + { + { 0x00000056, 0x0000005C, 0x00320030, 0x0032006C }, + { 0x00000057, 0x0000005D, 0x00320031, 0x0032006D }, + { 0x00000058, 0x0000005E, 0x00320032, 0x0032006E }, + { 0x00000059, 0x0000005F, 0x00320033, 0x0032006F }, + { 0x0000005A, 0x00000060, 0x00320034, 0x00320070 }, + { 0x0000005B, 0x00000061, 0x00320035, 0x00320071 }, + }, + }, + { + 0x0000000B, + { + { 0x00000062, 0xFFFFFFFF, 0x00320036, 0x00320072 }, + { 0x00000063, 0xFFFFFFFF, 0x00320037, 0x00320073 }, + { 0x00000064, 0xFFFFFFFF, 0x00320038, 0x00320074 }, + { 0x00000065, 0xFFFFFFFF, 0x00320039, 0x00320075 }, + { 0x00000066, 0xFFFFFFFF, 0x0032003A, 0x00320076 }, + { 0x00000067, 0xFFFFFFFF, 0x0032003B, 0x00320077 }, + { 0x00000068, 0xFFFFFFFF, 0x0032003C, 0x00320078 }, + { 0x00000069, 0xFFFFFFFF, 0x0032003D, 0x00320079 }, + { 0x0000006A, 0xFFFFFFFF, 0x0032003E, 0x0032007A }, + { 0x0000006B, 0xFFFFFFFF, 0x0032003F, 0x0032007B }, + { 0x0000006C, 0xFFFFFFFF, 0x00320040, 0x0032007C }, + }, + }, }; omObjData *fn_1_1458(void) { - UnkPresentStruct2 *var_r31; s32 var_r30; - omObjData *var_r29; s32 var_r28; s16 var_r27; LightData *var_r26; - var_r29 = omAddObjEx(lbl_1_bss_4, 1003, 0, 0, 1, NULL); - var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 868, MEMORY_DEFAULT_NUM); + omObjData *var_r29 = omAddObjEx(lbl_1_bss_4, 1003, 0, 0, 1, NULL); + UnkPresentStruct2 *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 868, MEMORY_DEFAULT_NUM); var_r29->data = var_r31; var_r31->unk_234 = 0; var_r31->unk_238 = 0; @@ -157,11 +214,9 @@ omObjData *fn_1_1458(void) void fn_1_1784(omObjData *object) { - UnkPresentStruct2 *var_r31; s32 var_r30; - void *var_r29; - var_r31 = object->data; + UnkPresentStruct2 *var_r31 = object->data; fn_1_4040(var_r31->unk_228); fn_1_4040(var_r31->unk_22C); @@ -174,9 +229,8 @@ void fn_1_1784(omObjData *object) void fn_1_180C(omObjData *object, s32 arg1) { - UnkPresentStruct2 *var_r31; + UnkPresentStruct2 *var_r31 = object->data; - var_r31 = object->data; var_r31->unk_0C = arg1; object->func = lbl_1_data_6C[arg1]; object->unk10 = 0; @@ -185,9 +239,7 @@ void fn_1_180C(omObjData *object, s32 arg1) s32 fn_1_1850(omObjData *object) { - UnkPresentStruct2 *var_r31; - - var_r31 = object->data; + UnkPresentStruct2 *var_r31 = object->data; return var_r31->unk_0C; } @@ -196,9 +248,8 @@ static const s32 lbl_1_rodata_9F8[] = { 0, 1, 2, 3, 4, 0, 5, 6, 7, 0 }; void fn_1_186C(omObjData *object, s32 arg1) { - UnkPresentStruct2 *var_r31; + UnkPresentStruct2 *var_r31 = object->data; - var_r31 = object->data; if (arg1 < 48) { var_r31->unk_234 = lbl_1_rodata_9D8[arg1 / 6]; var_r31->unk_238 = arg1 % 6; @@ -216,120 +267,140 @@ void fn_1_186C(omObjData *object, s32 arg1) void fn_1_1928(omObjData *object) { Vec sp8; - UnkPresentStruct2 *var_r31; s32 var_r29; - UnkPresentStruct2 *var_r28; - var_r31 = object->data; + UnkPresentStruct2 *var_r31 = object->data; + switch (object->unk10) { - case 0: - var_r31->unk_00 = 0; - var_r31->unk_08 = 0; - object->unk10 = 1; - case 1: - if (var_r31->unk_08) { - fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); - fn_1_9A4(lbl_1_bss_8, 0.0f, 420.0f, -600.0f, 30); - } else { - fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); - fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); - } - object->unk10 = 2; - case 2: - if (!fn_1_B6C(lbl_1_bss_8) && !var_r31->unk_228->unk_20 && !fn_1_28F0(object)) { - fn_1_4080(var_r31->unk_228); - fn_1_4080(var_r31->unk_22C); + case 0: + var_r31->unk_00 = 0; + var_r31->unk_08 = 0; + object->unk10 = 1; + case 1: if (var_r31->unk_08) { - var_r29 = 0x320080; - } else if (var_r31->unk_234 == 5) { - var_r29 = 0x320085; - } else { - var_r29 = 0x32007e; + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 420.0f, -600.0f, 30); } - fn_1_40B0(var_r31->unk_22C, var_r29); - switch (var_r31->unk_234) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 6: - case 7: - case 8: + else { + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); + } + object->unk10 = 2; + case 2: + if (!fn_1_B6C(lbl_1_bss_8) && !var_r31->unk_228->unk_20 && !fn_1_28F0(object)) { + fn_1_4080(var_r31->unk_228); + fn_1_4080(var_r31->unk_22C); if (var_r31->unk_08) { - if (fn_1_2B84(object, var_r31->unk_234, 5)) { - var_r29 = 0x320005; - } else { - var_r29 = 0x320082; - } - } else if (fn_1_2BCC(object, var_r31->unk_234) > 0) { - var_r29 = 0x320001; - } else { - var_r29 = 0x320081; + var_r29 = 0x320080; } - fn_1_40B0(var_r31->unk_228, var_r29); - fn_1_4104(var_r31->unk_228, lbl_1_rodata_9F8[var_r31->unk_234], 0); - break; - case 5: - if (fn_1_2B84(object, 5, 0)) { - var_r29 = 0x320041; - } else { - var_r29 = 0x320084; + else if (var_r31->unk_234 == 5) { + var_r29 = 0x320085; } - fn_1_40B0(var_r31->unk_228, var_r29); - break; - case 9: - if (fn_1_2BCC(object, 9) > 0) { - var_r29 = 0x320083; - } else { - var_r29 = 0x320081; + else { + var_r29 = 0x32007e; } - fn_1_40B0(var_r31->unk_228, var_r29); - break; - default: - break; - } - if (var_r31->unk_08) { - sp8.x = 0.0f; - sp8.y = 600.0f; - sp8.z = -500.0f; - } else { - sp8.x = 0.0f; - sp8.y = 210.0f; - sp8.z = -500.0f; - } - Hu3D3Dto2D(&sp8, 1, &sp8); - sp8.y -= 15.0f; - sp8.x -= 20.0f; - espPosSet(var_r31->sprite, sp8.x, sp8.y); - if (!var_r31->unk_00) { - fn_1_144(var_r31->sprite, 1, 5); - var_r31->unk_00 = 1; + fn_1_40B0(var_r31->unk_22C, var_r29); + switch (var_r31->unk_234) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 7: + case 8: + if (var_r31->unk_08) { + if (fn_1_2B84(object, var_r31->unk_234, 5)) { + var_r29 = 0x320005; + } + else { + var_r29 = 0x320082; + } + } + else if (fn_1_2BCC(object, var_r31->unk_234) > 0) { + var_r29 = 0x320001; + } + else { + var_r29 = 0x320081; + } + fn_1_40B0(var_r31->unk_228, var_r29); + fn_1_4104(var_r31->unk_228, lbl_1_rodata_9F8[var_r31->unk_234], 0); + break; + case 5: + if (fn_1_2B84(object, 5, 0)) { + var_r29 = 0x320041; + } + else { + var_r29 = 0x320084; + } + fn_1_40B0(var_r31->unk_228, var_r29); + break; + case 9: + if (fn_1_2BCC(object, 9) > 0) { + var_r29 = 0x320083; + } + else { + var_r29 = 0x320081; + } + fn_1_40B0(var_r31->unk_228, var_r29); + break; + default: + break; + } + if (var_r31->unk_08) { + sp8.x = 0.0f; + sp8.y = 600.0f; + sp8.z = -500.0f; + } + else { + sp8.x = 0.0f; + sp8.y = 210.0f; + sp8.z = -500.0f; + } + Hu3D3Dto2D(&sp8, 1, &sp8); + sp8.y -= 15.0f; + sp8.x -= 20.0f; + espPosSet(var_r31->sprite, sp8.x, sp8.y); + if (!var_r31->unk_00) { + fn_1_144(var_r31->sprite, 1, 5); + var_r31->unk_00 = 1; + } + object->unk10 = 3; } - object->unk10 = 3; - } - break; - case 3: - if (!var_r31->unk_228->unk_20) { - if (fn_1_550(512) && !var_r31->unk_08) { - fn_1_144(var_r31->sprite, 0, 5); - var_r31->unk_00 = 0; - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); - HuAudFXPlay(3); - object->unk10 = 4; - } else if (fn_1_550(256) && !var_r31->unk_08) { - if (var_r31->unk_234 != 5) { + break; + case 3: + if (!var_r31->unk_228->unk_20) { + if (fn_1_550(512) && !var_r31->unk_08) { fn_1_144(var_r31->sprite, 0, 5); var_r31->unk_00 = 0; fn_1_4098(var_r31->unk_228); fn_1_4098(var_r31->unk_22C); - HuAudFXPlay(2); - fn_1_180C(object, 2); + HuAudFXPlay(3); + object->unk10 = 4; + } + else if (fn_1_550(256) && !var_r31->unk_08) { + if (var_r31->unk_234 != 5) { + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(2); + fn_1_180C(object, 2); + } + } + else if (fn_1_584(8) && !var_r31->unk_08) { + if ((var_r31->unk_234 != 5) && (var_r31->unk_234 != 9)) { + var_r31->unk_08 = 1; + fn_1_144(var_r31->sprite, 0, 5); + var_r31->unk_00 = 0; + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(0); + object->unk10 = 1; + } } - } else if (fn_1_584(8) && !var_r31->unk_08) { - if ((var_r31->unk_234 != 5) && (var_r31->unk_234 != 9)) { - var_r31->unk_08 = 1; + else if (fn_1_584(4) && var_r31->unk_08) { + var_r31->unk_08 = 0; fn_1_144(var_r31->sprite, 0, 5); var_r31->unk_00 = 0; fn_1_4098(var_r31->unk_228); @@ -337,55 +408,50 @@ void fn_1_1928(omObjData *object) HuAudFXPlay(0); object->unk10 = 1; } - } else if (fn_1_584(4) && var_r31->unk_08) { - var_r31->unk_08 = 0; - fn_1_144(var_r31->sprite, 0, 5); - var_r31->unk_00 = 0; - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); - HuAudFXPlay(0); - object->unk10 = 1; - } else if (fn_1_584(1)) { - fn_1_1FA8(object, 1); - HuAudFXPlay(0); - object->unk10 = 2; - } else if (fn_1_584(2)) { - fn_1_1FA8(object, 2); - HuAudFXPlay(0); - object->unk10 = 2; + else if (fn_1_584(1)) { + fn_1_1FA8(object, 1); + HuAudFXPlay(0); + object->unk10 = 2; + } + else if (fn_1_584(2)) { + fn_1_1FA8(object, 2); + HuAudFXPlay(0); + object->unk10 = 2; + } } - } - break; - case 4: - fn_1_180C(object, 0); - break; + break; + case 4: + fn_1_180C(object, 0); + break; } fn_1_2774(object); } void fn_1_1FA8(omObjData *object, s32 arg1) { - UnkPresentStruct2 *var_r31; + float var_f31; + float var_f30; + float var_f29; + s32 var_r30; s32 var_r29; s32 var_r28; - float var_f30; - float var_f31; - float var_f29; - var_r31 = object->data; + UnkPresentStruct2 *var_r31 = object->data; for (var_r30 = 0, var_f31 = 0.0f;; var_r30++) { var_f31 += 36.0f; if (arg1 == 1) { var_r29 = -1; - } else { + } + else { var_r29 = 1; } var_r31->unk_234 = var_r31->unk_234 + var_r29; if (var_r31->unk_234 < 0) { var_r31->unk_234 = 9; - } else if (var_r31->unk_234 >= 10) { + } + else if (var_r31->unk_234 >= 10) { var_r31->unk_234 = 0; } if (!((var_r31->unk_08) && ((var_r31->unk_234 == 5) || (var_r31->unk_234 == 9)))) { @@ -394,13 +460,15 @@ void fn_1_1FA8(omObjData *object, s32 arg1) } if (arg1 == 1) { var_f30 = -var_f31; - } else { + } + else { var_f30 = var_f31; } var_f29 = var_r31->unk_23C + var_f30; if (!var_r30) { var_r28 = 30; - } else { + } + else { var_r28 = 45; } fn_1_2708(object, var_f29, var_r28); @@ -408,124 +476,132 @@ void fn_1_1FA8(omObjData *object, s32 arg1) void fn_1_20E8(omObjData *object) { - Vec sp8; - UnkPresentStruct2 *var_r31; - s32 var_r29; - s32 var_r28; - s32 var_r27; - s32 var_r25; float var_f31; float var_f30; - var_r31 = object->data; - var_r29 = var_r31->unk_238; - var_r27 = var_r31->unk_234; + UnkPresentStruct2 *var_r31 = object->data; + s32 var_r29 = var_r31->unk_238; + s32 var_r27 = var_r31->unk_234; switch (object->unk10) { - case 0: - fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, -120.0f, 30); - fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); - var_r31->unk_04 = fn_1_2BCC(object, var_r27) > 0; - var_r31->unk_00 = 0; - var_r31->unk_238 = 0; - if (var_r31->unk_04) { - var_r25 = fn_1_3394(var_r31->unk_234); - for (var_r28 = 0; var_r28 < var_r25; var_r28++) { - if (fn_1_2B84(object, var_r27, var_r28)) { - var_r31->unk_238 = var_r28; - break; + case 0: + fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, -120.0f, 30); + fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); + var_r31->unk_04 = fn_1_2BCC(object, var_r27) > 0; + var_r31->unk_00 = 0; + var_r31->unk_238 = 0; + if (var_r31->unk_04) { + s32 var_r25 = fn_1_3394(var_r31->unk_234); + s32 var_r28; + for (var_r28 = 0; var_r28 < var_r25; var_r28++) { + if (fn_1_2B84(object, var_r27, var_r28)) { + var_r31->unk_238 = var_r28; + break; + } } } - } - object->unk10 = 1; - case 1: - if (fn_1_B6C(lbl_1_bss_8)) { - break; - } - fn_1_4080(var_r31->unk_228); - fn_1_4080(var_r31->unk_22C); - fn_1_40B0(var_r31->unk_22C, 0x32007F); - - if (var_r31->unk_04) { - fn_1_40B0(var_r31->unk_228, lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_0C); - } else { - fn_1_40B0(var_r31->unk_228, 0x320003); - } - var_r31->unk_258 = 0.0f; - var_r31->unk_25C = 5.0f / 30.0f; - if (var_r31->unk_04) { - fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_00], &sp8.x, &sp8.y, &sp8.z); - Hu3D3Dto2D(&sp8, 1, &sp8); - sp8.y -= 15.0f; - sp8.x -= 20.0f; - if (!var_r31->unk_00) { - fn_1_144(var_r31->sprite, 1, 5); - var_r31->unk_00 = 1; - var_r31->unk_260 = sp8.x; - var_r31->unk_264 = sp8.y; - } else { - var_r31->unk_260 = var_r31->unk_268; - var_r31->unk_264 = var_r31->unk_26C; + object->unk10 = 1; + case 1: + if (fn_1_B6C(lbl_1_bss_8)) { + break; } - var_r31->unk_268 = sp8.x; - var_r31->unk_26C = sp8.y; - object->unk10 = 2; - } else { + fn_1_4080(var_r31->unk_228); + fn_1_4080(var_r31->unk_22C); + fn_1_40B0(var_r31->unk_22C, 0x32007F); + + if (var_r31->unk_04) { + fn_1_40B0(var_r31->unk_228, lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_0C); + } + else { + fn_1_40B0(var_r31->unk_228, 0x320003); + } + var_r31->unk_258 = 0.0f; + var_r31->unk_25C = 5.0f / 30.0f; + if (var_r31->unk_04) { + Vec sp8; + fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_00], &sp8.x, &sp8.y, &sp8.z); + Hu3D3Dto2D(&sp8, 1, &sp8); + sp8.y -= 15.0f; + sp8.x -= 20.0f; + if (!var_r31->unk_00) { + fn_1_144(var_r31->sprite, 1, 5); + var_r31->unk_00 = 1; + var_r31->unk_260 = sp8.x; + var_r31->unk_264 = sp8.y; + } + else { + var_r31->unk_260 = var_r31->unk_268; + var_r31->unk_264 = var_r31->unk_26C; + } + var_r31->unk_268 = sp8.x; + var_r31->unk_26C = sp8.y; + object->unk10 = 2; + } + else { + object->unk10 = 3; + break; + } + case 2: + var_f31 = var_r31->unk_260 + (var_r31->unk_258 * (var_r31->unk_268 - var_r31->unk_260)); + var_f30 = var_r31->unk_264 + (var_r31->unk_258 * (var_r31->unk_26C - var_r31->unk_264)); + espPosSet(var_r31->sprite, var_f31, var_f30); + if ((var_r31->unk_258 = var_r31->unk_258 + var_r31->unk_25C) < 1.0f) { + break; + } + espPosSet(var_r31->sprite, var_r31->unk_268, var_r31->unk_26C); object->unk10 = 3; + case 3: + if (fn_1_550(512)) { + fn_1_4098(var_r31->unk_228); + fn_1_4098(var_r31->unk_22C); + HuAudFXPlay(3); + object->unk10 = 4; + } + else if (var_r31->unk_04) { + if (fn_1_584(1) && fn_1_5B8(8)) { + var_r29 = fn_1_2C5C(object, 5); + } + else if (fn_1_584(1) && fn_1_5B8(4)) { + var_r29 = fn_1_2C5C(object, 9); + } + else if (fn_1_584(2) && fn_1_5B8(8)) { + var_r29 = fn_1_2C5C(object, 6); + } + else if (fn_1_584(2) && fn_1_5B8(4)) { + var_r29 = fn_1_2C5C(object, 10); + } + else if (fn_1_584(1)) { + var_r29 = fn_1_2C5C(object, 1); + } + else if (fn_1_584(2)) { + var_r29 = fn_1_2C5C(object, 2); + } + else if (fn_1_584(8)) { + var_r29 = fn_1_2C5C(object, 4); + } + else if (fn_1_584(4)) { + var_r29 = fn_1_2C5C(object, 8); + } + } + else { + break; + } + if (var_r29 == -1) { + var_r29 = var_r31->unk_238; + } + if (var_r29 != var_r31->unk_238) { + var_r31->unk_238 = var_r29; + object->unk10 = 1; + HuAudFXPlay(0); + } break; - } - case 2: - var_f31 = var_r31->unk_260 + (var_r31->unk_258 * (var_r31->unk_268 - var_r31->unk_260)); - var_f30 = var_r31->unk_264 + (var_r31->unk_258 * (var_r31->unk_26C - var_r31->unk_264)); - espPosSet(var_r31->sprite, var_f31, var_f30); - if ((var_r31->unk_258 = var_r31->unk_258 + var_r31->unk_25C) < 1.0f) { - break; - } - espPosSet(var_r31->sprite, var_r31->unk_268, var_r31->unk_26C); - object->unk10 = 3; - case 3: - if (fn_1_550(512)) { - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); - HuAudFXPlay(3); - object->unk10 = 4; - } else if (var_r31->unk_04) { - if (fn_1_584(1) && fn_1_5B8(8)) { - var_r29 = fn_1_2C5C(object, 5); - } else if (fn_1_584(1) && fn_1_5B8(4)) { - var_r29 = fn_1_2C5C(object, 9); - } else if (fn_1_584(2) && fn_1_5B8(8)) { - var_r29 = fn_1_2C5C(object, 6); - } else if (fn_1_584(2) && fn_1_5B8(4)) { - var_r29 = fn_1_2C5C(object, 10); - } else if (fn_1_584(1)) { - var_r29 = fn_1_2C5C(object, 1); - } else if (fn_1_584(2)) { - var_r29 = fn_1_2C5C(object, 2); - } else if (fn_1_584(8)) { - var_r29 = fn_1_2C5C(object, 4); - } else if (fn_1_584(4)) { - var_r29 = fn_1_2C5C(object, 8); + case 4: + if (var_r31->unk_00) { + fn_1_144(var_r31->sprite, 0, 5); } - } else { + fn_1_180C(object, 1); + break; + default: break; - } - if (var_r29 == -1) { - var_r29 = var_r31->unk_238; - } - if (var_r29 != var_r31->unk_238) { - var_r31->unk_238 = var_r29; - object->unk10 = 1; - HuAudFXPlay(0); - } - break; - case 4: - if (var_r31->unk_00) { - fn_1_144(var_r31->sprite, 0, 5); - } - fn_1_180C(object, 1); - break; - default: - break; } } @@ -541,9 +617,8 @@ void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3) void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) { - UnkPresentStruct2 *var_r31; + UnkPresentStruct2 *var_r31 = arg0->data; - var_r31 = arg0->data; var_r31->unk_244 = arg8; var_r31->unk_240 = var_r31->unk_23C; var_r31->unk_248 = 0.0f; @@ -552,14 +627,11 @@ void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) void fn_1_2774(omObjData *object) { - UnkPresentStruct2 *var_r31; - float var_f31; s32 var_r30; - - var_r31 = object->data; + UnkPresentStruct2 *var_r31 = object->data; if (var_r31->unk_248 < 1.0f) { - var_f31 = sin(90.0f * var_r31->unk_248 * M_PI / 180.0f); + float var_f31 = sin(90.0f * var_r31->unk_248 * M_PI / 180.0f); var_f31 *= var_f31; var_r31->unk_23C = var_r31->unk_240 + (var_f31 * (var_r31->unk_244 - var_r31->unk_240)); @@ -580,9 +652,7 @@ void fn_1_2774(omObjData *object) s32 fn_1_28F0(omObjData *object) { - UnkPresentStruct2 *var_r31; - - var_r31 = object->data; + UnkPresentStruct2 *var_r31 = object->data; return var_r31->unk_248 < 1.0f; } @@ -590,15 +660,14 @@ s32 lbl_1_data_84[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; void fn_1_2924(omObjData *object) { - UnkPresentStruct2 *var_r31; + UnkPresentStruct2 *var_r31 = object->data; s32 var_r30; - s32 var_r27; s32 var_r29; - var_r31 = object->data; Hu3DModelAttrReset(var_r31->unk_10[0]->model[0], 1); for (var_r29 = 0; var_r29 < 8; var_r29++) { + s32 var_r27; if (fn_1_2BCC(object, lbl_1_data_84[var_r29]) > 0) { Hu3DModelAttrReset(var_r31->unk_10[var_r29 + 109]->model[0], 1); } @@ -636,9 +705,7 @@ static const s32 lbl_1_rodata_A74[] = { 0, 6, 12, 18, 24, 59, 30, 36, 42, 48 }; s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2) { - UnkPresentStruct2 *var_r31; - - var_r31 = arg0->data; + UnkPresentStruct2 *var_r31 = arg0->data; return var_r31->unk_270[arg2 + lbl_1_rodata_A74[arg1]] != 0; } @@ -646,10 +713,7 @@ s32 fn_1_2BCC(omObjData *object, s32 arg1) { s32 var_r31; s32 var_r30; - UnkPresentStruct2 *var_r29; - s32 var_r28; - - var_r28 = fn_1_3394(arg1); + s32 var_r28 = fn_1_3394(arg1); for (var_r30 = 0, var_r31 = 0; var_r31 < var_r28; var_r31++) { if (fn_1_2B84(object, arg1, var_r31)) { @@ -664,27 +728,18 @@ s32 fn_1_2C5C(omObjData *object, s32 arg1) { UnkPresentStruct7 spA4[10]; Vec sp38; - Vec sp2C; - UnkPresentStruct7 sp24; + float var_f31; float var_f30; - float var_f29; - UnkPresentStruct2 *var_r31; + + UnkPresentStruct2 *var_r31 = object->data; s32 var_r30; s32 var_r28; s32 var_r26; s32 var_r23; - s32 var_r22; - omObjData *var_r21; - omObjData *var_r19; - s32 var_r18; - s32 var_r17; + s32 var_r22 = fn_1_3394(var_r31->unk_234); + s32 var_r18 = fn_1_2BCC(object, var_r31->unk_234); - var_r31 = object->data; - - var_r22 = fn_1_3394(var_r31->unk_234); - - var_r18 = fn_1_2BCC(object, var_r31->unk_234); if (var_r18 == 1) { return var_r31->unk_238; } @@ -693,6 +748,8 @@ s32 fn_1_2C5C(omObjData *object, s32 arg1) Hu3D3Dto2D(&sp38, 1, &sp38); for (var_r28 = 0, var_r26 = 0; !var_r28 && (var_r26 < 1); var_r26++) { for (var_r28 = 0, var_r30 = 0; var_r30 < var_r22; var_r30++) { + Vec sp2C; + float var_f29; if (var_r30 == var_r31->unk_238) { continue; } @@ -722,48 +779,39 @@ s32 fn_1_2C5C(omObjData *object, s32 arg1) continue; } switch (arg1) { - case 0: - break; - case 1: - L_00003218: - arg1 = 2; - break; - case 2: - L_00003220: - arg1 = 1; - break; - case 3: - break; - case 4: - L_00003228: - arg1 = 8; - break; - case 7: - break; - case 8: - L_00003230: - arg1 = 4; - break; - case 5: - L_00003238: - arg1 = 10; - break; - case 9: - L_00003240: - arg1 = 6; - break; - case 6: - L_00003248: - arg1 = 9; - break; - case 10: - L_00003250: - arg1 = 5; - break; - default: - break; + case 0: + break; + case 1: + arg1 = 2; + break; + case 2: + arg1 = 1; + break; + case 3: + break; + case 4: + arg1 = 8; + break; + case 7: + break; + case 8: + arg1 = 4; + break; + case 5: + arg1 = 10; + break; + case 9: + arg1 = 6; + break; + case 6: + arg1 = 9; + break; + case 10: + arg1 = 5; + break; + default: + break; } - // L_00003254: } if (!var_r28) { return var_r31->unk_238; @@ -771,7 +819,7 @@ s32 fn_1_2C5C(omObjData *object, s32 arg1) do { for (var_r23 = 0, var_r30 = 0; var_r30 < (var_r28 - 1); var_r30++) { if (spA4[var_r30].unk_04 > spA4[var_r30 + 1].unk_04) { - sp24 = spA4[var_r30 + 1]; + UnkPresentStruct7 sp24 = spA4[var_r30 + 1]; spA4[var_r30 + 1] = spA4[var_r30]; spA4[var_r30] = sp24; var_r23 = 1; @@ -795,61 +843,57 @@ static const s32 lbl_1_rodata_B68[] = { 118, 119, 120, 121, 122, 0, 123, 124, 12 void fn_1_33AC(omObjData *object) { - f32 var_f29; - f32 var_f30; f32 var_f31; - UnkPresentStruct2 *var_r31; - UnkPresentStruct2 *var_r30; - UnkPresentStruct2 *var_r28; - s32 var_r27; + f32 var_f29; + + UnkPresentStruct2 *var_r31 = object->data; - var_r31 = object->data; switch (object->unk10) { - case 0: - var_f29 = 36.0f * var_r31->unk_234; - fn_1_2708(object, var_f29, 1); - fn_1_2774(object); - Hu3DModelAttrSet(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1); - Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B68[var_r31->unk_234]]->model[0], 1); - Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B40[var_r31->unk_234]]->model[0], 1); - var_r31->unk_24C = 0.0f; - var_r31->unk_254 = 1.0f / 360.0f; - object->unk10 = 1; - case 1: - WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 120); - object->unk10 = 2; - case 2: - var_f31 = sind(90.0f * var_r31->unk_24C); - var_f31 *= var_f31; - fn_1_920(lbl_1_bss_8, 0.0f, 820.0f - (600.0f * var_f31), -120.0f, 1); - fn_1_9A4(lbl_1_bss_8, 0.0f, 680.0f - (680.0f * var_f31), -600.0f, 1); - omSetTra(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_AF0[var_r31->unk_234]], 0.0f, 840.0f - (840.0f * var_f31), 0.0f); - if ((var_r31->unk_24C = var_r31->unk_24C + var_r31->unk_254) < 1.0f) { - return; - } - if (fn_1_393C(var_r31->unk_234, var_r31->unk_238)) { - fn_1_334(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1, 0.4f, 30); - } - object->unk10 = 3; - case 3: - fn_1_4080(var_r31->unk_228); - fn_1_4104(var_r31->unk_228, lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r31->unk_238].unk08, 0); - fn_1_40B0(var_r31->unk_228, 0x320004); - fn_1_419C(var_r31->unk_228); - object->unk10 = 4; - case 4: - if (var_r31->unk_228->unk_20) { + case 0: + var_f29 = 36.0f * var_r31->unk_234; + fn_1_2708(object, var_f29, 1); + fn_1_2774(object); + Hu3DModelAttrSet(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1); + Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B68[var_r31->unk_234]]->model[0], 1); + Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B40[var_r31->unk_234]]->model[0], 1); + var_r31->unk_24C = 0.0f; + var_r31->unk_254 = 1.0f / 360.0f; + object->unk10 = 1; + case 1: + WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 120); + object->unk10 = 2; + case 2: + var_f31 = sind(90.0f * var_r31->unk_24C); + var_f31 *= var_f31; + fn_1_920(lbl_1_bss_8, 0.0f, 820.0f - (600.0f * var_f31), -120.0f, 1); + fn_1_9A4(lbl_1_bss_8, 0.0f, 680.0f - (680.0f * var_f31), -600.0f, 1); + omSetTra(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_AF0[var_r31->unk_234]], 0.0f, 840.0f - (840.0f * var_f31), 0.0f); + if ((var_r31->unk_24C = var_r31->unk_24C + var_r31->unk_254) < 1.0f) { + return; + } + if (fn_1_393C(var_r31->unk_234, var_r31->unk_238)) { + fn_1_334(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1, 0.4f, 30); + } + object->unk10 = 3; + case 3: + fn_1_4080(var_r31->unk_228); + fn_1_4104(var_r31->unk_228, lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r31->unk_238].unk08, 0); + fn_1_40B0(var_r31->unk_228, 0x320004); + fn_1_419C(var_r31->unk_228); + object->unk10 = 4; + case 4: + if (var_r31->unk_228->unk_20) { + break; + } + object->unk10 = 5; + case 5: + fn_1_4098(var_r31->unk_228); + object->unk10 = 6; + case 6: + if (!var_r31->unk_228->unk_20) { + fn_1_180C(object, 0); + } break; - } - object->unk10 = 5; - case 5: - fn_1_4098(var_r31->unk_228); - object->unk10 = 6; - case 6: - if (!var_r31->unk_228->unk_20) { - fn_1_180C(object, 0); - } - break; } } From 004925d41c1249be49b0aec0b2b4fbaa62d53162 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Fri, 2 Aug 2024 01:56:43 +0200 Subject: [PATCH 4/7] Made struct defs more local in present dll --- include/REL/present.h | 127 +------------------------------------- src/REL/option/state.c | 10 +-- src/REL/present/camera.c | 28 +++++++++ src/REL/present/common.c | 22 +++++++ src/REL/present/init.c | 13 ++++ src/REL/present/main.c | 13 +++- src/REL/present/present.c | 50 +++++++++++++++ 7 files changed, 131 insertions(+), 132 deletions(-) diff --git a/include/REL/present.h b/include/REL/present.h index 12706b86..a47db699 100644 --- a/include/REL/present.h +++ b/include/REL/present.h @@ -2,7 +2,6 @@ #define PRESENT_H #include "game/object.h" -// #include "REL/option.h" // this causes problems because of the extern bsses typedef struct UnkWindowDataStruct { /* 0x00 */ Process *process; @@ -15,131 +14,7 @@ typedef struct UnkWindowDataStruct { /* 0x18 */ u32 unk18; /* 0x1C */ s32 choice; /* 0x20 */ s32 unk_20; -} UnkWindowDataStruct; // this already exists in option.h - -typedef struct UnkPresentStruct { - /* 0x00 */ UnkWindowDataStruct *unk_00; - /* 0x04 */ s32 unk_04; -} UnkPresentStruct; - -typedef struct UnkPresentStruct2 { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s32 unk_04; - /* 0x08 */ s32 unk_08; - /* 0x0C */ s32 unk_0C; - /* 0x10 */ omObjData *unk_10[134]; - /* 0x228 */ UnkWindowDataStruct *unk_228; - /* 0x22C */ UnkWindowDataStruct *unk_22C; - /* 0x230 */ s16 sprite; - /* 0x234 */ s32 unk_234; - /* 0x238 */ s32 unk_238; - /* 0x23C */ float unk_23C; - /* 0x240 */ float unk_240; - /* 0x244 */ float unk_244; - /* 0x248 */ float unk_248; - /* 0x24C */ float unk_24C; - /* 0x250 */ float unk_250; - /* 0x254 */ float unk_254; - /* 0x258 */ float unk_258; - /* 0x25C */ float unk_25C; - /* 0x260 */ float unk_260; - /* 0x264 */ float unk_264; - /* 0x268 */ float unk_268; - /* 0x26C */ float unk_26C; - /* 0x270 */ s32 unk_270[60]; -} UnkPresentStruct2; - -typedef struct UnkPresentStruct3 { - /* 0x00 */ Vec unk_00; - /* 0x0C */ Vec unk_0C; - /* 0x18 */ GXColor unk_18; -} UnkPresentStruct3; - -typedef struct UnkPresentStruct4 { - /* 0x00 */ Vec unk_00; - /* 0x0C */ Vec unk_0C; - /* 0x18 */ Vec unk_18; -} UnkPresentStruct4; - -typedef struct UnkPresentStruct5 { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s16 unk_04; - /* 0x08 */ float x; - /* 0x0C */ float y; - /* 0x10 */ float z; - /* 0x14 */ float unk_14; - /* 0x18 */ s32 unk18[2]; - /* 0x20 */ float unk_20; - /* 0x24 */ float unk_24; - /* 0x28 */ float unk_28; - /* 0x2C */ float unk_2C; - /* 0x30 */ float unk_30; - /* 0x34 */ float unk_34; - /* 0x38 */ float unk_38; - /* 0x3C */ s32 unk3C[3]; - /* 0x48 */ float unk_48; - /* 0x4C */ float unk_4C; - /* 0x50 */ s32 unk_50; - /* 0x54 */ s32 unk_54; -} UnkPresentStruct5; - -typedef struct UnkPresentStruct6 { - /* 0x00 */ s16 unk_00; - /* 0x04 */ float unk_04; - /* 0x08 */ float unk_08; -} UnkPresentStruct6; // looks like a struct in option/scene.c - -typedef struct UnkPresentStruct6Weird { - /* 0x00 */ s16 unk_00; - /* 0x04 */ float unk_04; - /* 0x08 */ float unk_08; - /* 0x0C */ float unk_0C; -} UnkPresentStruct6Weird; // looks like a struct in option/scene.c - -typedef struct UnkPresentCameraStruct { - /* 0x00 */ Vec pos; - /* 0x0C */ Vec target; - /* 0x18 */ Vec up; - /* 0x24 */ float unk_24; - /* 0x28 */ float unk_28; - /* 0x2C */ Vec unk_2C; - /* 0x38 */ Vec unk_38; - /* 0x44 */ float unk44; - /* 0x48 */ float unk48; - /* 0x4C */ float unk4C; - /* 0x50 */ float unk_50; - /* 0x54 */ float unk_54; - /* 0x58 */ Vec unk_58; - /* 0x64 */ Vec unk_64; - /* 0x70 */ float unk70; - /* 0x74 */ float unk74; - /* 0x78 */ float unk78; - /* 0x7C */ float unk_7C; - /* 0x80 */ float unk_80; - /* 0x84 */ float unk_84; - /* 0x88 */ float unk_88; - /* 0x8C */ float unk_8C; - /* 0x90 */ float unk_90; - /* 0x94 */ float unk_94; - /* 0x98 */ float unk_98; -} UnkPresentCameraStruct; - -typedef struct UnkPresentNestedInnerStruct { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s32 unk_04; - /* 0x08 */ s32 unk08; - /* 0x0C */ s32 unk_0C; -} UnkPresentNestedInnerStruct; - -typedef struct UnkPresentNestedOuterStruct { - /* 0x00 */ s32 unk00; - /* 0x04 */ UnkPresentNestedInnerStruct unk_04[11]; -} UnkPresentNestedOuterStruct; - -typedef struct UnkPresentStruct7 { - /* 0x00 */ s32 unk_00; - /* 0x04 */ float unk_04; -} UnkPresentStruct7; +} UnkWindowDataStruct; /* size 0x24 */ // this already exists in option.h extern omObjData *lbl_1_bss_10; extern omObjData *lbl_1_bss_8; diff --git a/src/REL/option/state.c b/src/REL/option/state.c index a2fc6f37..1ed1cb12 100755 --- a/src/REL/option/state.c +++ b/src/REL/option/state.c @@ -10,13 +10,13 @@ typedef struct { /* 0x00 */ OptionWindow *window; /* 0x04 */ s32 quitTimer; /* 0x08 */ s16 light; -} StateWork; // Size 0xC +} StateWork; /* size = 0x0C */ typedef struct { - Vec src; - Vec dest; - GXColor color; -} UnkLightDataStruct; // Size 0x1C TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 + /* 0x00 */ Vec src; + /* 0x0C */ Vec dest; + /* 0x18 */ GXColor color; +} UnkLightDataStruct; /* size = 0x1C */ // TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 static void ExecState(omObjData *object); diff --git a/src/REL/present/camera.c b/src/REL/present/camera.c index f6b2e29f..4da4721b 100644 --- a/src/REL/present/camera.c +++ b/src/REL/present/camera.c @@ -5,6 +5,34 @@ #include "REL/present.h" +typedef struct UnkPresentCameraStruct { + /* 0x00 */ Vec pos; + /* 0x0C */ Vec target; + /* 0x18 */ Vec up; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ Vec unk_2C; + /* 0x38 */ Vec unk_38; + /* 0x44 */ float unk44; + /* 0x48 */ float unk48; + /* 0x4C */ float unk4C; + /* 0x50 */ float unk_50; + /* 0x54 */ float unk_54; + /* 0x58 */ Vec unk_58; + /* 0x64 */ Vec unk_64; + /* 0x70 */ float unk70; + /* 0x74 */ float unk74; + /* 0x78 */ float unk78; + /* 0x7C */ float unk_7C; + /* 0x80 */ float unk_80; + /* 0x84 */ float unk_84; + /* 0x88 */ float unk_88; + /* 0x8C */ float unk_8C; + /* 0x90 */ float unk_90; + /* 0x94 */ float unk_94; + /* 0x98 */ float unk_98; +} UnkPresentCameraStruct; /* size = 0x9C */ + void fn_1_C20(omObjData *object); omObjData *fn_1_6B4(void) diff --git a/src/REL/present/common.c b/src/REL/present/common.c index 02e984fa..4ffe63e6 100644 --- a/src/REL/present/common.c +++ b/src/REL/present/common.c @@ -6,6 +6,28 @@ #include "REL/present.h" +typedef struct UnkPresentStruct5 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s16 unk_04; + /* 0x08 */ float x; + /* 0x0C */ float y; + /* 0x10 */ float z; + /* 0x14 */ float unk_14; + /* 0x18 */ s32 unk18[2]; + /* 0x20 */ float unk_20; + /* 0x24 */ float unk_24; + /* 0x28 */ float unk_28; + /* 0x2C */ float unk_2C; + /* 0x30 */ float unk_30; + /* 0x34 */ float unk_34; + /* 0x38 */ float unk_38; + /* 0x3C */ s32 unk3C[3]; + /* 0x48 */ float unk_48; + /* 0x4C */ float unk_4C; + /* 0x50 */ s32 unk_50; + /* 0x54 */ s32 unk_54; +} UnkPresentStruct5; /* size = 0x58 */ + void fn_1_4620(omObjData *object); void fn_1_4880(omObjData *object); diff --git a/src/REL/present/init.c b/src/REL/present/init.c index 5b8a3164..c572694e 100644 --- a/src/REL/present/init.c +++ b/src/REL/present/init.c @@ -8,6 +8,19 @@ #include "REL/present.h" +typedef struct UnkPresentStruct6 { + /* 0x00 */ s16 unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; +} UnkPresentStruct6; /* size 0x0C */ // looks like a struct in option/scene.c + +typedef struct UnkPresentStruct6Weird { + /* 0x00 */ s16 unk_00; + /* 0x04 */ float unk_04; + /* 0x08 */ float unk_08; + /* 0x0C */ float unk_0C; +} UnkPresentStruct6Weird; /* size = 0x10 */ // looks like a struct in option/scene.c + omObjData *lbl_1_bss_18; omObjData *lbl_1_bss_14; omObjData *lbl_1_bss_10; diff --git a/src/REL/present/main.c b/src/REL/present/main.c index 0e4cbfa7..2876b242 100644 --- a/src/REL/present/main.c +++ b/src/REL/present/main.c @@ -7,6 +7,17 @@ #include "REL/present.h" +typedef struct UnkPresentStruct { + /* 0x00 */ UnkWindowDataStruct *unk_00; + /* 0x04 */ s32 unk_04; +} UnkPresentStruct; /* size = 0x08 */ + +typedef struct UnkPresentStruct4 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ Vec unk_18; +} UnkPresentStruct4; /* size = 0x1C */ + omObjData *lbl_1_bss_20; UnkPresentStruct4 lbl_1_data_F0 = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; @@ -269,7 +280,7 @@ void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) void fn_1_41E0(void) { UnkWindowDataStruct *windowData = HuPrcCurrentGet()->user_data; - + while (TRUE) { switch (windowData->unk_20) { case 1: diff --git a/src/REL/present/present.c b/src/REL/present/present.c index 1aa725eb..7daf7f57 100644 --- a/src/REL/present/present.c +++ b/src/REL/present/present.c @@ -8,6 +8,56 @@ #include "REL/present.h" +typedef struct UnkPresentStruct2 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk_08; + /* 0x0C */ s32 unk_0C; + /* 0x10 */ omObjData *unk_10[134]; + /* 0x228 */ UnkWindowDataStruct *unk_228; + /* 0x22C */ UnkWindowDataStruct *unk_22C; + /* 0x230 */ s16 sprite; + /* 0x234 */ s32 unk_234; + /* 0x238 */ s32 unk_238; + /* 0x23C */ float unk_23C; + /* 0x240 */ float unk_240; + /* 0x244 */ float unk_244; + /* 0x248 */ float unk_248; + /* 0x24C */ float unk_24C; + /* 0x250 */ float unk_250; + /* 0x254 */ float unk_254; + /* 0x258 */ float unk_258; + /* 0x25C */ float unk_25C; + /* 0x260 */ float unk_260; + /* 0x264 */ float unk_264; + /* 0x268 */ float unk_268; + /* 0x26C */ float unk_26C; + /* 0x270 */ s32 unk_270[60]; +} UnkPresentStruct2; /* size = 0x3F0 */ + +typedef struct UnkPresentStruct3 { + /* 0x00 */ Vec unk_00; + /* 0x0C */ Vec unk_0C; + /* 0x18 */ GXColor unk_18; +} UnkPresentStruct3; /* size = 0x1C */ // same as option::state::UnkLightDataStruct + +typedef struct UnkPresentNestedInnerStruct { + /* 0x00 */ s32 unk_00; + /* 0x04 */ s32 unk_04; + /* 0x08 */ s32 unk08; + /* 0x0C */ s32 unk_0C; +} UnkPresentNestedInnerStruct; /* size = 0x10 */ + +typedef struct UnkPresentNestedOuterStruct { + /* 0x00 */ s32 unk00; + /* 0x04 */ UnkPresentNestedInnerStruct unk_04[11]; +} UnkPresentNestedOuterStruct; /* size = 0x08 */ + +typedef struct UnkPresentStruct7 { + /* 0x00 */ s32 unk_00; + /* 0x04 */ float unk_04; +} UnkPresentStruct7; /* size = 0x08 */ + void fn_1_180C(omObjData *object, s32 arg1); void fn_1_1928(omObjData *arg0); void fn_1_1FA8(omObjData *object, s32 arg1); From a7bde60c976236b586cbdadedbb8f1be8bb2b680 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Fri, 2 Aug 2024 02:33:40 +0200 Subject: [PATCH 5/7] Made local functions static in present dll Added missing includes in present.h --- config/GMPE01_00/rels/present/symbols.txt | 72 +++++++++++------------ include/REL/present.h | 12 ++++ src/REL/present/camera.c | 18 +++--- src/REL/present/common.c | 16 ++--- src/REL/present/init.c | 18 +++--- src/REL/present/main.c | 25 ++++---- src/REL/present/present.c | 57 +++++++++--------- 7 files changed, 114 insertions(+), 104 deletions(-) diff --git a/config/GMPE01_00/rels/present/symbols.txt b/config/GMPE01_00/rels/present/symbols.txt index 415738fe..08892e5b 100644 --- a/config/GMPE01_00/rels/present/symbols.txt +++ b/config/GMPE01_00/rels/present/symbols.txt @@ -2,70 +2,70 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ObjectSetup = .text:0x000000A0; // type:function size:0xA4 fn_1_144 = .text:0x00000144; // type:function size:0x110 -fn_1_254 = .text:0x00000254; // type:function size:0xE0 +fn_1_254 = .text:0x00000254; // type:function size:0xE0 scope:local fn_1_334 = .text:0x00000334; // type:function size:0x128 -fn_1_45C = .text:0x0000045C; // type:function size:0xF4 +fn_1_45C = .text:0x0000045C; // type:function size:0xF4 scope:local fn_1_550 = .text:0x00000550; // type:function size:0x34 fn_1_584 = .text:0x00000584; // type:function size:0x34 fn_1_5B8 = .text:0x000005B8; // type:function size:0x34 -fn_1_5EC = .text:0x000005EC; // type:function size:0xC8 +fn_1_5EC = .text:0x000005EC; // type:function size:0xC8 scope:local fn_1_6B4 = .text:0x000006B4; // type:function size:0x23C fn_1_8F0 = .text:0x000008F0; // type:function size:0x30 fn_1_920 = .text:0x00000920; // type:function size:0x84 fn_1_9A4 = .text:0x000009A4; // type:function size:0x84 -fn_1_A28 = .text:0x00000A28; // type:function size:0x84 -fn_1_AAC = .text:0x00000AAC; // type:function size:0x30 -fn_1_ADC = .text:0x00000ADC; // type:function size:0x30 -fn_1_B0C = .text:0x00000B0C; // type:function size:0x30 -fn_1_B3C = .text:0x00000B3C; // type:function size:0x30 +fn_1_A28 = .text:0x00000A28; // type:function size:0x84 scope:local +fn_1_AAC = .text:0x00000AAC; // type:function size:0x30 scope:local +fn_1_ADC = .text:0x00000ADC; // type:function size:0x30 scope:local +fn_1_B0C = .text:0x00000B0C; // type:function size:0x30 scope:local +fn_1_B3C = .text:0x00000B3C; // type:function size:0x30 scope:local fn_1_B6C = .text:0x00000B6C; // type:function size:0x8C fn_1_BF8 = .text:0x00000BF8; // type:function size:0x28 -fn_1_C20 = .text:0x00000C20; // type:function size:0x578 -fn_1_1198 = .text:0x00001198; // type:function size:0x200 -fn_1_1398 = .text:0x00001398; // type:function size:0xC0 +fn_1_C20 = .text:0x00000C20; // type:function size:0x578 scope:local +fn_1_1198 = .text:0x00001198; // type:function size:0x200 scope:local +fn_1_1398 = .text:0x00001398; // type:function size:0xC0 scope:local fn_1_1458 = .text:0x00001458; // type:function size:0x32C fn_1_1784 = .text:0x00001784; // type:function size:0x88 fn_1_180C = .text:0x0000180C; // type:function size:0x44 fn_1_1850 = .text:0x00001850; // type:function size:0x1C fn_1_186C = .text:0x0000186C; // type:function size:0xBC -fn_1_1928 = .text:0x00001928; // type:function size:0x680 -fn_1_1FA8 = .text:0x00001FA8; // type:function size:0x140 -fn_1_20E8 = .text:0x000020E8; // type:function size:0x5A4 -fn_1_268C = .text:0x0000268C; // type:function size:0x7C -fn_1_2708 = .text:0x00002708; // type:function size:0x6C -fn_1_2774 = .text:0x00002774; // type:function size:0x17C -fn_1_28F0 = .text:0x000028F0; // type:function size:0x34 -fn_1_2924 = .text:0x00002924; // type:function size:0x260 -fn_1_2B84 = .text:0x00002B84; // type:function size:0x48 -fn_1_2BCC = .text:0x00002BCC; // type:function size:0x90 -fn_1_2C5C = .text:0x00002C5C; // type:function size:0x738 -fn_1_3394 = .text:0x00003394; // type:function size:0x18 -fn_1_33AC = .text:0x000033AC; // type:function size:0x590 -fn_1_393C = .text:0x0000393C; // type:function size:0x6C +fn_1_1928 = .text:0x00001928; // type:function size:0x680 scope:local +fn_1_1FA8 = .text:0x00001FA8; // type:function size:0x140 scope:local +fn_1_20E8 = .text:0x000020E8; // type:function size:0x5A4 scope:local +fn_1_268C = .text:0x0000268C; // type:function size:0x7C scope:local +fn_1_2708 = .text:0x00002708; // type:function size:0x6C scope:local +fn_1_2774 = .text:0x00002774; // type:function size:0x17C scope:local +fn_1_28F0 = .text:0x000028F0; // type:function size:0x34 scope:local +fn_1_2924 = .text:0x00002924; // type:function size:0x260 scope:local +fn_1_2B84 = .text:0x00002B84; // type:function size:0x48 scope:local +fn_1_2BCC = .text:0x00002BCC; // type:function size:0x90 scope:local +fn_1_2C5C = .text:0x00002C5C; // type:function size:0x738 scope:local +fn_1_3394 = .text:0x00003394; // type:function size:0x18 scope:local +fn_1_33AC = .text:0x000033AC; // type:function size:0x590 scope:local +fn_1_393C = .text:0x0000393C; // type:function size:0x6C scope:local fn_1_39A8 = .text:0x000039A8; // type:function size:0x170 fn_1_3B18 = .text:0x00003B18; // type:function size:0x74 -fn_1_3B8C = .text:0x00003B8C; // type:function size:0x22C -fn_1_3DB8 = .text:0x00003DB8; // type:function size:0xEC +fn_1_3B8C = .text:0x00003B8C; // type:function size:0x22C scope:local +fn_1_3DB8 = .text:0x00003DB8; // type:function size:0xEC scope:local fn_1_3EA4 = .text:0x00003EA4; // type:function size:0x19C fn_1_4040 = .text:0x00004040; // type:function size:0x40 fn_1_4080 = .text:0x00004080; // type:function size:0x18 fn_1_4098 = .text:0x00004098; // type:function size:0x18 fn_1_40B0 = .text:0x000040B0; // type:function size:0x54 fn_1_4104 = .text:0x00004104; // type:function size:0x40 -fn_1_4144 = .text:0x00004144; // type:function size:0x40 -fn_1_4184 = .text:0x00004184; // type:function size:0xC -fn_1_4190 = .text:0x00004190; // type:function size:0xC +fn_1_4144 = .text:0x00004144; // type:function size:0x40 scope:local +fn_1_4184 = .text:0x00004184; // type:function size:0xC scope:local +fn_1_4190 = .text:0x00004190; // type:function size:0xC scope:local fn_1_419C = .text:0x0000419C; // type:function size:0x20 -fn_1_41BC = .text:0x000041BC; // type:function size:0x24 -fn_1_41E0 = .text:0x000041E0; // type:function size:0x114 +fn_1_41BC = .text:0x000041BC; // type:function size:0x24 scope:local +fn_1_41E0 = .text:0x000041E0; // type:function size:0x114 scope:local fn_1_42F4 = .text:0x000042F4; // type:function size:0x240 fn_1_4534 = .text:0x00004534; // type:function size:0x8C fn_1_45C0 = .text:0x000045C0; // type:function size:0x44 fn_1_4604 = .text:0x00004604; // type:function size:0x1C -fn_1_4620 = .text:0x00004620; // type:function size:0x260 -fn_1_4880 = .text:0x00004880; // type:function size:0x184 -fn_1_4A04 = .text:0x00004A04; // type:function size:0x2E8 -fn_1_4CEC = .text:0x00004CEC; // type:function size:0x104 +fn_1_4620 = .text:0x00004620; // type:function size:0x260 scope:local +fn_1_4880 = .text:0x00004880; // type:function size:0x184 scope:local +fn_1_4A04 = .text:0x00004A04; // type:function size:0x2E8 scope:local +fn_1_4CEC = .text:0x00004CEC; // type:function size:0x104 scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte __fakeHalf = .rodata:0x00000000; // type:object size:0x4 data:float diff --git a/include/REL/present.h b/include/REL/present.h index a47db699..1560a75d 100644 --- a/include/REL/present.h +++ b/include/REL/present.h @@ -22,19 +22,31 @@ extern Process *lbl_1_bss_4; void fn_1_144(s16 arg0, s32 arg1, s32 arg2); void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2); +s32 fn_1_550(u16 arg0); +s32 fn_1_584(u16 arg0); +s32 fn_1_5B8(u16 arg0); omObjData *fn_1_6B4(); +void fn_1_8F0(omObjData *object); void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1); void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1); +s32 fn_1_B6C(omObjData *object); void fn_1_BF8(omObjData *object); omObjData *fn_1_1458(void); +void fn_1_1784(omObjData *object); void fn_1_180C(omObjData *object, s32 arg1); s32 fn_1_1850(omObjData *object); +void fn_1_186C(omObjData *object, s32 arg1); +void fn_1_3B18(omObjData *object); omObjData *fn_1_39A8(void); UnkWindowDataStruct *fn_1_3EA4(s32 arg0); +void fn_1_4040(UnkWindowDataStruct *arg0); void fn_1_4080(UnkWindowDataStruct *windowData); void fn_1_4098(UnkWindowDataStruct *windowData); void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess); +void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index); +void fn_1_419C(UnkWindowDataStruct *windowData); omObjData *fn_1_42F4(void); +void fn_1_4534(omObjData *object); void fn_1_45C0(omObjData *arg0, s32 arg1); s32 fn_1_4604(omObjData *object); diff --git a/src/REL/present/camera.c b/src/REL/present/camera.c index 4da4721b..0e15f36e 100644 --- a/src/REL/present/camera.c +++ b/src/REL/present/camera.c @@ -33,7 +33,7 @@ typedef struct UnkPresentCameraStruct { /* 0x98 */ float unk_98; } UnkPresentCameraStruct; /* size = 0x9C */ -void fn_1_C20(omObjData *object); +static void fn_1_C20(omObjData *object); omObjData *fn_1_6B4(void) { @@ -97,7 +97,7 @@ void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1) var_r31->unk_90 = 1.0f / arg1; } -void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) +static void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) { UnkPresentCameraStruct *var_r31 = object->data; @@ -112,7 +112,7 @@ void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) var_r31->unk_98 = 1.0f / arg1; } -float fn_1_AAC(omObjData *object) +static float fn_1_AAC(omObjData *object) { UnkPresentCameraStruct *var_r31 = object->data; @@ -120,7 +120,7 @@ float fn_1_AAC(omObjData *object) return var_f31; } -float fn_1_ADC(omObjData *object) +static float fn_1_ADC(omObjData *object) { UnkPresentCameraStruct *var_r31 = object->data; @@ -128,7 +128,7 @@ float fn_1_ADC(omObjData *object) return var_f31; } -void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) +static void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) { UnkPresentCameraStruct *var_r31 = object->data; @@ -137,7 +137,7 @@ void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) *arg3 = var_r31->pos.z; } -void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) +static void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) { UnkPresentCameraStruct *var_r31 = object->data; @@ -167,7 +167,7 @@ void fn_1_BF8(omObjData *object) fn_1_C20(object); } -void fn_1_C20(omObjData *object) +static void fn_1_C20(omObjData *object) { float var_f31; float var_f30; @@ -223,7 +223,7 @@ void fn_1_C20(omObjData *object) var_r31->target.y, var_r31->target.z); } -void fn_1_1198(omObjData *object) +static void fn_1_1198(omObjData *object) { if (HuPadBtn[0] & PAD_BUTTON_B) { UnkPresentCameraStruct *var_r31 = object->data; @@ -237,7 +237,7 @@ void fn_1_1198(omObjData *object) } } -void fn_1_1398(omObjData *object) +static void fn_1_1398(omObjData *object) { UnkPresentCameraStruct *var_r31 = object->data; print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", var_r31->target.x, var_r31->target.y, var_r31->target.z); diff --git a/src/REL/present/common.c b/src/REL/present/common.c index 4ffe63e6..a6a42ba1 100644 --- a/src/REL/present/common.c +++ b/src/REL/present/common.c @@ -28,15 +28,15 @@ typedef struct UnkPresentStruct5 { /* 0x54 */ s32 unk_54; } UnkPresentStruct5; /* size = 0x58 */ -void fn_1_4620(omObjData *object); -void fn_1_4880(omObjData *object); +static void fn_1_4620(omObjData *object); +static void fn_1_4880(omObjData *object); +static void fn_1_4A04(omObjData *object); +static float fn_1_4CEC(float arg8, float arg9, float argA); omObjFunc lbl_1_data_1A0[] = { NULL, fn_1_4620, fn_1_4880 }; static const s32 lbl_1_rodata_BD8[] = { 0x006E0089, 0x006E008A, 0x006E008B }; -void fn_1_4A04(omObjData *object); -float fn_1_4CEC(float arg8, float arg9, float argA); omObjData *fn_1_42F4(void) { @@ -105,7 +105,7 @@ s32 fn_1_4604(omObjData *object) return var_r31->unk_00; } -void fn_1_4620(omObjData *object) +static void fn_1_4620(omObjData *object) { float var_f31; UnkPresentStruct5 *var_r31 = object->data; @@ -150,7 +150,7 @@ void fn_1_4620(omObjData *object) fn_1_4A04(object); } -void fn_1_4880(omObjData *object) +static void fn_1_4880(omObjData *object) { float var_f31; @@ -181,7 +181,7 @@ void fn_1_4880(omObjData *object) (void)object; } -void fn_1_4A04(omObjData *object) +static void fn_1_4A04(omObjData *object) { UnkPresentStruct5 *var_r31 = object->data; s16 var_r29 = 0; @@ -214,7 +214,7 @@ void fn_1_4A04(omObjData *object) omSetRot(object, var_r31->unk_20, var_r31->unk_24, var_r31->unk_28); } -float fn_1_4CEC(float arg8, float arg9, float argA) +static float fn_1_4CEC(float arg8, float arg9, float argA) { float var_f30; diff --git a/src/REL/present/init.c b/src/REL/present/init.c index c572694e..17d98aa0 100644 --- a/src/REL/present/init.c +++ b/src/REL/present/init.c @@ -29,9 +29,9 @@ omObjData *lbl_1_bss_8; Process *lbl_1_bss_4; omObjData *lbl_1_bss_0; -void fn_1_254(void); -void fn_1_45C(void); -void fn_1_5EC(omObjData *object); +static void fn_1_254(void); +static void fn_1_45C(void); +static void fn_1_5EC(omObjData *object); void ObjectSetup(void) { @@ -64,7 +64,7 @@ void fn_1_144(s16 arg0, s32 arg1, s32 arg2) var_r30->user_data = var_r31; } -void fn_1_254(void) +static void fn_1_254(void) { UnkPresentStruct6 *var_r31 = HuPrcCurrentGet()->user_data; @@ -114,7 +114,7 @@ void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) var_r30->user_data = var_r31; } -void fn_1_45C(void) +static void fn_1_45C(void) { UnkPresentStruct6Weird *var_r31 = HuPrcCurrentGet()->user_data; @@ -141,25 +141,25 @@ void fn_1_45C(void) HuPrcEnd(); } -u32 fn_1_550(u16 arg0) +s32 fn_1_550(u16 arg0) { u32 var_r31 = HuPadBtnDown[0] & arg0; return var_r31 != 0; } -u32 fn_1_584(u16 arg0) +s32 fn_1_584(u16 arg0) { u32 var_r31 = HuPadDStkRep[0] & arg0; return var_r31 != 0; } -u32 fn_1_5B8(u16 arg0) +s32 fn_1_5B8(u16 arg0) { u32 var_r31 = HuPadDStk[0] & arg0; return var_r31 != 0; } -void fn_1_5EC(omObjData *object) +static void fn_1_5EC(omObjData *object) { switch (object->unk10) { case 0: diff --git a/src/REL/present/main.c b/src/REL/present/main.c index 2876b242..ae26fdd9 100644 --- a/src/REL/present/main.c +++ b/src/REL/present/main.c @@ -22,12 +22,11 @@ omObjData *lbl_1_bss_20; UnkPresentStruct4 lbl_1_data_F0 = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; -void fn_1_3B8C(omObjData *object); -void fn_1_3DB8(omObjData *object); -void fn_1_4040(UnkWindowDataStruct *arg0); -void fn_1_4190(UnkWindowDataStruct *arg0); -void fn_1_41E0(void); -void fn_1_41BC(UnkWindowDataStruct *arg0, s32 arg1); +static void fn_1_3B8C(omObjData *object); +static void fn_1_3DB8(omObjData *object); +static void fn_1_4190(UnkWindowDataStruct *arg0); +static void fn_1_41BC(UnkWindowDataStruct *arg0, s32 arg1); +static void fn_1_41E0(void); omObjData *fn_1_39A8(void) { @@ -68,7 +67,7 @@ void fn_1_3B18(omObjData *object) HuMemDirectFree(var_r31); } -void fn_1_3B8C(omObjData *object) +static void fn_1_3B8C(omObjData *object) { UnkPresentStruct *var_r30 = object->data; @@ -149,7 +148,7 @@ void fn_1_3B8C(omObjData *object) } } -void fn_1_3DB8(omObjData *arg0) +static void fn_1_3DB8(omObjData *arg0) { void *sp8 = arg0->data; @@ -245,17 +244,17 @@ void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index) HuWinInsertMesSet(windowData->window, mess, index); } -void fn_1_4144(UnkWindowDataStruct *windowData, float x, float y) +static void fn_1_4144(UnkWindowDataStruct *windowData, float x, float y) { HuWinPosSet(windowData->window, x, y); } -void fn_1_4184(UnkWindowDataStruct *windowData) +static void fn_1_4184(UnkWindowDataStruct *windowData) { windowData->unk0C = 1; } -void fn_1_4190(UnkWindowDataStruct *windowData) +static void fn_1_4190(UnkWindowDataStruct *windowData) { windowData->unk0C = 0; } @@ -268,7 +267,7 @@ void fn_1_419C(UnkWindowDataStruct *windowData) windowData->unk10 = 1; } -void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) +static void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) { if (!windowData->unk_20) { windowData->unk_20 = 4; @@ -277,7 +276,7 @@ void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) windowData->choice = arg1; } -void fn_1_41E0(void) +static void fn_1_41E0(void) { UnkWindowDataStruct *windowData = HuPrcCurrentGet()->user_data; diff --git a/src/REL/present/present.c b/src/REL/present/present.c index 7daf7f57..79d8ba9c 100644 --- a/src/REL/present/present.c +++ b/src/REL/present/present.c @@ -58,21 +58,20 @@ typedef struct UnkPresentStruct7 { /* 0x04 */ float unk_04; } UnkPresentStruct7; /* size = 0x08 */ -void fn_1_180C(omObjData *object, s32 arg1); -void fn_1_1928(omObjData *arg0); -void fn_1_1FA8(omObjData *object, s32 arg1); -void fn_1_20E8(omObjData *arg0); -void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3); -void fn_1_2708(omObjData *arg0, float arg8, s32 arg1); -void fn_1_2774(omObjData *arg0); -s32 fn_1_28F0(omObjData *object); -void fn_1_2924(omObjData *object); -s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2); -s32 fn_1_2BCC(omObjData *object, s32 arg1); -s32 fn_1_2C5C(omObjData *object, s32 arg1); -s32 fn_1_3394(s32 arg0); -void fn_1_33AC(omObjData *arg0); -s32 fn_1_393C(s32 arg0, s32 arg1); +static void fn_1_1928(omObjData *arg0); +static void fn_1_1FA8(omObjData *object, s32 arg1); +static void fn_1_20E8(omObjData *arg0); +static void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3); +static void fn_1_2708(omObjData *arg0, float arg8, s32 arg1); +static void fn_1_2774 (omObjData *arg0); +static s32 fn_1_28F0 (omObjData *object); +static void fn_1_2924(omObjData *object); +static s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2); +static s32 fn_1_2BCC(omObjData *object, s32 arg1); +static s32 fn_1_2C5C(omObjData *object, s32 arg1); +static s32 fn_1_3394(s32 arg0); +static void fn_1_33AC(omObjData *arg0); +static s32 fn_1_393C(s32 arg0, s32 arg1); UnkPresentStruct3 lbl_1_data_50 = { { 0.0f, 400.0f, 0.0f }, { 0.0f, -400.0f, -500.0f }, { 255, 255, 255, 255 } }; omObjFunc lbl_1_data_6C[] = { NULL, fn_1_1928, fn_1_20E8, fn_1_33AC }; @@ -314,7 +313,7 @@ void fn_1_186C(omObjData *object, s32 arg1) var_r31->unk_238 = 0; } -void fn_1_1928(omObjData *object) +static void fn_1_1928(omObjData *object) { Vec sp8; s32 var_r29; @@ -477,7 +476,7 @@ void fn_1_1928(omObjData *object) fn_1_2774(object); } -void fn_1_1FA8(omObjData *object, s32 arg1) +static void fn_1_1FA8(omObjData *object, s32 arg1) { float var_f31; float var_f30; @@ -524,7 +523,7 @@ void fn_1_1FA8(omObjData *object, s32 arg1) fn_1_2708(object, var_f29, var_r28); } -void fn_1_20E8(omObjData *object) +static void fn_1_20E8(omObjData *object) { float var_f31; float var_f30; @@ -655,7 +654,7 @@ void fn_1_20E8(omObjData *object) } } -void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3) +static void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3) { Mtx sp8; @@ -665,7 +664,7 @@ void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3) *arg3 = sp8[2][3]; } -void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) +static void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) { UnkPresentStruct2 *var_r31 = arg0->data; @@ -675,7 +674,7 @@ void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) var_r31->unk_250 = 1.0f / arg1; } -void fn_1_2774(omObjData *object) +static void fn_1_2774 (omObjData *object) { s32 var_r30; UnkPresentStruct2 *var_r31 = object->data; @@ -700,7 +699,7 @@ void fn_1_2774(omObjData *object) } } -s32 fn_1_28F0(omObjData *object) +static s32 fn_1_28F0 (omObjData *object) { UnkPresentStruct2 *var_r31 = object->data; return var_r31->unk_248 < 1.0f; @@ -708,7 +707,7 @@ s32 fn_1_28F0(omObjData *object) s32 lbl_1_data_84[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; -void fn_1_2924(omObjData *object) +static void fn_1_2924(omObjData *object) { UnkPresentStruct2 *var_r31 = object->data; s32 var_r30; @@ -753,13 +752,13 @@ void fn_1_2924(omObjData *object) static const s32 lbl_1_rodata_A74[] = { 0, 6, 12, 18, 24, 59, 30, 36, 42, 48 }; -s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2) +static s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2) { UnkPresentStruct2 *var_r31 = arg0->data; return var_r31->unk_270[arg2 + lbl_1_rodata_A74[arg1]] != 0; } -s32 fn_1_2BCC(omObjData *object, s32 arg1) +static s32 fn_1_2BCC(omObjData *object, s32 arg1) { s32 var_r31; s32 var_r30; @@ -774,7 +773,7 @@ s32 fn_1_2BCC(omObjData *object, s32 arg1) return var_r30; } -s32 fn_1_2C5C(omObjData *object, s32 arg1) +static s32 fn_1_2C5C(omObjData *object, s32 arg1) { UnkPresentStruct7 spA4[10]; Vec sp38; @@ -881,7 +880,7 @@ s32 fn_1_2C5C(omObjData *object, s32 arg1) static const s32 lbl_1_rodata_AC8[] = { 6, 6, 6, 6, 6, 1, 6, 6, 6, 11 }; -s32 fn_1_3394(s32 arg0) +static s32 fn_1_3394(s32 arg0) { return lbl_1_rodata_AC8[arg0]; } @@ -891,7 +890,7 @@ static const s32 lbl_1_rodata_B18[] = { 8, 20, 32, 44, 56, 0, 68, 80, 92, 0 }; static const s32 lbl_1_rodata_B40[] = { 126, 127, 128, 129, 130, 0, 131, 132, 133, 0 }; static const s32 lbl_1_rodata_B68[] = { 118, 119, 120, 121, 122, 0, 123, 124, 125, 0 }; -void fn_1_33AC(omObjData *object) +static void fn_1_33AC(omObjData *object) { f32 var_f31; f32 var_f29; @@ -949,7 +948,7 @@ void fn_1_33AC(omObjData *object) static const s32 lbl_1_rodata_BA4[][2] = { { 7, 1 } }; -s32 fn_1_393C(s32 arg0, s32 arg1) +static s32 fn_1_393C(s32 arg0, s32 arg1) { s32 var_r31; From 3a7cde9f33d1e497c67e3cf0143470078ddd0b12 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Sun, 4 Aug 2024 18:40:58 +0200 Subject: [PATCH 6/7] Named most things in presentDll --- config/GMPE01_00/rels/present/symbols.txt | 175 ++-- include/REL/present.h | 89 +- src/REL/present/camera.c | 313 +++--- src/REL/present/common.c | 264 +++-- src/REL/present/init.c | 178 ++-- src/REL/present/main.c | 257 ++--- src/REL/present/present.c | 1162 ++++++++++++--------- 7 files changed, 1306 insertions(+), 1132 deletions(-) diff --git a/config/GMPE01_00/rels/present/symbols.txt b/config/GMPE01_00/rels/present/symbols.txt index 08892e5b..a5b07fdb 100644 --- a/config/GMPE01_00/rels/present/symbols.txt +++ b/config/GMPE01_00/rels/present/symbols.txt @@ -1,75 +1,75 @@ _prolog = .text:0x00000000; // type:function size:0x54 scope:global _epilog = .text:0x00000054; // type:function size:0x4C scope:global ObjectSetup = .text:0x000000A0; // type:function size:0xA4 -fn_1_144 = .text:0x00000144; // type:function size:0x110 -fn_1_254 = .text:0x00000254; // type:function size:0xE0 scope:local -fn_1_334 = .text:0x00000334; // type:function size:0x128 -fn_1_45C = .text:0x0000045C; // type:function size:0xF4 scope:local -fn_1_550 = .text:0x00000550; // type:function size:0x34 -fn_1_584 = .text:0x00000584; // type:function size:0x34 -fn_1_5B8 = .text:0x000005B8; // type:function size:0x34 -fn_1_5EC = .text:0x000005EC; // type:function size:0xC8 scope:local -fn_1_6B4 = .text:0x000006B4; // type:function size:0x23C -fn_1_8F0 = .text:0x000008F0; // type:function size:0x30 -fn_1_920 = .text:0x00000920; // type:function size:0x84 -fn_1_9A4 = .text:0x000009A4; // type:function size:0x84 -fn_1_A28 = .text:0x00000A28; // type:function size:0x84 scope:local -fn_1_AAC = .text:0x00000AAC; // type:function size:0x30 scope:local -fn_1_ADC = .text:0x00000ADC; // type:function size:0x30 scope:local -fn_1_B0C = .text:0x00000B0C; // type:function size:0x30 scope:local -fn_1_B3C = .text:0x00000B3C; // type:function size:0x30 scope:local -fn_1_B6C = .text:0x00000B6C; // type:function size:0x8C -fn_1_BF8 = .text:0x00000BF8; // type:function size:0x28 -fn_1_C20 = .text:0x00000C20; // type:function size:0x578 scope:local -fn_1_1198 = .text:0x00001198; // type:function size:0x200 scope:local -fn_1_1398 = .text:0x00001398; // type:function size:0xC0 scope:local -fn_1_1458 = .text:0x00001458; // type:function size:0x32C -fn_1_1784 = .text:0x00001784; // type:function size:0x88 -fn_1_180C = .text:0x0000180C; // type:function size:0x44 -fn_1_1850 = .text:0x00001850; // type:function size:0x1C -fn_1_186C = .text:0x0000186C; // type:function size:0xBC -fn_1_1928 = .text:0x00001928; // type:function size:0x680 scope:local -fn_1_1FA8 = .text:0x00001FA8; // type:function size:0x140 scope:local -fn_1_20E8 = .text:0x000020E8; // type:function size:0x5A4 scope:local -fn_1_268C = .text:0x0000268C; // type:function size:0x7C scope:local -fn_1_2708 = .text:0x00002708; // type:function size:0x6C scope:local -fn_1_2774 = .text:0x00002774; // type:function size:0x17C scope:local -fn_1_28F0 = .text:0x000028F0; // type:function size:0x34 scope:local -fn_1_2924 = .text:0x00002924; // type:function size:0x260 scope:local -fn_1_2B84 = .text:0x00002B84; // type:function size:0x48 scope:local -fn_1_2BCC = .text:0x00002BCC; // type:function size:0x90 scope:local -fn_1_2C5C = .text:0x00002C5C; // type:function size:0x738 scope:local -fn_1_3394 = .text:0x00003394; // type:function size:0x18 scope:local -fn_1_33AC = .text:0x000033AC; // type:function size:0x590 scope:local +PresentFadeSprite = .text:0x00000144; // type:function size:0x110 +FadeSprite = .text:0x00000254; // type:function size:0xE0 scope:local +FadeSpriteWithMultiplier = .text:0x00000334; // type:function size:0x128 +FadeModel = .text:0x0000045C; // type:function size:0xF4 scope:local +PresentPadCheck = .text:0x00000550; // type:function size:0x34 +PresentPadDStkRepCheck = .text:0x00000584; // type:function size:0x34 +PresentPadDStkCheck = .text:0x000005B8; // type:function size:0x34 +SceneMain = .text:0x000005EC; // type:function size:0xC8 scope:local +PresentCameraCreate = .text:0x000006B4; // type:function size:0x23C +PresentCameraKill = .text:0x000008F0; // type:function size:0x30 +PresentCameraTargetSet = .text:0x00000920; // type:function size:0x84 +PresentCameraFocusSet = .text:0x000009A4; // type:function size:0x84 +PresentCameraViewSet = .text:0x00000A28; // type:function size:0x84 +PresentCameraZoomGet = .text:0x00000AAC; // type:function size:0x30 +PresentCameraRotGet = .text:0x00000ADC; // type:function size:0x30 +PresentCameraPosGet = .text:0x00000B0C; // type:function size:0x30 +PresentCameraTargetGet = .text:0x00000B3C; // type:function size:0x30 +PresentCameraDoneCheck = .text:0x00000B6C; // type:function size:0x8C +ExecCameraObj = .text:0x00000BF8; // type:function size:0x28 scope:local +ExecCamera = .text:0x00000C20; // type:function size:0x578 scope:local +CameraExecDebug = .text:0x00001198; // type:function size:0x200 scope:local +CameraPrintDebug = .text:0x00001398; // type:function size:0xC0 scope:local +PresentCreate = .text:0x00001458; // type:function size:0x32C +PresentKill = .text:0x00001784; // type:function size:0x88 +PresentExecModeSet = .text:0x0000180C; // type:function size:0x44 +PresentExecModeGet = .text:0x00001850; // type:function size:0x1C +PresentSelectedIDSet = .text:0x0000186C; // type:function size:0xBC +ExecSelectRoom = .text:0x00001928; // type:function size:0x680 scope:local +ChangeRoom = .text:0x00001FA8; // type:function size:0x140 scope:local +ExecSelectPresent = .text:0x000020E8; // type:function size:0x5A4 scope:local +GetCursorPos = .text:0x0000268C; // type:function size:0x7C scope:local +SetCameraRot = .text:0x00002708; // type:function size:0x6C scope:local +RotateCamera = .text:0x00002774; // type:function size:0x17C scope:local +CameraRotationDoneCheck = .text:0x000028F0; // type:function size:0x34 scope:local +ShowHidePresents = .text:0x00002924; // type:function size:0x260 scope:local +PresentUnlocked = .text:0x00002B84; // type:function size:0x48 scope:local +UnlockedPresents = .text:0x00002BCC; // type:function size:0x90 scope:local +MoveCursor = .text:0x00002C5C; // type:function size:0x738 scope:local +TotalPresentsInRoom = .text:0x00003394; // type:function size:0x18 scope:local +ExecPresentGet = .text:0x000033AC; // type:function size:0x590 scope:local fn_1_393C = .text:0x0000393C; // type:function size:0x6C scope:local -fn_1_39A8 = .text:0x000039A8; // type:function size:0x170 -fn_1_3B18 = .text:0x00003B18; // type:function size:0x74 -fn_1_3B8C = .text:0x00003B8C; // type:function size:0x22C scope:local -fn_1_3DB8 = .text:0x00003DB8; // type:function size:0xEC scope:local -fn_1_3EA4 = .text:0x00003EA4; // type:function size:0x19C -fn_1_4040 = .text:0x00004040; // type:function size:0x40 -fn_1_4080 = .text:0x00004080; // type:function size:0x18 -fn_1_4098 = .text:0x00004098; // type:function size:0x18 -fn_1_40B0 = .text:0x000040B0; // type:function size:0x54 -fn_1_4104 = .text:0x00004104; // type:function size:0x40 -fn_1_4144 = .text:0x00004144; // type:function size:0x40 scope:local -fn_1_4184 = .text:0x00004184; // type:function size:0xC scope:local -fn_1_4190 = .text:0x00004190; // type:function size:0xC scope:local -fn_1_419C = .text:0x0000419C; // type:function size:0x20 -fn_1_41BC = .text:0x000041BC; // type:function size:0x24 scope:local -fn_1_41E0 = .text:0x000041E0; // type:function size:0x114 scope:local -fn_1_42F4 = .text:0x000042F4; // type:function size:0x240 -fn_1_4534 = .text:0x00004534; // type:function size:0x8C -fn_1_45C0 = .text:0x000045C0; // type:function size:0x44 -fn_1_4604 = .text:0x00004604; // type:function size:0x1C -fn_1_4620 = .text:0x00004620; // type:function size:0x260 scope:local -fn_1_4880 = .text:0x00004880; // type:function size:0x184 scope:local -fn_1_4A04 = .text:0x00004A04; // type:function size:0x2E8 scope:local -fn_1_4CEC = .text:0x00004CEC; // type:function size:0x104 scope:local +PresentStateCreate = .text:0x000039A8; // type:function size:0x170 +PresentStateKill = .text:0x00003B18; // type:function size:0x74 +ExecPresentView = .text:0x00003B8C; // type:function size:0x22C scope:local +ExecPresentGet = .text:0x00003DB8; // type:function size:0xEC scope:local +PresentWinCreate = .text:0x00003EA4; // type:function size:0x19C +PresentWinKill = .text:0x00004040; // type:function size:0x40 +PresentWinAnimIn = .text:0x00004080; // type:function size:0x18 +PresentWinAnimOut = .text:0x00004098; // type:function size:0x18 +PresentWinMesSet = .text:0x000040B0; // type:function size:0x54 +PresentWinInsertMesSet = .text:0x00004104; // type:function size:0x40 +PresentWinPosSet = .text:0x00004144; // type:function size:0x40 +PresentWinDispOn = .text:0x00004184; // type:function size:0xC +PresentWinDispOff = .text:0x00004190; // type:function size:0xC +PresentWinMesWait = .text:0x0000419C; // type:function size:0x20 +PresentWinChoiceSet = .text:0x000041BC; // type:function size:0x24 +ExecWindow = .text:0x000041E0; // type:function size:0x114 scope:local +PresentGuideCreate = .text:0x000042F4; // type:function size:0x240 +PresentGuideKill = .text:0x00004534; // type:function size:0x8C +PresentGuideExecModeSet = .text:0x000045C0; // type:function size:0x44 +PresentGuideExecModeGet = .text:0x00004604; // type:function size:0x1C +ExecGuideEnter = .text:0x00004620; // type:function size:0x260 scope:local +ExecGuideLeave = .text:0x00004880; // type:function size:0x184 scope:local +UpdateGuide = .text:0x00004A04; // type:function size:0x2E8 scope:local +LerpAngle = .text:0x00004CEC; // type:function size:0x104 scope:local _ctors = .ctors:0x00000000; // type:label scope:global data:4byte _dtors = .dtors:0x00000000; // type:label scope:global data:4byte -__fakeHalf = .rodata:0x00000000; // type:object size:0x4 data:float -__fakeThree = .rodata:0x00000004; // type:object size:0x4 data:float +__fakeHalf = .rodata:0x00000000; // type:object size:0x8 data:double +__fakeThree = .rodata:0x00000008; // type:object size:0x8 data:double 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:0x8 scope:local data:float @@ -95,14 +95,14 @@ lbl_1_rodata_88 = .rodata:0x00000088; // type:object size:0x4 scope:local data:f lbl_1_rodata_8C = .rodata:0x0000008C; // 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_A0 = .rodata:0x000000A0; // type:object size:0x218 scope:local -lbl_1_rodata_2B8 = .rodata:0x000002B8; // type:object size:0x708 scope:local +presentMdlTbl = .rodata:0x000000A0; // type:object size:0x218 scope:local +roomTbl = .rodata:0x000002B8; // type:object size:0x708 scope:local lbl_1_rodata_9C0 = .rodata:0x000009C0; // type:object size:0x4 scope:local data:float lbl_1_rodata_9C4 = .rodata:0x000009C4; // type:object size:0x4 scope:local data:float lbl_1_rodata_9C8 = .rodata:0x000009C8; // type:object size:0x4 scope:local data:float lbl_1_rodata_9D0 = .rodata:0x000009D0; // type:object size:0x8 scope:local data:float -lbl_1_rodata_9D8 = .rodata:0x000009D8; // type:object size:0x20 scope:local -lbl_1_rodata_9F8 = .rodata:0x000009F8; // type:object size:0x28 scope:local +roomIdxTbl = .rodata:0x000009D8; // type:object size:0x20 scope:local +roomMessTbl = .rodata:0x000009F8; // type:object size:0x28 scope:local lbl_1_rodata_A20 = .rodata:0x00000A20; // type:object size:0x4 scope:local data:float lbl_1_rodata_A24 = .rodata:0x00000A24; // type:object size:0x4 scope:local data:float lbl_1_rodata_A28 = .rodata:0x00000A28; // type:object size:0x4 scope:local data:float @@ -119,7 +119,7 @@ lbl_1_rodata_A58 = .rodata:0x00000A58; // type:object size:0x4 scope:local data: lbl_1_rodata_A60 = .rodata:0x00000A60; // type:object size:0x8 scope:local data:double lbl_1_rodata_A68 = .rodata:0x00000A68; // type:object size:0x8 scope:local data:double lbl_1_rodata_A70 = .rodata:0x00000A70; // type:object size:0x4 scope:local data:float -lbl_1_rodata_A74 = .rodata:0x00000A74; // type:object size:0x28 scope:local +roomPresentOffsetTbl = .rodata:0x00000A74; // type:object size:0x28 scope:local lbl_1_rodata_A9C = .rodata:0x00000A9C; // type:object size:0x4 scope:local data:float lbl_1_rodata_AA0 = .rodata:0x00000AA0; // type:object size:0x4 scope:local data:float lbl_1_rodata_AA4 = .rodata:0x00000AA4; // type:object size:0x4 scope:local data:float @@ -128,11 +128,11 @@ lbl_1_rodata_AAC = .rodata:0x00000AAC; // type:object size:0x4 scope:local data: lbl_1_rodata_AB0 = .rodata:0x00000AB0; // type:object size:0x4 scope:local data:float lbl_1_rodata_AB8 = .rodata:0x00000AB8; // type:object size:0x8 scope:local data:double lbl_1_rodata_AC0 = .rodata:0x00000AC0; // type:object size:0x8 scope:local data:double -lbl_1_rodata_AC8 = .rodata:0x00000AC8; // type:object size:0x28 scope:local -lbl_1_rodata_AF0 = .rodata:0x00000AF0; // type:object size:0x28 scope:local +totalPresentCntTbl = .rodata:0x00000AC8; // type:object size:0x28 scope:local +presentItemIdxTbl = .rodata:0x00000AF0; // type:object size:0x28 scope:local lbl_1_rodata_B18 = .rodata:0x00000B18; // type:object size:0x28 scope:local -lbl_1_rodata_B40 = .rodata:0x00000B40; // type:object size:0x28 scope:local -lbl_1_rodata_B68 = .rodata:0x00000B68; // type:object size:0x28 scope:local +constellationIdxTbl = .rodata:0x00000B40; // type:object size:0x28 scope:local +roofIdxTbl = .rodata:0x00000B68; // type:object size:0x28 scope:local lbl_1_rodata_B90 = .rodata:0x00000B90; // type:object size:0x4 scope:local data:float lbl_1_rodata_B94 = .rodata:0x00000B94; // type:object size:0x4 scope:local data:float lbl_1_rodata_B98 = .rodata:0x00000B98; // type:object size:0x4 scope:local data:float @@ -148,7 +148,7 @@ lbl_1_rodata_BC4 = .rodata:0x00000BC4; // type:object size:0x4 scope:local data: lbl_1_rodata_BC8 = .rodata:0x00000BC8; // type:object size:0x4 scope:local data:float lbl_1_rodata_BCC = .rodata:0x00000BCC; // type:object size:0x4 scope:local data:float lbl_1_rodata_BD0 = .rodata:0x00000BD0; // type:object size:0x4 scope:local data:float -lbl_1_rodata_BD8 = .rodata:0x00000BD8; // type:object size:0xC scope:local +guideMotTbl = .rodata:0x00000BD8; // type:object size:0xC scope:local lbl_1_rodata_BE4 = .rodata:0x00000BE4; // type:object size:0x4 scope:local data:float lbl_1_rodata_BE8 = .rodata:0x00000BE8; // type:object size:0x4 scope:local data:float lbl_1_rodata_BEC = .rodata:0x00000BEC; // type:object size:0x4 scope:local data:float @@ -172,21 +172,22 @@ lbl_1_rodata_C4C = .rodata:0x00000C4C; // type:object size:0x4 scope:local data: lbl_1_data_0 = .data:0x00000000; // type:object size:0x1B scope:local data:string lbl_1_data_1B = .data:0x0000001B; // type:object size:0x1B scope:local data:string lbl_1_data_36 = .data:0x00000036; // type:object size:0x1A scope:local data:string -lbl_1_data_50 = .data:0x00000050; // type:object size:0x1C data:4byte -lbl_1_data_6C = .data:0x0000006C; // type:object size:0x10 data:4byte +lightTbl = .data:0x00000050; // type:object size:0x1C scope:local data:4byte +execModeTbl = .data:0x0000006C; // type:object size:0x10 scope:local data:4byte lbl_1_data_7C = .data:0x0000007C; // type:object size:0x8 scope:local data:string -lbl_1_data_84 = .data:0x00000084; // type:object size:0x20 +roomIdxTbl2 = .data:0x00000084; // type:object size:0x20 jumptable_1_data_A4 = .data:0x000000A4; // type:object size:0x2C scope:local jumptable_1_data_D0 = .data:0x000000D0; // type:object size:0x1C scope:local -lbl_1_data_F0 = .data:0x000000F0; // type:object size:0x24 data:float +shadowPosTbl = .data:0x000000F0; // type:object size:0x24 scope:local data:float lbl_1_data_114 = .data:0x00000114; // type:object size:0x2A scope:local data:string lbl_1_data_13E = .data:0x0000013E; // type:object size:0x2E scope:local data:string jumptable_1_data_16C = .data:0x0000016C; // type:object size:0x34 scope:local -lbl_1_data_1A0 = .data:0x000001A0; // type:object size:0xC data:4byte -lbl_1_bss_14 = .bss:0x00000000; // type:object size:0x4 data:4byte -lbl_1_bss_4 = .bss:0x00000004; // type:object size:0x4 data:4byte -lbl_1_bss_8 = .bss:0x00000008; // type:object size:0x4 data:4byte +execModeTbl = .data:0x000001A0; // type:object size:0xC scope:local data:4byte +scene = .bss:0x00000000; // type:object size:0x4 scope:local data:4byte +presentObjMan = .bss:0x00000004; // type:object size:0x4 data:4byte +presentCamera = .bss:0x00000008; // type:object size:0x4 data:4byte lbl_1_bss_C = .bss:0x0000000C; // type:object size:0x4 data:4byte -lbl_1_bss_10 = .bss:0x00000010; // type:object size:0x4 data:4byte -lbl_1_bss_18 = .bss:0x00000018; // type:object size:0x4 data:4byte -lbl_1_bss_20 = .bss:0x00000020; // type:object size:0x4 data:4byte +present = .bss:0x00000010; // type:object size:0x4 data:4byte +lbl_1_bss_14 = .bss:0x00000014; // type:object size:0x4 data:4byte +presentState = .bss:0x00000018; // type:object size:0x4 data:4byte +presentGuide = .bss:0x00000020; // type:object size:0x4 data:4byte diff --git a/include/REL/present.h b/include/REL/present.h index 1560a75d..8b7eb6d6 100644 --- a/include/REL/present.h +++ b/include/REL/present.h @@ -3,51 +3,58 @@ #include "game/object.h" -typedef struct UnkWindowDataStruct { +typedef struct PresentWindow { /* 0x00 */ Process *process; /* 0x04 */ s16 window; - /* 0x06 */ char unk06[2]; - /* 0x08 */ s32 unk08; - /* 0x0C */ s32 unk0C; - /* 0x10 */ s32 unk10; - /* 0x14 */ s32 unk14; - /* 0x18 */ u32 unk18; + /* 0x08 */ s32 id; + /* 0x0C */ BOOL visible; + /* 0x10 */ s32 messWaitSignal; + /* 0x14 */ s32 choiceSignal; + /* 0x18 */ u32 messToBeSet; /* 0x1C */ s32 choice; - /* 0x20 */ s32 unk_20; -} UnkWindowDataStruct; /* size 0x24 */ // this already exists in option.h + /* 0x20 */ s32 state; +} PresentWindow; /* size 0x24 */ // this already exists in option.h -extern omObjData *lbl_1_bss_10; -extern omObjData *lbl_1_bss_8; -extern Process *lbl_1_bss_4; +#define PRESENT_GUIDE_MODE_NONE 0 +#define PRESENT_GUIDE_MODE_ENTER 1 +#define PRESENT_GUIDE_MODE_LEAVE 2 -void fn_1_144(s16 arg0, s32 arg1, s32 arg2); -void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2); -s32 fn_1_550(u16 arg0); -s32 fn_1_584(u16 arg0); -s32 fn_1_5B8(u16 arg0); -omObjData *fn_1_6B4(); -void fn_1_8F0(omObjData *object); -void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1); -void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1); -s32 fn_1_B6C(omObjData *object); -void fn_1_BF8(omObjData *object); -omObjData *fn_1_1458(void); -void fn_1_1784(omObjData *object); -void fn_1_180C(omObjData *object, s32 arg1); -s32 fn_1_1850(omObjData *object); -void fn_1_186C(omObjData *object, s32 arg1); -void fn_1_3B18(omObjData *object); -omObjData *fn_1_39A8(void); -UnkWindowDataStruct *fn_1_3EA4(s32 arg0); -void fn_1_4040(UnkWindowDataStruct *arg0); -void fn_1_4080(UnkWindowDataStruct *windowData); -void fn_1_4098(UnkWindowDataStruct *windowData); -void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess); -void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index); -void fn_1_419C(UnkWindowDataStruct *windowData); -omObjData *fn_1_42F4(void); -void fn_1_4534(omObjData *object); -void fn_1_45C0(omObjData *arg0, s32 arg1); -s32 fn_1_4604(omObjData *object); +#define PRESENT_MODE_NONE 0 +#define PRESENT_MODE_SELECT_ROOM 1 +#define PRESENT_MODE_SELECT_PRESENT 2 +#define PRESENT_MODE_GET 3 + +extern omObjData *present; +extern omObjData *presentCamera; +extern Process *presentObjMan; + +void PresentFadeSprite(s16 sprite, BOOL inF, s32 duration); +void FadeSpriteWithMultiplier(s16 model, BOOL inF, float tpMultiplier, s32 duration); +BOOL PresentPadCheck(u16 btn); +BOOL PresentPadDStkRepCheck(u16 dir); +BOOL PresentPadDStkCheck(u16 dir); +omObjData *PresentCameraCreate(); +void PresentCameraKill(omObjData *object); +void PresentCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration); +void PresentCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration); +s32 PresentCameraDoneCheck(omObjData *object); +omObjData *PresentCreate(void); +void PresentKill(omObjData *object); +void PresentExecModeSet(omObjData *object, s32 execMode); +s32 PresentExecModeGet(omObjData *object); +void PresentSelectedIDSet(omObjData *object, s32 id); +void PresentStateKill(omObjData *object); +omObjData *PresentStateCreate(void); +PresentWindow *PresentWinCreate(s32 id); +void PresentWinKill(PresentWindow *work); +void PresentWinAnimIn(PresentWindow *work); +void PresentWinAnimOut(PresentWindow *work); +void PresentWinMesSet(PresentWindow *work, u32 mess); +void PresentWinInsertMesSet(PresentWindow *work, u32 mess, s16 index); +void PresentWinMesWait(PresentWindow *work); +omObjData *PresentGuideCreate(void); +void PresentGuideKill(omObjData *object); +void PresentGuideExecModeSet(omObjData *object, s32 execMode); +s32 PresentGuideExecModeGet(omObjData *object); #endif diff --git a/src/REL/present/camera.c b/src/REL/present/camera.c index 0e15f36e..3a15ac79 100644 --- a/src/REL/present/camera.c +++ b/src/REL/present/camera.c @@ -5,242 +5,235 @@ #include "REL/present.h" -typedef struct UnkPresentCameraStruct { +typedef struct CameraWork { /* 0x00 */ Vec pos; /* 0x0C */ Vec target; /* 0x18 */ Vec up; - /* 0x24 */ float unk_24; - /* 0x28 */ float unk_28; - /* 0x2C */ Vec unk_2C; - /* 0x38 */ Vec unk_38; - /* 0x44 */ float unk44; - /* 0x48 */ float unk48; - /* 0x4C */ float unk4C; - /* 0x50 */ float unk_50; - /* 0x54 */ float unk_54; - /* 0x58 */ Vec unk_58; - /* 0x64 */ Vec unk_64; - /* 0x70 */ float unk70; - /* 0x74 */ float unk74; - /* 0x78 */ float unk78; - /* 0x7C */ float unk_7C; - /* 0x80 */ float unk_80; - /* 0x84 */ float unk_84; - /* 0x88 */ float unk_88; - /* 0x8C */ float unk_8C; - /* 0x90 */ float unk_90; - /* 0x94 */ float unk_94; - /* 0x98 */ float unk_98; -} UnkPresentCameraStruct; /* size = 0x9C */ - -static void fn_1_C20(omObjData *object); - -omObjData *fn_1_6B4(void) + /* 0x24 */ float zoom; + /* 0x28 */ float rot; + /* 0x2C */ Vec posPrev; + /* 0x38 */ Vec targetPrev; + /* 0x44 */ char unk44[0xC]; + /* 0x50 */ float zoomPrev; + /* 0x54 */ float rotPrev; + /* 0x58 */ Vec posTarget; + /* 0x64 */ Vec posFocus; + /* 0x70 */ char unk70[0xC]; + /* 0x7C */ float zoomTarget; + /* 0x80 */ float rotTarget; + /* 0x84 */ float timeEye; + /* 0x88 */ float eyeSpeed; + /* 0x8C */ float timeTarget; + /* 0x90 */ float targetSpeed; + /* 0x94 */ float timeRot; + /* 0x98 */ float rotSpeed; +} CameraWork; /* size = 0x9C */ // same as in option/camera.c + +static void ExecCameraObj(omObjData *object); +static void ExecCamera(omObjData *object); + +omObjData *PresentCameraCreate(void) { - omObjData *var_r30 = omAddObjEx(lbl_1_bss_4, 1001, 0, 0, 3, fn_1_BF8); - UnkPresentCameraStruct *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM); - var_r30->data = var_r31; - - var_r31->pos.x = 0.0f; - var_r31->pos.y = 0.0f; - var_r31->pos.z = 0.0f; - - var_r31->target.x = 0.0f; - var_r31->target.y = 0.0f; - var_r31->target.z = 0.0f; - - var_r31->up.x = 0.0f; - var_r31->up.y = 1.0f; - var_r31->up.z = 0.0f; - - var_r31->unk_24 = 0.0f; - var_r31->unk_28 = 0.0f; - var_r31->unk_8C = 1.0f; - var_r31->unk_84 = 1.0f; - var_r31->unk_94 = 1.0f; + omObjData *object = omAddObjEx(presentObjMan, 1001, 0, 0, 3, ExecCameraObj); + CameraWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, 156, MEMORY_DEFAULT_NUM); + object->data = work; + + work->pos.x = 0.0f; + work->pos.y = 0.0f; + work->pos.z = 0.0f; + + work->target.x = 0.0f; + work->target.y = 0.0f; + work->target.z = 0.0f; + + work->up.x = 0.0f; + work->up.y = 1.0f; + work->up.z = 0.0f; + + work->zoom = 0.0f; + work->rot = 0.0f; + work->timeTarget = 1.0f; + work->timeEye = 1.0f; + work->timeRot = 1.0f; Hu3DCameraViewportSet(1, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f); Hu3DCameraPerspectiveSet(1, 42.0f, 10.0f, 8000.0f, 1.2f); - fn_1_9A4(var_r30, 0.0f, 0.0f, -600.0f, 1); - fn_1_920(var_r30, 0.0f, 220.0f, 250.0f, 1); + PresentCameraFocusSet(object, 0.0f, 0.0f, -600.0f, 1); + PresentCameraTargetSet(object, 0.0f, 220.0f, 250.0f, 1); - return var_r30; + return object; } -void fn_1_8F0(omObjData *object) +void PresentCameraKill(omObjData *object) { HuMemDirectFree(object->data); } -void fn_1_920(omObjData *object, float arg8, float arg9, float argA, s32 arg1) +void PresentCameraTargetSet(omObjData *object, float x, float y, float z, s32 duration) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; - var_r31->unk_58.x = arg8; - var_r31->unk_58.y = arg9; - var_r31->unk_58.z = argA; + work->posTarget.x = x; + work->posTarget.y = y; + work->posTarget.z = z; - var_r31->unk_2C = var_r31->pos; - var_r31->unk_84 = 0.0f; - var_r31->unk_88 = 1.0f / arg1; + work->posPrev = work->pos; + work->timeEye = 0.0f; + work->eyeSpeed = 1.0f / duration; } -void fn_1_9A4(omObjData *object, float arg8, float arg9, float argA, s32 arg1) +void PresentCameraFocusSet(omObjData *object, float x, float y, float z, s32 duration) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; - var_r31->unk_64.x = arg8; - var_r31->unk_64.y = arg9; - var_r31->unk_64.z = argA; + work->posFocus.x = x; + work->posFocus.y = y; + work->posFocus.z = z; - var_r31->unk_38 = var_r31->target; - var_r31->unk_8C = 0.0f; - var_r31->unk_90 = 1.0f / arg1; + work->targetPrev = work->target; + work->timeTarget = 0.0f; + work->targetSpeed = 1.0f / duration; } -static void fn_1_A28(omObjData *object, s32 arg1, float arg8, float arg9, float argA) +void PresentCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 duration) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; - var_r31->unk_64.y = argA; - var_r31->unk_7C = arg8; - var_r31->unk_80 = arg9; + work->posFocus.y = y; + work->zoomTarget = zoom; + work->rotTarget = rot; - var_r31->unk_38.y = var_r31->target.y; - var_r31->unk_50 = var_r31->unk_24; - var_r31->unk_54 = var_r31->unk_28; - var_r31->unk_94 = 0.0f; - var_r31->unk_98 = 1.0f / arg1; + work->targetPrev.y = work->target.y; + work->zoomPrev = work->zoom; + work->rotPrev = work->rot; + work->timeRot = 0.0f; + work->rotSpeed = 1.0f / duration; } -static float fn_1_AAC(omObjData *object) +float PresentCameraZoomGet(omObjData *object) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; - float var_f31 = var_r31->unk_24; + float var_f31 = work->zoom; return var_f31; } -static float fn_1_ADC(omObjData *object) +float PresentCameraRotGet(omObjData *object) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; - float var_f31 = var_r31->unk_28; + float var_f31 = work->rot; return var_f31; } -static void fn_1_B0C(omObjData *object, float *arg1, float *arg2, float *arg3) +void PresentCameraPosGet(omObjData *object, float *x, float *y, float *z) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; - *arg1 = var_r31->pos.x; - *arg2 = var_r31->pos.y; - *arg3 = var_r31->pos.z; + *x = work->pos.x; + *y = work->pos.y; + *z = work->pos.z; } -static void fn_1_B3C(omObjData *object, float *arg1, float *arg2, float *arg3) +void PresentCameraTargetGet(omObjData *object, float *x, float *y, float *z) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; - *arg1 = var_r31->target.x; - *arg2 = var_r31->target.y; - *arg3 = var_r31->target.z; + *x = work->target.x; + *y = work->target.y; + *z = work->target.z; } -s32 fn_1_B6C(omObjData *object) +s32 PresentCameraDoneCheck(omObjData *object) { - UnkPresentCameraStruct *var_r31 = object->data; + CameraWork *work = object->data; s32 var_r30 = 1; s32 var_r29 = 1; - if (!(var_r31->unk_8C < 1.0f) && !(var_r31->unk_94 < 1.0f)) { + if (!(work->timeTarget < 1.0f) && !(work->timeRot < 1.0f)) { var_r29 = 0; } - if (!var_r29 && !(var_r31->unk_84 < 1.0f)) { + if (!var_r29 && !(work->timeEye < 1.0f)) { var_r30 = 0; } return var_r30; } -void fn_1_BF8(omObjData *object) +static void ExecCameraObj(omObjData *object) { - fn_1_C20(object); + ExecCamera(object); } -static void fn_1_C20(omObjData *object) +static void ExecCamera(omObjData *object) { - float var_f31; - float var_f30; - float var_f29; - float var_f28; - float var_f27; - - UnkPresentCameraStruct *var_r31 = object->data; - - if (var_r31->unk_84 < 1.0f) { - var_f28 = sind(90.0f * var_r31->unk_84); - var_r31->pos.x = var_r31->unk_2C.x + var_f28 * (var_r31->unk_58.x - var_r31->unk_2C.x); - var_r31->pos.y = var_r31->unk_2C.y + var_f28 * (var_r31->unk_58.y - var_r31->unk_2C.y); - var_r31->pos.z = var_r31->unk_2C.z + var_f28 * (var_r31->unk_58.z - var_r31->unk_2C.z); - - if ((var_r31->unk_84 += var_r31->unk_88) >= 1.0f) { - var_r31->pos = var_r31->unk_58; + CameraWork *work = object->data; + float weight; + float dx; + float dz; + + if (work->timeEye < 1.0f) { + weight = sind(90.0f * work->timeEye); + work->pos.x = work->posPrev.x + weight * (work->posTarget.x - work->posPrev.x); + work->pos.y = work->posPrev.y + weight * (work->posTarget.y - work->posPrev.y); + work->pos.z = work->posPrev.z + weight * (work->posTarget.z - work->posPrev.z); + + if ((work->timeEye += work->eyeSpeed) >= 1.0f) { + work->pos = work->posTarget; } } - if (var_r31->unk_8C < 1.0f) { - var_f28 = sind(90.0f * var_r31->unk_8C); - var_r31->target.x = var_r31->unk_38.x + var_f28 * (var_r31->unk_64.x - var_r31->unk_38.x); - var_r31->target.y = var_r31->unk_38.y + var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y); - var_r31->target.z = var_r31->unk_38.z + var_f28 * (var_r31->unk_64.z - var_r31->unk_38.z); - - if ((var_r31->unk_8C += var_r31->unk_90) >= 1.0f) { - var_r31->target = var_r31->unk_64; + if (work->timeTarget < 1.0f) { + weight = sind(90.0f * work->timeTarget); + work->target.x = work->targetPrev.x + weight * (work->posFocus.x - work->targetPrev.x); + work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y); + work->target.z = work->targetPrev.z + weight * (work->posFocus.z - work->targetPrev.z); + + if ((work->timeTarget += work->targetSpeed) >= 1.0f) { + work->target = work->posFocus; } } - if (var_r31->unk_94 < 1.0f) { - var_f28 = sind(90.0f * var_r31->unk_94); - var_r31->target.y = var_r31->unk_38.y + (var_f28 * (var_r31->unk_64.y - var_r31->unk_38.y)); - var_r31->unk_24 = var_r31->unk_50 + (var_f28 * (var_r31->unk_7C - var_r31->unk_50)); - var_r31->unk_28 = var_r31->unk_54 + (var_f28 * (var_r31->unk_80 - var_r31->unk_54)); - - if ((var_r31->unk_94 += var_r31->unk_98) >= 1.0f) { - var_r31->target.y = var_r31->unk_64.y; - var_r31->unk_24 = var_r31->unk_7C; - var_r31->unk_28 = var_r31->unk_80; + if (work->timeRot < 1.0f) { + weight = sind(90.0f * work->timeRot); + work->target.y = work->targetPrev.y + (weight * (work->posFocus.y - work->targetPrev.y)); + work->zoom = work->zoomPrev + (weight * (work->zoomTarget - work->zoomPrev)); + work->rot = work->rotPrev + (weight * (work->rotTarget - work->rotPrev)); + + if ((work->timeRot += work->rotSpeed) >= 1.0f) { + work->target.y = work->posFocus.y; + work->zoom = work->zoomTarget; + work->rot = work->rotTarget; } - var_r31->target.x = var_r31->unk_24 * -sind(var_r31->unk_28); - var_r31->target.z = var_r31->unk_24 * cosd(var_r31->unk_28); + work->target.x = work->zoom * -sind(work->rot); + work->target.z = work->zoom * cosd(work->rot); } - var_f31 = var_r31->target.x - var_r31->pos.x; - var_f30 = var_r31->target.z - var_r31->pos.z; + dx = work->target.x - work->pos.x; + dz = work->target.z - work->pos.z; - var_r31->unk_24 = sqrtf(var_f31 * var_f31 + var_f30 * var_f30); - var_r31->unk_28 = fmod(-atan2d(var_f31, var_f30), 360.0); - if (var_r31->unk_28 < 0.0f) { - var_r31->unk_28 += 360.0f; + work->zoom = sqrtf(dx * dx + dz * dz); + work->rot = fmod(-atan2d(dx, dz), 360.0); + if (work->rot < 0.0f) { + work->rot += 360.0f; } - Hu3DCameraPosSet(1, var_r31->pos.x, var_r31->pos.y, var_r31->pos.z, var_r31->up.x, var_r31->up.y, var_r31->up.z, var_r31->target.x, - var_r31->target.y, var_r31->target.z); + Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x, work->target.y, work->target.z); } -static void fn_1_1198(omObjData *object) +static void CameraExecDebug(omObjData *object) { if (HuPadBtn[0] & PAD_BUTTON_B) { - UnkPresentCameraStruct *var_r31 = object->data; - - var_r31->target.x = var_r31->target.x + (0.5f * HuPadStkX[0]); - var_r31->target.y = var_r31->target.y + (0.5f * HuPadStkY[0]); - var_r31->pos.z = var_r31->pos.z + (0.5f * HuPadTrigL[0]); - var_r31->pos.z = var_r31->pos.z - (0.5f * HuPadTrigR[0]); - var_r31->pos.x = var_r31->pos.x + (0.5f * HuPadSubStkY[0]); - var_r31->pos.y = var_r31->pos.y + (0.5f * HuPadSubStkX[0]); + CameraWork *work = object->data; + + work->target.x += (0.5f * HuPadStkX[0]); + work->target.y += (0.5f * HuPadStkY[0]); + work->pos.z += (0.5f * HuPadTrigL[0]); + work->pos.z -= (0.5f * HuPadTrigR[0]); + work->pos.x += (0.5f * HuPadSubStkY[0]); + work->pos.y += (0.5f * HuPadSubStkX[0]); } } -static void fn_1_1398(omObjData *object) +static void CameraPrintDebug(omObjData *object) { - UnkPresentCameraStruct *var_r31 = object->data; - print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", var_r31->target.x, var_r31->target.y, var_r31->target.z); - print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", var_r31->pos.x, var_r31->pos.y, var_r31->pos.z); - print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", var_r31->unk_24, var_r31->unk_28); + CameraWork *work = object->data; + print8(32, 64, 1.5f, "AT : x=%.2f y=%.2f z=%.2f", work->target.x, work->target.y, work->target.z); + print8(32, 80, 1.5f, "EYE : x=%.2f y=%.2f z=%.2f", work->pos.x, work->pos.y, work->pos.z); + print8(32, 96, 1.5f, "R : %.2f DEG: %.2f", work->zoom, work->rot); } diff --git a/src/REL/present/common.c b/src/REL/present/common.c index a6a42ba1..32922f12 100644 --- a/src/REL/present/common.c +++ b/src/REL/present/common.c @@ -6,228 +6,224 @@ #include "REL/present.h" -typedef struct UnkPresentStruct5 { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s16 unk_04; - /* 0x08 */ float x; - /* 0x0C */ float y; - /* 0x10 */ float z; - /* 0x14 */ float unk_14; - /* 0x18 */ s32 unk18[2]; - /* 0x20 */ float unk_20; - /* 0x24 */ float unk_24; - /* 0x28 */ float unk_28; - /* 0x2C */ float unk_2C; - /* 0x30 */ float unk_30; - /* 0x34 */ float unk_34; - /* 0x38 */ float unk_38; - /* 0x3C */ s32 unk3C[3]; - /* 0x48 */ float unk_48; - /* 0x4C */ float unk_4C; +typedef struct GuideWork { + /* 0x00 */ s32 execMode; + /* 0x04 */ s16 motion; + /* 0x08 */ Vec pos; + /* 0x14 */ Vec newPos; + /* 0x20 */ Vec rot; + /* 0x2C */ Vec posDelta; + /* 0x38 */ float distRemain; + /* 0x3C */ char unk3C[0xC]; + /* 0x48 */ float time; + /* 0x4C */ float speed; /* 0x50 */ s32 unk_50; /* 0x54 */ s32 unk_54; -} UnkPresentStruct5; /* size = 0x58 */ +} GuideWork; /* size = 0x58 */ -static void fn_1_4620(omObjData *object); -static void fn_1_4880(omObjData *object); -static void fn_1_4A04(omObjData *object); -static float fn_1_4CEC(float arg8, float arg9, float argA); +static void ExecGuideEnter(omObjData *object); +static void ExecGuideLeave(omObjData *object); +static void UpdateGuide(omObjData *object); +static float LerpAngle(float start, float end, float time); -omObjFunc lbl_1_data_1A0[] = { NULL, fn_1_4620, fn_1_4880 }; +static omObjFunc execModeTbl[] = { NULL, ExecGuideEnter, ExecGuideLeave }; -static const s32 lbl_1_rodata_BD8[] = { 0x006E0089, 0x006E008A, 0x006E008B }; +static const s32 guideMotTbl[] = { + DATA_MAKE_NUM(DATADIR_PRESENT, 137), + DATA_MAKE_NUM(DATADIR_PRESENT, 138), + DATA_MAKE_NUM(DATADIR_PRESENT, 139), +}; - -omObjData *fn_1_42F4(void) +omObjData *PresentGuideCreate(void) { s32 var_r29; - omObjData *var_r31 = omAddObjEx(lbl_1_bss_4, 1002, 1, 3, 2, NULL); - UnkPresentStruct5 *var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, 88, MEMORY_DEFAULT_NUM); - var_r31->data = var_r30; - - var_r30->x = 0.0f; - var_r30->z = 0.0f; - var_r30->y = 0.0f; - var_r30->unk_20 = 0.0f; - var_r30->unk_24 = 0.0f; - var_r30->unk_28 = 0.0f; - var_r30->unk_2C = 0.0f; - var_r30->unk_34 = 0.0f; - var_r30->unk_30 = 0.0f; - var_r31->model[0] = Hu3DModelCreate(HuDataReadNum(0x6E0088, MEMORY_DEFAULT_NUM)); - Hu3DModelLayerSet(var_r31->model[0], 1); + omObjData *object = omAddObjEx(presentObjMan, 1002, 1, 3, 2, NULL); + GuideWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(GuideWork), MEMORY_DEFAULT_NUM); + object->data = work; + + work->pos.x = 0.0f; + work->pos.z = 0.0f; + work->pos.y = 0.0f; + work->rot.x = 0.0f; + work->rot.y = 0.0f; + work->rot.z = 0.0f; + + work->posDelta.x = 0.0f; + work->posDelta.z = 0.0f; + work->posDelta.y = 0.0f; + object->model[0] = Hu3DModelCreate(HuDataReadNum(DATA_MAKE_NUM(DATADIR_PRESENT, 136), MEMORY_DEFAULT_NUM)); + Hu3DModelLayerSet(object->model[0], 1); for (var_r29 = 0; var_r29 < 3; var_r29++) { - var_r31->motion[var_r29] = Hu3DJointMotion(var_r31->model[0], HuDataSelHeapReadNum(lbl_1_rodata_BD8[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA)); + object->motion[var_r29] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[var_r29], MEMORY_DEFAULT_NUM, HEAP_DATA)); } - Hu3DMotionShiftSet(var_r31->model[0], var_r31->motion[var_r30->unk_04 = 0], 0.0f, 8.0f, 0x40000001); - var_r30->unk_50 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[2], 1, 10); - var_r30->unk_54 = CharModelEffectNpcInit(var_r31->model[0], var_r31->motion[1], 0, 10); + Hu3DMotionShiftSet(object->model[0], object->motion[work->motion = 0], 0.0f, 8.0f, 0x40000001); + work->unk_50 = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 10); + work->unk_54 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 10); CharModelLayerSetAll(1); - Hu3DModelShadowSet(var_r31->model[0]); - fn_1_45C0(var_r31, 0); - fn_1_4A04(var_r31); - Hu3DModelAttrSet(var_r31->model[0], 1); + Hu3DModelShadowSet(object->model[0]); + PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE); + UpdateGuide(object); + Hu3DModelAttrSet(object->model[0], 1); - return var_r31; + return object; } -void fn_1_4534(omObjData *object) +void PresentGuideKill(omObjData *object) { - s32 var_r31; - void *var_r29 = object->data; + void *work = object->data; - for (var_r31 = 0; var_r31 < 1; var_r31++) { - Hu3DModelKill(object->model[var_r31]); + s32 i; + for (i = 0; i < 1; i++) { + Hu3DModelKill(object->model[i]); } - for (var_r31 = 0; var_r31 < 3; var_r31++) { - Hu3DMotionKill(object->motion[var_r31]); + for (i = 0; i < 3; i++) { + Hu3DMotionKill(object->motion[i]); } - HuMemDirectFree(var_r29); + HuMemDirectFree(work); } -void fn_1_45C0(omObjData *object, s32 arg1) +void PresentGuideExecModeSet(omObjData *object, s32 execMode) { - UnkPresentStruct5 *var_r31 = object->data; + GuideWork *work = object->data; - var_r31->unk_00 = arg1; - object->func = lbl_1_data_1A0[arg1]; + work->execMode = execMode; + object->func = execModeTbl[execMode]; object->unk10 = 0; object->unk10 = 0; } -s32 fn_1_4604(omObjData *object) +s32 PresentGuideExecModeGet(omObjData *object) { - UnkPresentStruct5 *var_r31 = object->data; + GuideWork *work = object->data; - return var_r31->unk_00; + return work->execMode; } -static void fn_1_4620(omObjData *object) +static void ExecGuideEnter(omObjData *object) { float var_f31; - UnkPresentStruct5 *var_r31 = object->data; + GuideWork *work = object->data; switch (object->unk10) { case 0: Hu3DModelAttrReset(object->model[0], 1); - var_r31->x = -300.0f; - var_r31->z = -180.0f; - var_r31->unk_48 = 0.0f; - var_r31->unk_4C = 0.025f; + work->pos.x = -300.0f; + work->pos.z = -180.0f; + work->time = 0.0f; + work->speed = 0.025f; object->unk10 = 1; case 1: - var_f31 = sind(90.0f * var_r31->unk_48); + var_f31 = sind(90.0f * work->time); var_f31 *= var_f31; - var_r31->unk_14 = -300.0f + (300.0f * var_f31); - var_r31->unk_2C = var_r31->unk_14 - var_r31->x; - if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + work->newPos.x = -300.0f + (300.0f * var_f31); + work->posDelta.x = work->newPos.x - work->pos.x; + if ((work->time += work->speed) < 1.0f) { break; } - var_r31->x = 0.0f; - var_r31->unk_48 = 0.0f; - var_r31->unk_4C = 0.05f; + work->pos.x = 0.0f; + work->time = 0.0f; + work->speed = 0.05f; object->unk10 = 2; case 2: - var_r31->unk_2C = 0.0f; - var_r31->unk_34 = 0.01f; - if ((var_r31->unk_48 = var_r31->unk_48 + var_r31->unk_4C) < 1.0f) { + work->posDelta.x = 0.0f; + work->posDelta.z = 0.01f; + if ((work->time += work->speed) < 1.0f) { break; } - var_r31->unk_24 = 0.0f; - var_r31->unk_2C = 0.0f; - var_r31->unk_30 = 0.0f; - var_r31->unk_34 = 0.0f; + work->rot.y = 0.0f; + work->posDelta.x = 0.0f; + work->posDelta.y = 0.0f; + work->posDelta.z = 0.0f; object->unk10 = 3; case 3: - fn_1_45C0(object, 0); + PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE); break; default: break; } - fn_1_4A04(object); + UpdateGuide(object); } -static void fn_1_4880(omObjData *object) +static void ExecGuideLeave(omObjData *object) { - float var_f31; + float weight; - UnkPresentStruct5 *var_r30 = object->data; + GuideWork *work = object->data; switch (object->unk10) { case 0: - var_r30->unk_48 = 0.0f; - var_r30->unk_4C = 0.025f; + work->time = 0.0f; + work->speed = 0.025f; Hu3DModelAttrReset(object->model[0], 1); object->unk10 = 1; case 1: - var_f31 = sind(90.0f * var_r30->unk_48); - var_f31 *= var_f31; - var_r30->unk_14 = -(300.0f * var_f31); - var_r30->unk_2C = var_r30->unk_14 - var_r30->x; - if ((var_r30->unk_48 = var_r30->unk_48 + var_r30->unk_4C) < 1.0f) { + weight = sind(90.0f * work->time); + weight *= weight; + work->newPos.x = -(300.0f * weight); + work->posDelta.x = work->newPos.x - work->pos.x; + if ((work->time += work->speed) < 1.0f) { break; } object->unk10 = 2; case 2: Hu3DModelAttrSet(object->model[0], 1); - fn_1_45C0(object, 0); + PresentGuideExecModeSet(object, PRESENT_GUIDE_MODE_NONE); break; default: break; } - fn_1_4A04(object); + UpdateGuide(object); (void)object; } -static void fn_1_4A04(omObjData *object) +static void UpdateGuide(omObjData *object) { - UnkPresentStruct5 *var_r31 = object->data; - s16 var_r29 = 0; - float var_f30 = var_r31->unk_2C * var_r31->unk_2C + var_r31->unk_34 * var_r31->unk_34; - - var_r31->unk_38 = sqrtf(var_f30); - if (0.001f <= var_r31->unk_38) { - if (12.0f <= var_r31->unk_38) { - var_r31->unk_2C = var_r31->unk_2C / var_r31->unk_38; - var_r31->unk_34 = var_r31->unk_34 / var_r31->unk_38; - var_r31->unk_38 = 12.0f; - var_r31->unk_2C = 12.0f * var_r31->unk_2C; - var_r31->unk_34 = 12.0f * var_r31->unk_34; + GuideWork *work = object->data; + s16 motion = 0; + + work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z); + if (0.001f <= work->distRemain) { + if (12.0f <= work->distRemain) { + work->posDelta.x /= work->distRemain; + work->posDelta.z /= work->distRemain; + work->distRemain = 12.0f; + work->posDelta.x = 12.0f * work->posDelta.x; + work->posDelta.z = 12.0f * work->posDelta.z; } - var_r31->unk_24 = fn_1_4CEC(var_r31->unk_24, atan2d(var_r31->unk_2C, var_r31->unk_34), 0.4f); + work->rot.y = LerpAngle(work->rot.y, atan2d(work->posDelta.x, work->posDelta.z), 0.4f); - if (8.0f <= var_r31->unk_38) { - var_r29 = 2; + if (8.0f <= work->distRemain) { + motion = 2; } else { - var_r29 = 1; + motion = 1; } } - var_r31->x = var_r31->x + var_r31->unk_2C; - var_r31->z = var_r31->z + var_r31->unk_34; - if (var_r31->unk_04 != var_r29) { - Hu3DMotionShiftSet(object->model[0], object->motion[var_r31->unk_04 = var_r29], 0.0f, 8.0f, 0x40000001); // or 0x41000000 + work->pos.x += work->posDelta.x; + work->pos.z += work->posDelta.z; + if (work->motion != motion) { + Hu3DMotionShiftSet(object->model[0], object->motion[work->motion = motion], 0.0f, 8.0f, 0x40000001); } - omSetTra(object, var_r31->x, var_r31->y, var_r31->z); - omSetRot(object, var_r31->unk_20, var_r31->unk_24, var_r31->unk_28); + omSetTra(object, work->pos.x, work->pos.y, work->pos.z); + omSetRot(object, work->rot.x, work->rot.y, work->rot.z); } -static float fn_1_4CEC(float arg8, float arg9, float argA) +static float LerpAngle(float start, float end, float time) { - float var_f30; + float angle; - float var_f31 = fmod(arg9 - arg8, 360.0f); - if (0.0f > var_f31) { - var_f31 += 360.0f; + float delta = fmod(end - start, 360.0f); + if (0.0f > delta) { + delta += 360.0f; } - if (180.0f < var_f31) { - var_f31 -= 360.0f; + if (180.0f < delta) { + delta -= 360.0f; } - var_f30 = fmod(arg8 + (var_f31 * argA), 360.0f); - if (0.0f > var_f30) { - var_f30 += 360.0f; + angle = fmod(start + (delta * time), 360.0f); + if (0.0f > angle) { + angle += 360.0f; } - return var_f30; + return angle; } diff --git a/src/REL/present/init.c b/src/REL/present/init.c index 17d98aa0..bdc5f551 100644 --- a/src/REL/present/init.c +++ b/src/REL/present/init.c @@ -8,158 +8,158 @@ #include "REL/present.h" -typedef struct UnkPresentStruct6 { - /* 0x00 */ s16 unk_00; - /* 0x04 */ float unk_04; - /* 0x08 */ float unk_08; -} UnkPresentStruct6; /* size 0x0C */ // looks like a struct in option/scene.c - -typedef struct UnkPresentStruct6Weird { - /* 0x00 */ s16 unk_00; - /* 0x04 */ float unk_04; - /* 0x08 */ float unk_08; - /* 0x0C */ float unk_0C; -} UnkPresentStruct6Weird; /* size = 0x10 */ // looks like a struct in option/scene.c - -omObjData *lbl_1_bss_18; +typedef struct FaderWork { + /* 0x00 */ s16 id; + /* 0x04 */ float tplvl; + /* 0x08 */ float speed; +} FaderWork; /* size 0x0C */ // same as in option/scene.c + +typedef struct FaderWork2 { + /* 0x00 */ s16 id; + /* 0x04 */ float tpMultiplier; + /* 0x08 */ float tplvl; + /* 0x0C */ float speed; +} FaderWork2; /* size = 0x10 */ + +omObjData *presentState; omObjData *lbl_1_bss_14; -omObjData *lbl_1_bss_10; +omObjData *present; omObjData *lbl_1_bss_C; -omObjData *lbl_1_bss_8; -Process *lbl_1_bss_4; -omObjData *lbl_1_bss_0; +omObjData *presentCamera; +Process *presentObjMan; +static omObjData *scene; -static void fn_1_254(void); -static void fn_1_45C(void); -static void fn_1_5EC(omObjData *object); +static void FadeSprite(void); +static void FadeModel(void); +static void SceneMain(omObjData *object); void ObjectSetup(void) { - lbl_1_bss_4 = omInitObjMan(150, 8192); - omGameSysInit(lbl_1_bss_4); + presentObjMan = omInitObjMan(150, 8192); + omGameSysInit(presentObjMan); HuWinInit(1); - lbl_1_bss_0 = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 0, fn_1_5EC); - lbl_1_bss_0->unk10 = 0; - lbl_1_bss_18 = fn_1_39A8(); + scene = omAddObjEx(presentObjMan, 1000, 0, 0, 0, SceneMain); + scene->unk10 = 0; + presentState = PresentStateCreate(); } -void fn_1_144(s16 arg0, s32 arg1, s32 arg2) +void PresentFadeSprite(s16 sprite, BOOL inF, s32 duration) { - Process *var_r30; - - UnkPresentStruct6 *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct6), MEMORY_DEFAULT_NUM); - var_r31->unk_00 = arg0; - var_r31->unk_08 = 1.0f / arg2; - if (arg1) { - var_r31->unk_08 = var_r31->unk_08; - var_r31->unk_04 = 0.0f; + Process *process; + + FaderWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM); + work->id = sprite; + work->speed = 1.0f / duration; + if (inF) { + work->speed = work->speed; + work->tplvl = 0.0f; } else { - var_r31->unk_08 = -var_r31->unk_08; - var_r31->unk_04 = 1.0f; + work->speed = -work->speed; + work->tplvl = 1.0f; } - espDispOn(var_r31->unk_00); - espTPLvlSet(var_r31->unk_00, var_r31->unk_04); - var_r30 = HuPrcChildCreate(fn_1_254, 100, 5376, 0, HuPrcCurrentGet()); - var_r30->user_data = var_r31; + espDispOn(work->id); + espTPLvlSet(work->id, work->tplvl); + process = HuPrcChildCreate(FadeSprite, 100, 5376, 0, HuPrcCurrentGet()); + process->user_data = work; } -static void fn_1_254(void) +static void FadeSprite(void) { - UnkPresentStruct6 *var_r31 = HuPrcCurrentGet()->user_data; + FaderWork *work = HuPrcCurrentGet()->user_data; while (TRUE) { - var_r31->unk_04 = var_r31->unk_04 + var_r31->unk_08; - if (var_r31->unk_04 > 1.0f) { - var_r31->unk_04 = 1.0f; + work->tplvl = work->tplvl + work->speed; + if (work->tplvl > 1.0f) { + work->tplvl = 1.0f; break; } - else if (var_r31->unk_04 < 0.0f) { - var_r31->unk_04 = 0.0f; + else if (work->tplvl < 0.0f) { + work->tplvl = 0.0f; break; } else { - espTPLvlSet(var_r31->unk_00, var_r31->unk_04); + espTPLvlSet(work->id, work->tplvl); HuPrcVSleep(); } } - espTPLvlSet(var_r31->unk_00, var_r31->unk_04); - if (var_r31->unk_08 < 0.0f) { - espDispOff(var_r31->unk_00); + espTPLvlSet(work->id, work->tplvl); + if (work->speed < 0.0f) { + espDispOff(work->id); } - HuMemDirectFree(var_r31); + HuMemDirectFree(work); HuPrcEnd(); } -void fn_1_334(s16 arg0, s32 arg1, float arg8, s32 arg2) +void FadeSpriteWithMultiplier(s16 model, BOOL inF, float tpMultiplier, s32 duration) { - Process *var_r30; - // TODO correct type? why are only 12 bytes allocated? - UnkPresentStruct6Weird *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 12, MEMORY_DEFAULT_NUM); - var_r31->unk_00 = arg0; - var_r31->unk_0C = 1.0f / arg2; - var_r31->unk_04 = arg8; - - if (arg1) { - var_r31->unk_0C = var_r31->unk_0C; - var_r31->unk_08 = 0.0f; + Process *process; + // bug: wrong struct in sizeof + FaderWork2 *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(FaderWork), MEMORY_DEFAULT_NUM); + work->id = model; + work->speed = 1.0f / duration; + work->tpMultiplier = tpMultiplier; + + if (inF) { + work->speed = work->speed; + work->tplvl = 0.0f; } else { - var_r31->unk_0C = -var_r31->unk_0C; - var_r31->unk_08 = 1.0f; + work->speed = -work->speed; + work->tplvl = 1.0f; } - Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04); - Hu3DModelAttrReset(var_r31->unk_00, 1); - var_r30 = HuPrcChildCreate(fn_1_45C, 100, 5376, 0, HuPrcCurrentGet()); - var_r30->user_data = var_r31; + Hu3DModelTPLvlSet(work->id, work->tplvl * work->tpMultiplier); + Hu3DModelAttrReset(work->id, 1); + process = HuPrcChildCreate(FadeModel, 100, 5376, 0, HuPrcCurrentGet()); + process->user_data = work; } -static void fn_1_45C(void) +static void FadeModel(void) { - UnkPresentStruct6Weird *var_r31 = HuPrcCurrentGet()->user_data; + FaderWork2 *var_r31 = HuPrcCurrentGet()->user_data; while (TRUE) { - var_r31->unk_08 = var_r31->unk_08 + var_r31->unk_0C; - if (var_r31->unk_08 > 1.0f) { - var_r31->unk_08 = 1.0f; + var_r31->tplvl += var_r31->speed; + if (var_r31->tplvl > 1.0f) { + var_r31->tplvl = 1.0f; break; } - else if (var_r31->unk_08 < 0.0f) { - var_r31->unk_08 = 0.0f; + else if (var_r31->tplvl < 0.0f) { + var_r31->tplvl = 0.0f; break; } else { - Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04); + Hu3DModelTPLvlSet(var_r31->id, var_r31->tplvl * var_r31->tpMultiplier); HuPrcVSleep(); } } - Hu3DModelTPLvlSet(var_r31->unk_00, var_r31->unk_08 * var_r31->unk_04); - if (var_r31->unk_0C < 0.0f) { - Hu3DModelAttrSet(var_r31->unk_00, 1); + Hu3DModelTPLvlSet(var_r31->id, var_r31->tplvl * var_r31->tpMultiplier); + if (var_r31->speed < 0.0f) { + Hu3DModelAttrSet(var_r31->id, 1); } HuMemDirectFree(var_r31); HuPrcEnd(); } -s32 fn_1_550(u16 arg0) +BOOL PresentPadCheck(u16 btn) { - u32 var_r31 = HuPadBtnDown[0] & arg0; + u32 var_r31 = HuPadBtnDown[0] & btn; return var_r31 != 0; } -s32 fn_1_584(u16 arg0) +BOOL PresentPadDStkRepCheck(u16 dir) { - u32 var_r31 = HuPadDStkRep[0] & arg0; + u32 var_r31 = HuPadDStkRep[0] & dir; return var_r31 != 0; } -s32 fn_1_5B8(u16 arg0) +BOOL PresentPadDStkCheck(u16 dir) { - u32 var_r31 = HuPadDStk[0] & arg0; + u32 var_r31 = HuPadDStk[0] & dir; return var_r31 != 0; } -static void fn_1_5EC(omObjData *object) +static void SceneMain(omObjData *object) { switch (object->unk10) { case 0: @@ -176,7 +176,7 @@ static void fn_1_5EC(omObjData *object) break; case 3: if (!WipeStatGet()) { - fn_1_3B18(lbl_1_bss_18); + PresentStateKill(presentState); omOvlReturnEx(1, 1); } break; diff --git a/src/REL/present/main.c b/src/REL/present/main.c index ae26fdd9..0d39435e 100644 --- a/src/REL/present/main.c +++ b/src/REL/present/main.c @@ -7,69 +7,74 @@ #include "REL/present.h" -typedef struct UnkPresentStruct { - /* 0x00 */ UnkWindowDataStruct *unk_00; - /* 0x04 */ s32 unk_04; -} UnkPresentStruct; /* size = 0x08 */ +typedef struct StateWork { + /* 0x00 */ PresentWindow *window; + /* 0x04 */ s32 quitTimer; +} StateWork; /* size = 0x08 */ -typedef struct UnkPresentStruct4 { - /* 0x00 */ Vec unk_00; - /* 0x0C */ Vec unk_0C; - /* 0x18 */ Vec unk_18; -} UnkPresentStruct4; /* size = 0x1C */ +typedef struct UnkShadowDataStruct { + /* 0x00 */ Vec pos; + /* 0x0C */ Vec up; + /* 0x18 */ Vec target; +} UnkShadowDataStruct; /* size = 0x24 */ -omObjData *lbl_1_bss_20; +omObjData *presentGuide; -UnkPresentStruct4 lbl_1_data_F0 = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f } }; +static UnkShadowDataStruct shadowPosTbl = { + { 0.0f, 3000.0f, 1.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, +}; -static void fn_1_3B8C(omObjData *object); -static void fn_1_3DB8(omObjData *object); -static void fn_1_4190(UnkWindowDataStruct *arg0); -static void fn_1_41BC(UnkWindowDataStruct *arg0, s32 arg1); -static void fn_1_41E0(void); +static void ExecPresentView(omObjData *object); +static void ExecPresentGet(omObjData *object); +void PresentWinDispOff(PresentWindow *work); +void PresentWinChoiceSet(PresentWindow *work, s32 choice); +static void ExecWindow(void); -omObjData *fn_1_39A8(void) +omObjData *PresentStateCreate(void) { - omObjData *object = omAddObjEx(lbl_1_bss_4, 1000, 0, 0, 4, NULL); - UnkPresentStruct *var_r30 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkPresentStruct), MEMORY_DEFAULT_NUM); - object->data = var_r30; + omObjData *object = omAddObjEx(presentObjMan, 1000, 0, 0, 4, NULL); + StateWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); + object->data = work; - var_r30->unk_04 = 0; - lbl_1_bss_8 = fn_1_6B4(); - lbl_1_bss_10 = fn_1_1458(); - lbl_1_bss_20 = fn_1_42F4(); - var_r30->unk_00 = fn_1_3EA4(0); + work->quitTimer = 0; + presentCamera = PresentCameraCreate(); + present = PresentCreate(); + presentGuide = PresentGuideCreate(); + work->window = PresentWinCreate(0); Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); Hu3DShadowTPLvlSet(0.45f); - Hu3DShadowPosSet(&lbl_1_data_F0.unk_00, &lbl_1_data_F0.unk_0C, &lbl_1_data_F0.unk_18); + Hu3DShadowPosSet(&shadowPosTbl.pos, &shadowPosTbl.up, &shadowPosTbl.target); + if (omovlevtno > 0) { OSReport("*** PRESENTROOM ( PRESENT GET MODE ) ***\n"); - object->func = fn_1_3DB8; + object->func = ExecPresentGet; object->unk10 = 0; } else { OSReport("*** PRESENTROOM ( PRESENT VIEW MODE ) ***\n"); - object->func = fn_1_3B8C; + object->func = ExecPresentView; object->unk10 = 0; } return object; } -void fn_1_3B18(omObjData *object) +void PresentStateKill(omObjData *object) { - UnkWindowDataStruct **var_r31 = object->data; + PresentWindow **var_r31 = object->data; - fn_1_8F0(lbl_1_bss_8); - fn_1_1784(lbl_1_bss_10); - fn_1_4534(lbl_1_bss_20); - fn_1_4040(*var_r31); + PresentCameraKill(presentCamera); + PresentKill(present); + PresentGuideKill(presentGuide); + PresentWinKill(*var_r31); HuMemDirectFree(var_r31); } -static void fn_1_3B8C(omObjData *object) +static void ExecPresentView(omObjData *object) { - UnkPresentStruct *var_r30 = object->data; + StateWork *work = object->data; switch (object->unk10) { case 0: @@ -81,39 +86,39 @@ static void fn_1_3B8C(omObjData *object) } object->unk10 = 2; case 2: - fn_1_180C(lbl_1_bss_10, 1); + PresentExecModeSet(present, 1); object->unk10 = 3; case 3: - if (fn_1_1850(lbl_1_bss_10)) { + if (PresentExecModeGet(present)) { return; } object->unk10 = 4; case 4: - fn_1_45C0(lbl_1_bss_20, 1); + PresentGuideExecModeSet(presentGuide, PRESENT_GUIDE_MODE_ENTER); object->unk10 = 5; case 5: - if (fn_1_4604(lbl_1_bss_20)) { + if (PresentGuideExecModeGet(presentGuide)) { return; } object->unk10 = 6; case 6: HuAudFXPlay(66); - fn_1_4080(var_r30->unk_00); - fn_1_40B0(var_r30->unk_00, 0x320002); + PresentWinAnimIn(work->window); + PresentWinMesSet(work->window, 0x320002); object->unk10 = 7; case 7: - if (var_r30->unk_00->unk_20) { + if (work->window->state) { return; } - fn_1_41BC(var_r30->unk_00, 1); + PresentWinChoiceSet(work->window, 1); object->unk10 = 8; case 8: - if (var_r30->unk_00->unk_20) { + if (work->window->state) { return; } - fn_1_4098(var_r30->unk_00); - if (!var_r30->unk_00->choice) { - var_r30->unk_04 = 0; + PresentWinAnimOut(work->window); + if (!work->window->choice) { + work->quitTimer = 0; object->unk10 = 11; return; } @@ -122,23 +127,23 @@ static void fn_1_3B8C(omObjData *object) return; } case 9: - fn_1_45C0(lbl_1_bss_20, 2); + PresentGuideExecModeSet(presentGuide, PRESENT_GUIDE_MODE_LEAVE); object->unk10 = 10; return; case 10: - if (fn_1_4604(lbl_1_bss_20)) { + if (PresentGuideExecModeGet(presentGuide)) { return; } object->unk10 = 2; return; case 11: object->unk10 = 12; - var_r30->unk_04 = 0; + work->quitTimer = 0; case 12: - if (var_r30->unk_00->unk_20) { + if (work->window->state) { return; } - if (var_r30->unk_04++ >= 60) { + if (work->quitTimer++ >= 60) { omSysExitReq = 1; object->func = NULL; object->unk10 = 0; @@ -148,48 +153,48 @@ static void fn_1_3B8C(omObjData *object) } } -static void fn_1_3DB8(omObjData *arg0) +static void ExecPresentGet(omObjData *object) { - void *sp8 = arg0->data; + void *sp8 = object->data; - switch (arg0->unk10) { + switch (object->unk10) { case 0: - fn_1_186C(lbl_1_bss_10, omovlevtno - 1); - arg0->unk10 = 1; + PresentSelectedIDSet(present, omovlevtno - 1); + object->unk10 = 1; case 1: - fn_1_180C(lbl_1_bss_10, 3); - arg0->unk10 = 2; + PresentExecModeSet(present, PRESENT_MODE_GET); + object->unk10 = 2; case 2: - if (!fn_1_1850(lbl_1_bss_10)) { - arg0->unk10 = 3; + if (PresentExecModeGet(present) == PRESENT_MODE_NONE) { + object->unk10 = 3; } else { break; } case 3: - arg0->unk10 = 4; + object->unk10 = 4; case 4: omSysExitReq = 1; - arg0->func = NULL; - arg0->unk10 = 0; + object->func = NULL; + object->unk10 = 0; break; default: break; } } -UnkWindowDataStruct *fn_1_3EA4(s32 arg0) +PresentWindow *PresentWinCreate(s32 id) { - UnkWindowDataStruct *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(UnkWindowDataStruct), MEMORY_DEFAULT_NUM); + PresentWindow *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(PresentWindow), MEMORY_DEFAULT_NUM); - var_r31->unk18 = 0; - var_r31->unk10 = 0; - var_r31->unk14 = 0; - var_r31->unk_20 = 0; - var_r31->process = HuPrcChildCreate(fn_1_41E0, 1000, 8192, 0, lbl_1_bss_4); + var_r31->messToBeSet = 0; + var_r31->messWaitSignal = 0; + var_r31->choiceSignal = 0; + var_r31->state = 0; + var_r31->process = HuPrcChildCreate(ExecWindow, 1000, 8192, 0, presentObjMan); var_r31->process->user_data = var_r31; - var_r31->unk08 = arg0; - switch (arg0) { + var_r31->id = id; + switch (id) { case 0: var_r31->window = HuWinExCreateStyled(-10000.0f, 360.0f, 480, 80, -1, 1); HuWinBGTPLvlSet(var_r31->window, 0.8f); @@ -204,112 +209,112 @@ UnkWindowDataStruct *fn_1_3EA4(s32 arg0) break; } HuWinDrawNoSet(var_r31->window, 63); - fn_1_4190(var_r31); + PresentWinDispOff(var_r31); HuSprExecLayerSet(63, 2); return var_r31; } -void fn_1_4040(UnkWindowDataStruct *windowData) +void PresentWinKill(PresentWindow *work) { - HuWinExCleanup(windowData->window); - HuPrcKill(windowData->process); - HuMemDirectFree(windowData); + HuWinExCleanup(work->window); + HuPrcKill(work->process); + HuMemDirectFree(work); } -void fn_1_4080(UnkWindowDataStruct *windowData) +void PresentWinAnimIn(PresentWindow *work) { - if (!windowData->unk0C) { - windowData->unk_20 = 1; + if (!work->visible) { + work->state = 1; } } -void fn_1_4098(UnkWindowDataStruct *windowData) +void PresentWinAnimOut(PresentWindow *work) { - if (windowData->unk0C) { - windowData->unk_20 = 2; + if (work->visible) { + work->state = 2; } } -void fn_1_40B0(UnkWindowDataStruct *windowData, u32 mess) +void PresentWinMesSet(PresentWindow *work, u32 mess) { - if (!windowData->unk_20) { - HuWinMesSet(windowData->window, mess); + if (!work->state) { + HuWinMesSet(work->window, mess); return; } - windowData->unk18 = mess; + work->messToBeSet = mess; } -void fn_1_4104(UnkWindowDataStruct *windowData, u32 mess, s16 index) +void PresentWinInsertMesSet(PresentWindow *work, u32 mess, s16 index) { - HuWinInsertMesSet(windowData->window, mess, index); + HuWinInsertMesSet(work->window, mess, index); } -static void fn_1_4144(UnkWindowDataStruct *windowData, float x, float y) +void PresentWinPosSet(PresentWindow *work, float x, float y) { - HuWinPosSet(windowData->window, x, y); + HuWinPosSet(work->window, x, y); } -static void fn_1_4184(UnkWindowDataStruct *windowData) +void PresentWinDispOn(PresentWindow *work) { - windowData->unk0C = 1; + work->visible = TRUE; } -static void fn_1_4190(UnkWindowDataStruct *windowData) +void PresentWinDispOff(PresentWindow *work) { - windowData->unk0C = 0; + work->visible = FALSE; } -void fn_1_419C(UnkWindowDataStruct *windowData) +void PresentWinMesWait(PresentWindow *work) { - if (!windowData->unk_20) { - windowData->unk_20 = 3; + if (!work->state) { + work->state = 3; } - windowData->unk10 = 1; + work->messWaitSignal = 1; } -static void fn_1_41BC(UnkWindowDataStruct *windowData, s32 arg1) +void PresentWinChoiceSet(PresentWindow *work, s32 choice) { - if (!windowData->unk_20) { - windowData->unk_20 = 4; + if (!work->state) { + work->state = 4; } - windowData->unk14 = 1; - windowData->choice = arg1; + work->choiceSignal = 1; + work->choice = choice; } -static void fn_1_41E0(void) +static void ExecWindow(void) { - UnkWindowDataStruct *windowData = HuPrcCurrentGet()->user_data; + PresentWindow *work = HuPrcCurrentGet()->user_data; while (TRUE) { - switch (windowData->unk_20) { + switch (work->state) { case 1: - windowData->unk0C = 1; - HuWinExAnimIn(windowData->window); + work->visible = 1; + HuWinExAnimIn(work->window); break; case 2: - HuWinExAnimOut(windowData->window); - windowData->unk0C = 0; + HuWinExAnimOut(work->window); + work->visible = 0; break; case 3: - winData[windowData->window].active_pad = 1; - HuWinMesWait(windowData->window); - windowData->unk10 = 0; + winData[work->window].active_pad = 1; + HuWinMesWait(work->window); + work->messWaitSignal = 0; break; case 4: - windowData->choice = HuWinChoiceGet(windowData->window, windowData->choice); - windowData->unk14 = 0; + work->choice = HuWinChoiceGet(work->window, work->choice); + work->choiceSignal = 0; break; } - if (windowData->unk18 != 0) { - HuWinMesSet(windowData->window, windowData->unk18); - windowData->unk18 = 0; + if (work->messToBeSet != 0) { + HuWinMesSet(work->window, work->messToBeSet); + work->messToBeSet = 0; } - windowData->unk_20 = 0; - if (windowData->unk10 != 0) { - windowData->unk_20 = 3; + work->state = 0; + if (work->messWaitSignal != 0) { + work->state = 3; } - if (windowData->unk14 != 0) { - windowData->unk_20 = 4; + if (work->choiceSignal != 0) { + work->state = 4; } HuPrcVSleep(); } diff --git a/src/REL/present/present.c b/src/REL/present/present.c index 79d8ba9c..55adf107 100644 --- a/src/REL/present/present.c +++ b/src/REL/present/present.c @@ -8,88 +8,240 @@ #include "REL/present.h" -typedef struct UnkPresentStruct2 { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s32 unk_04; - /* 0x08 */ s32 unk_08; - /* 0x0C */ s32 unk_0C; - /* 0x10 */ omObjData *unk_10[134]; - /* 0x228 */ UnkWindowDataStruct *unk_228; - /* 0x22C */ UnkWindowDataStruct *unk_22C; - /* 0x230 */ s16 sprite; - /* 0x234 */ s32 unk_234; - /* 0x238 */ s32 unk_238; - /* 0x23C */ float unk_23C; - /* 0x240 */ float unk_240; - /* 0x244 */ float unk_244; - /* 0x248 */ float unk_248; - /* 0x24C */ float unk_24C; - /* 0x250 */ float unk_250; - /* 0x254 */ float unk_254; - /* 0x258 */ float unk_258; - /* 0x25C */ float unk_25C; - /* 0x260 */ float unk_260; - /* 0x264 */ float unk_264; - /* 0x268 */ float unk_268; - /* 0x26C */ float unk_26C; - /* 0x270 */ s32 unk_270[60]; -} UnkPresentStruct2; /* size = 0x3F0 */ - -typedef struct UnkPresentStruct3 { - /* 0x00 */ Vec unk_00; - /* 0x0C */ Vec unk_0C; - /* 0x18 */ GXColor unk_18; -} UnkPresentStruct3; /* size = 0x1C */ // same as option::state::UnkLightDataStruct - -typedef struct UnkPresentNestedInnerStruct { - /* 0x00 */ s32 unk_00; - /* 0x04 */ s32 unk_04; - /* 0x08 */ s32 unk08; - /* 0x0C */ s32 unk_0C; -} UnkPresentNestedInnerStruct; /* size = 0x10 */ - -typedef struct UnkPresentNestedOuterStruct { - /* 0x00 */ s32 unk00; - /* 0x04 */ UnkPresentNestedInnerStruct unk_04[11]; -} UnkPresentNestedOuterStruct; /* size = 0x08 */ - -typedef struct UnkPresentStruct7 { - /* 0x00 */ s32 unk_00; - /* 0x04 */ float unk_04; -} UnkPresentStruct7; /* size = 0x08 */ - -static void fn_1_1928(omObjData *arg0); -static void fn_1_1FA8(omObjData *object, s32 arg1); -static void fn_1_20E8(omObjData *arg0); -static void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3); -static void fn_1_2708(omObjData *arg0, float arg8, s32 arg1); -static void fn_1_2774 (omObjData *arg0); -static s32 fn_1_28F0 (omObjData *object); -static void fn_1_2924(omObjData *object); -static s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2); -static s32 fn_1_2BCC(omObjData *object, s32 arg1); -static s32 fn_1_2C5C(omObjData *object, s32 arg1); -static s32 fn_1_3394(s32 arg0); -static void fn_1_33AC(omObjData *arg0); +#define NUM_CHARACTERS 8 + +#define PRESENT_MDL_MAX 134 +#define PRESENT_MAX 60 + +#define PRESENT_COUNT_CHAR_ROOM 6 +#define PRESENT_COUNT_MG_ROOM 11 + +#define PRESENT_CONSTELLATION 5 + +#define ROOM_MARIO 0 +#define ROOM_LUIGI 1 +#define ROOM_PEACH 2 +#define ROOM_YOSHI 3 +#define ROOM_WARIO 4 +#define ROOM_TROPHY 5 +#define ROOM_DK 6 +#define ROOM_DAISY 7 +#define ROOM_WALUIGI 8 +#define ROOM_MG 9 +#define ROOM_MAX 9 + +#define ROOM_CHANGE_LEFT 1 +#define ROOM_CHANGE_RIGHT 2 + +typedef struct PresentWork { + /* 0x00 */ BOOL cursorVisibleF; + /* 0x04 */ BOOL roomNotEmptyF; + /* 0x08 */ BOOL constellationSelF; + /* 0x0C */ s32 execMode; + /* 0x10 */ omObjData *object[PRESENT_MDL_MAX]; + /* 0x228 */ PresentWindow *presentDescWindow; + /* 0x22C */ PresentWindow *btnLegendWindow; + /* 0x230 */ s16 cursor; + /* 0x234 */ s32 room; + /* 0x238 */ s32 idxInRoom; + /* 0x23C */ float rot; + /* 0x240 */ float rotPrev; + /* 0x244 */ float rotTarget; + /* 0x248 */ float timeRot; + /* 0x24C */ float presentFallingTime; + /* 0x250 */ float rotSpeed; + /* 0x254 */ float presentFallingSpeed; + /* 0x258 */ float cursorTime; + /* 0x25C */ float cursorSpeed; + /* 0x260 */ Vec2f cursorPos; + /* 0x268 */ Vec2f newCursorPos; + /* 0x270 */ BOOL presentUnlockedF[PRESENT_MAX]; + /* 0x360 */ char unk360[4]; +} PresentWork; /* size = 0x364 */ + +typedef struct UnkLightDataStruct { + /* 0x00 */ Vec src; + /* 0x0C */ Vec dest; + /* 0x18 */ GXColor color; +} UnkLightDataStruct; /* size = 0x1C */ // same as option::state::UnkLightDataStruct + +typedef struct PresentData { + /* 0x00 */ s32 cursorPosIdx; + /* 0x04 */ s32 unk04; + /* 0x08 */ s32 nameMess; + /* 0x0C */ s32 descMess; +} PresentData; /* size = 0x10 */ + +typedef struct RoomData { + /* 0x00 */ s32 presentCount; + /* 0x04 */ PresentData presentData[11]; +} RoomData; /* size = 0xB4 */ + +typedef struct PresentDistanceStruct { + /* 0x00 */ s32 present; + /* 0x04 */ float distance; +} PresentDistanceStruct; /* size = 0x08 */ + +static void ExecSelectRoom(omObjData *object); +static void ChangeRoom(omObjData *object, s32 direction); +static void ExecSelectPresent(omObjData *object); +static void GetCursorPos(omObjData *object, float *x, float *y, float *z); +static void SetCameraRot(omObjData *object, float rot, s32 duration); +static void RotateCamera(omObjData *object); +static BOOL CameraRotationDoneCheck(omObjData *object); +static void ShowHidePresents(omObjData *object); +static BOOL PresentUnlocked(omObjData *object, s32 room, s32 present); +static s32 UnlockedPresents(omObjData *object, s32 room); +static s32 MoveCursor(omObjData *object, s32 arg1); +static s32 TotalPresentsInRoom(s32 room); +static void ExecPresentGet(omObjData *object); static s32 fn_1_393C(s32 arg0, s32 arg1); -UnkPresentStruct3 lbl_1_data_50 = { { 0.0f, 400.0f, 0.0f }, { 0.0f, -400.0f, -500.0f }, { 255, 255, 255, 255 } }; -omObjFunc lbl_1_data_6C[] = { NULL, fn_1_1928, fn_1_20E8, fn_1_33AC }; - -static const s32 lbl_1_rodata_A0[] = { 0x006E006C, 0x006E006B, 0x006E0000, 0x006E0001, 0x006E0002, 0x006E0003, 0x006E0004, 0x006E0005, 0x006E0006, - 0x006E0007, 0x006E0008, 0x006E0009, 0x006E000A, 0x006E000B, 0x006E000C, 0x006E000D, 0x006E000E, 0x006E000F, 0x006E0010, 0x006E0011, 0x006E0012, - 0x006E0013, 0x006E0014, 0x006E0015, 0x006E0016, 0x006E0017, 0x006E0018, 0x006E0019, 0x006E001A, 0x006E001B, 0x006E001C, 0x006E001D, 0x006E001E, - 0x006E001F, 0x006E0020, 0x006E0021, 0x006E0022, 0x006E0023, 0x006E0024, 0x006E0025, 0x006E0026, 0x006E0027, 0x006E0028, 0x006E0029, 0x006E002A, - 0x006E002B, 0x006E002C, 0x006E002D, 0x006E002E, 0x006E002F, 0x006E0030, 0x006E0031, 0x006E0032, 0x006E0033, 0x006E0034, 0x006E0035, 0x006E0036, - 0x006E0037, 0x006E0038, 0x006E0039, 0x006E003A, 0x006E003B, 0x006E003C, 0x006E003D, 0x006E003E, 0x006E003F, 0x006E0040, 0x006E0041, 0x006E0042, - 0x006E0043, 0x006E0044, 0x006E0045, 0x006E0046, 0x006E0047, 0x006E0048, 0x006E0049, 0x006E004A, 0x006E004B, 0x006E004C, 0x006E004D, 0x006E004E, - 0x006E004F, 0x006E0050, 0x006E0051, 0x006E0052, 0x006E0053, 0x006E0054, 0x006E0055, 0x006E0056, 0x006E0057, 0x006E0058, 0x006E0059, 0x006E005A, - 0x006E005B, 0x006E005C, 0x006E005D, 0x006E005E, 0x006E005F, 0x006E0060, 0x006E0061, 0x006E0062, 0x006E0063, 0x006E0064, 0x006E0065, 0x006E0066, - 0x006E0067, 0x006E0068, 0x006E0069, 0x006E006A, 0x006E006D, 0x006E006F, 0x006E0071, 0x006E0073, 0x006E0075, 0x006E0077, 0x006E0079, 0x006E007B, - 0x006E007D, 0x006E006E, 0x006E0070, 0x006E0072, 0x006E0074, 0x006E0076, 0x006E0078, 0x006E007A, 0x006E007C, 0x006E007F, 0x006E0080, 0x006E0081, - 0x006E0082, 0x006E0083, 0x006E0084, 0x006E0085, 0x006E0086 }; - -static const UnkPresentNestedOuterStruct lbl_1_rodata_2B8[] = { +static UnkLightDataStruct lightTbl = { + { 0.0f, 400.0f, 0.0f }, + { 0.0f, -400.0f, -500.0f }, + { 255, 255, 255, 255 }, +}; +static omObjFunc execModeTbl[] = { NULL, ExecSelectRoom, ExecSelectPresent, ExecPresentGet }; + +static const s32 presentMdlTbl[PRESENT_MDL_MAX] = { + DATA_MAKE_NUM(DATADIR_PRESENT, 108), + DATA_MAKE_NUM(DATADIR_PRESENT, 107), + DATA_MAKE_NUM(DATADIR_PRESENT, 0), + DATA_MAKE_NUM(DATADIR_PRESENT, 1), + DATA_MAKE_NUM(DATADIR_PRESENT, 2), + DATA_MAKE_NUM(DATADIR_PRESENT, 3), + DATA_MAKE_NUM(DATADIR_PRESENT, 4), + DATA_MAKE_NUM(DATADIR_PRESENT, 5), + DATA_MAKE_NUM(DATADIR_PRESENT, 6), + DATA_MAKE_NUM(DATADIR_PRESENT, 7), + DATA_MAKE_NUM(DATADIR_PRESENT, 8), + DATA_MAKE_NUM(DATADIR_PRESENT, 9), + DATA_MAKE_NUM(DATADIR_PRESENT, 10), + DATA_MAKE_NUM(DATADIR_PRESENT, 11), + DATA_MAKE_NUM(DATADIR_PRESENT, 12), + DATA_MAKE_NUM(DATADIR_PRESENT, 13), + DATA_MAKE_NUM(DATADIR_PRESENT, 14), + DATA_MAKE_NUM(DATADIR_PRESENT, 15), + DATA_MAKE_NUM(DATADIR_PRESENT, 16), + DATA_MAKE_NUM(DATADIR_PRESENT, 17), + DATA_MAKE_NUM(DATADIR_PRESENT, 18), + DATA_MAKE_NUM(DATADIR_PRESENT, 19), + DATA_MAKE_NUM(DATADIR_PRESENT, 20), + DATA_MAKE_NUM(DATADIR_PRESENT, 21), + DATA_MAKE_NUM(DATADIR_PRESENT, 22), + DATA_MAKE_NUM(DATADIR_PRESENT, 23), + DATA_MAKE_NUM(DATADIR_PRESENT, 24), + DATA_MAKE_NUM(DATADIR_PRESENT, 25), + DATA_MAKE_NUM(DATADIR_PRESENT, 26), + DATA_MAKE_NUM(DATADIR_PRESENT, 27), + DATA_MAKE_NUM(DATADIR_PRESENT, 28), + DATA_MAKE_NUM(DATADIR_PRESENT, 29), + DATA_MAKE_NUM(DATADIR_PRESENT, 30), + DATA_MAKE_NUM(DATADIR_PRESENT, 31), + DATA_MAKE_NUM(DATADIR_PRESENT, 32), + DATA_MAKE_NUM(DATADIR_PRESENT, 33), + DATA_MAKE_NUM(DATADIR_PRESENT, 34), + DATA_MAKE_NUM(DATADIR_PRESENT, 35), + DATA_MAKE_NUM(DATADIR_PRESENT, 36), + DATA_MAKE_NUM(DATADIR_PRESENT, 37), + DATA_MAKE_NUM(DATADIR_PRESENT, 38), + DATA_MAKE_NUM(DATADIR_PRESENT, 39), + DATA_MAKE_NUM(DATADIR_PRESENT, 40), + DATA_MAKE_NUM(DATADIR_PRESENT, 41), + DATA_MAKE_NUM(DATADIR_PRESENT, 42), + DATA_MAKE_NUM(DATADIR_PRESENT, 43), + DATA_MAKE_NUM(DATADIR_PRESENT, 44), + DATA_MAKE_NUM(DATADIR_PRESENT, 45), + DATA_MAKE_NUM(DATADIR_PRESENT, 46), + DATA_MAKE_NUM(DATADIR_PRESENT, 47), + DATA_MAKE_NUM(DATADIR_PRESENT, 48), + DATA_MAKE_NUM(DATADIR_PRESENT, 49), + DATA_MAKE_NUM(DATADIR_PRESENT, 50), + DATA_MAKE_NUM(DATADIR_PRESENT, 51), + DATA_MAKE_NUM(DATADIR_PRESENT, 52), + DATA_MAKE_NUM(DATADIR_PRESENT, 53), + DATA_MAKE_NUM(DATADIR_PRESENT, 54), + DATA_MAKE_NUM(DATADIR_PRESENT, 55), + DATA_MAKE_NUM(DATADIR_PRESENT, 56), + DATA_MAKE_NUM(DATADIR_PRESENT, 57), + DATA_MAKE_NUM(DATADIR_PRESENT, 58), + DATA_MAKE_NUM(DATADIR_PRESENT, 59), + DATA_MAKE_NUM(DATADIR_PRESENT, 60), + DATA_MAKE_NUM(DATADIR_PRESENT, 61), + DATA_MAKE_NUM(DATADIR_PRESENT, 62), + DATA_MAKE_NUM(DATADIR_PRESENT, 63), + DATA_MAKE_NUM(DATADIR_PRESENT, 64), + DATA_MAKE_NUM(DATADIR_PRESENT, 65), + DATA_MAKE_NUM(DATADIR_PRESENT, 66), + DATA_MAKE_NUM(DATADIR_PRESENT, 67), + DATA_MAKE_NUM(DATADIR_PRESENT, 68), + DATA_MAKE_NUM(DATADIR_PRESENT, 69), + DATA_MAKE_NUM(DATADIR_PRESENT, 70), + DATA_MAKE_NUM(DATADIR_PRESENT, 71), + DATA_MAKE_NUM(DATADIR_PRESENT, 72), + DATA_MAKE_NUM(DATADIR_PRESENT, 73), + DATA_MAKE_NUM(DATADIR_PRESENT, 74), + DATA_MAKE_NUM(DATADIR_PRESENT, 75), + DATA_MAKE_NUM(DATADIR_PRESENT, 76), + DATA_MAKE_NUM(DATADIR_PRESENT, 77), + DATA_MAKE_NUM(DATADIR_PRESENT, 78), + DATA_MAKE_NUM(DATADIR_PRESENT, 79), + DATA_MAKE_NUM(DATADIR_PRESENT, 80), + DATA_MAKE_NUM(DATADIR_PRESENT, 81), + DATA_MAKE_NUM(DATADIR_PRESENT, 82), + DATA_MAKE_NUM(DATADIR_PRESENT, 83), + DATA_MAKE_NUM(DATADIR_PRESENT, 84), + DATA_MAKE_NUM(DATADIR_PRESENT, 85), + DATA_MAKE_NUM(DATADIR_PRESENT, 86), + DATA_MAKE_NUM(DATADIR_PRESENT, 87), + DATA_MAKE_NUM(DATADIR_PRESENT, 88), + DATA_MAKE_NUM(DATADIR_PRESENT, 89), + DATA_MAKE_NUM(DATADIR_PRESENT, 90), + DATA_MAKE_NUM(DATADIR_PRESENT, 91), + DATA_MAKE_NUM(DATADIR_PRESENT, 92), + DATA_MAKE_NUM(DATADIR_PRESENT, 93), + DATA_MAKE_NUM(DATADIR_PRESENT, 94), + DATA_MAKE_NUM(DATADIR_PRESENT, 95), + DATA_MAKE_NUM(DATADIR_PRESENT, 96), + DATA_MAKE_NUM(DATADIR_PRESENT, 97), + DATA_MAKE_NUM(DATADIR_PRESENT, 98), + DATA_MAKE_NUM(DATADIR_PRESENT, 99), + DATA_MAKE_NUM(DATADIR_PRESENT, 100), + DATA_MAKE_NUM(DATADIR_PRESENT, 101), + DATA_MAKE_NUM(DATADIR_PRESENT, 102), + DATA_MAKE_NUM(DATADIR_PRESENT, 103), + DATA_MAKE_NUM(DATADIR_PRESENT, 104), + DATA_MAKE_NUM(DATADIR_PRESENT, 105), + DATA_MAKE_NUM(DATADIR_PRESENT, 106), + DATA_MAKE_NUM(DATADIR_PRESENT, 109), + DATA_MAKE_NUM(DATADIR_PRESENT, 111), + DATA_MAKE_NUM(DATADIR_PRESENT, 113), + DATA_MAKE_NUM(DATADIR_PRESENT, 115), + DATA_MAKE_NUM(DATADIR_PRESENT, 117), + DATA_MAKE_NUM(DATADIR_PRESENT, 119), + DATA_MAKE_NUM(DATADIR_PRESENT, 121), + DATA_MAKE_NUM(DATADIR_PRESENT, 123), + DATA_MAKE_NUM(DATADIR_PRESENT, 125), + DATA_MAKE_NUM(DATADIR_PRESENT, 110), + DATA_MAKE_NUM(DATADIR_PRESENT, 112), + DATA_MAKE_NUM(DATADIR_PRESENT, 114), + DATA_MAKE_NUM(DATADIR_PRESENT, 116), + DATA_MAKE_NUM(DATADIR_PRESENT, 118), + DATA_MAKE_NUM(DATADIR_PRESENT, 120), + DATA_MAKE_NUM(DATADIR_PRESENT, 122), + DATA_MAKE_NUM(DATADIR_PRESENT, 124), + DATA_MAKE_NUM(DATADIR_PRESENT, 127), + DATA_MAKE_NUM(DATADIR_PRESENT, 128), + DATA_MAKE_NUM(DATADIR_PRESENT, 129), + DATA_MAKE_NUM(DATADIR_PRESENT, 130), + DATA_MAKE_NUM(DATADIR_PRESENT, 131), + DATA_MAKE_NUM(DATADIR_PRESENT, 132), + DATA_MAKE_NUM(DATADIR_PRESENT, 133), + DATA_MAKE_NUM(DATADIR_PRESENT, 134), +}; + +static const RoomData roomTbl[10] = { { 0x00000006, { @@ -200,389 +352,400 @@ static const UnkPresentNestedOuterStruct lbl_1_rodata_2B8[] = { }, }; -omObjData *fn_1_1458(void) +omObjData *PresentCreate(void) { - s32 var_r30; - s32 var_r28; - s16 var_r27; - LightData *var_r26; - - omObjData *var_r29 = omAddObjEx(lbl_1_bss_4, 1003, 0, 0, 1, NULL); - UnkPresentStruct2 *var_r31 = HuMemDirectMallocNum(HEAP_SYSTEM, 868, MEMORY_DEFAULT_NUM); - var_r29->data = var_r31; - var_r31->unk_234 = 0; - var_r31->unk_238 = 0; - var_r31->unk_23C = 0.0f; - var_r31->unk_248 = 1.0f; - var_r31->unk_250 = 0.0f; - - for (var_r30 = 0; var_r30 < 60; var_r30++) { - var_r31->unk_270[var_r30] = GWGameStat.present[var_r30]; + s32 i; + s32 j; + s16 light; + LightData *lightData; + + omObjData *object = omAddObjEx(presentObjMan, 1003, 0, 0, 1, NULL); + PresentWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(PresentWork), MEMORY_DEFAULT_NUM); + object->data = work; + work->room = 0; + work->idxInRoom = 0; + work->rot = 0.0f; + work->timeRot = 1.0f; + work->rotSpeed = 0.0f; + + for (i = 0; i < PRESENT_MAX; i++) { + work->presentUnlockedF[i] = GWGameStat.present[i]; } - for (var_r30 = 0; var_r30 < 59; var_r30++) { - if (!var_r31->unk_270[var_r30]) { + for (i = 0; i < PRESENT_MAX - 1; i++) { + if (!work->presentUnlockedF[i]) { break; } } - if (var_r30 == 59) { - var_r31->unk_270[59] = 1; + if (i == PRESENT_MAX - 1) { + work->presentUnlockedF[PRESENT_MAX - 1] = TRUE; } Hu3DLighInit(); - var_r27 = Hu3DGLightCreateV(&lbl_1_data_50.unk_00, &lbl_1_data_50.unk_0C, &lbl_1_data_50.unk_18); - Hu3DGLightInfinitytSet(var_r27); - Hu3DGLightStaticSet(var_r27, 1); - var_r26 = &Hu3DGlobalLight[var_r27]; - var_r26->unk_00 = var_r26->unk_00 | 0x8000; - - for (var_r30 = 0; var_r30 < 134; var_r30++) { - var_r31->unk_10[var_r30] = omAddObjEx(lbl_1_bss_4, 1003, 1, 0, 1, NULL); - var_r31->unk_10[var_r30]->model[0] = Hu3DModelCreate(HuDataSelHeapReadNum(lbl_1_rodata_A0[var_r30], MEMORY_DEFAULT_NUM, HEAP_DATA)); - Hu3DModelLayerSet(var_r31->unk_10[var_r30]->model[0], 0); - Hu3DModelAttrSet(var_r31->unk_10[var_r30]->model[0], 1); + light = Hu3DGLightCreateV(&lightTbl.src, &lightTbl.dest, &lightTbl.color); + Hu3DGLightInfinitytSet(light); + Hu3DGLightStaticSet(light, 1); + lightData = &Hu3DGlobalLight[light]; + lightData->unk_00 |= 0x8000; + + for (i = 0; i < PRESENT_MDL_MAX; i++) { + work->object[i] = omAddObjEx(presentObjMan, 1003, 1, 0, 1, NULL); + work->object[i]->model[0] = Hu3DModelCreateFile(presentMdlTbl[i]); + Hu3DModelLayerSet(work->object[i]->model[0], 0); + Hu3DModelAttrSet(work->object[i]->model[0], 1); } - for (var_r28 = 0; var_r28 < 8; var_r28++) { - for (var_r30 = 0; var_r30 < 6; var_r30++) { - Hu3DModelLayerSet(var_r31->unk_10[var_r30 + 2 + var_r28 * 6 * 2]->model[0], 1); + for (j = 0; j < 8; j++) { + for (i = 0; i < 6; i++) { + Hu3DModelLayerSet(work->object[i + 2 + j * 6 * 2]->model[0], 1); } } - Hu3DModelShadowMapSet(var_r31->unk_10[0]->model[0]); - fn_1_2924(var_r29); - var_r31->sprite = espEntry(7209095, 0, 0); - espDispOff(var_r31->sprite); - var_r31->unk_228 = fn_1_3EA4(0); - var_r31->unk_22C = fn_1_3EA4(1); - fn_1_2708(var_r29, var_r31->unk_234 * 36.0f, 1); - fn_1_2774(var_r29); - fn_1_180C(var_r29, 0); - - (void)var_r27; - return var_r29; + Hu3DModelShadowMapSet(work->object[0]->model[0]); + ShowHidePresents(object); + work->cursor = espEntry(DATA_MAKE_NUM(DATADIR_PRESENT, 135), 0, 0); + espDispOff(work->cursor); + work->presentDescWindow = PresentWinCreate(0); + work->btnLegendWindow = PresentWinCreate(1); + SetCameraRot(object, work->room * 36.0f, 1); + RotateCamera(object); + PresentExecModeSet(object, PRESENT_MODE_NONE); + + (void)light; + return object; } -void fn_1_1784(omObjData *object) +void PresentKill(omObjData *object) { - s32 var_r30; + s32 i; - UnkPresentStruct2 *var_r31 = object->data; - fn_1_4040(var_r31->unk_228); - fn_1_4040(var_r31->unk_22C); + PresentWork *work = object->data; + PresentWinKill(work->presentDescWindow); + PresentWinKill(work->btnLegendWindow); - for (var_r30 = 0; var_r30 < 134; var_r30++) { - Hu3DModelKill(var_r31->unk_10[var_r30]->model[0]); + for (i = 0; i < PRESENT_MDL_MAX; i++) { + Hu3DModelKill(work->object[i]->model[0]); } - espKill(var_r31->sprite); - HuMemDirectFree(var_r31); + espKill(work->cursor); + HuMemDirectFree(work); } -void fn_1_180C(omObjData *object, s32 arg1) +void PresentExecModeSet(omObjData *object, s32 execMode) { - UnkPresentStruct2 *var_r31 = object->data; + PresentWork *work = object->data; - var_r31->unk_0C = arg1; - object->func = lbl_1_data_6C[arg1]; + work->execMode = execMode; + object->func = execModeTbl[execMode]; object->unk10 = 0; object->unk10 = 0; } -s32 fn_1_1850(omObjData *object) +s32 PresentExecModeGet(omObjData *object) { - UnkPresentStruct2 *var_r31 = object->data; - return var_r31->unk_0C; + PresentWork *work = object->data; + return work->execMode; } -static const s32 lbl_1_rodata_9D8[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; -static const s32 lbl_1_rodata_9F8[] = { 0, 1, 2, 3, 4, 0, 5, 6, 7, 0 }; +static const s32 roomIdxTbl[NUM_CHARACTERS] = { + ROOM_MARIO, + ROOM_LUIGI, + ROOM_PEACH, + ROOM_YOSHI, + ROOM_WARIO, + ROOM_DK, + ROOM_DAISY, + ROOM_WALUIGI, +}; -void fn_1_186C(omObjData *object, s32 arg1) +void PresentSelectedIDSet(omObjData *object, s32 id) { - UnkPresentStruct2 *var_r31 = object->data; + PresentWork *work = object->data; - if (arg1 < 48) { - var_r31->unk_234 = lbl_1_rodata_9D8[arg1 / 6]; - var_r31->unk_238 = arg1 % 6; + if (id < 48) { + work->room = roomIdxTbl[id / PRESENT_COUNT_CHAR_ROOM]; + work->idxInRoom = id % PRESENT_COUNT_CHAR_ROOM; return; } - if (arg1 < 59) { - var_r31->unk_234 = 9; - var_r31->unk_238 = (arg1 - 48) % 11; + if (id < 59) { + work->room = ROOM_MG; + work->idxInRoom = (id - 48) % PRESENT_COUNT_MG_ROOM; return; } - var_r31->unk_234 = 5; - var_r31->unk_238 = 0; + work->room = ROOM_TROPHY; + work->idxInRoom = 0; } -static void fn_1_1928(omObjData *object) +static const s32 roomMessTbl[] = { 0, 1, 2, 3, 4, 0, 5, 6, 7, 0 }; + +static void ExecSelectRoom(omObjData *object) { - Vec sp8; - s32 var_r29; + Vec cursorPos; + s32 mess; - UnkPresentStruct2 *var_r31 = object->data; + PresentWork *work = object->data; switch (object->unk10) { case 0: - var_r31->unk_00 = 0; - var_r31->unk_08 = 0; + work->cursorVisibleF = FALSE; + work->constellationSelF = FALSE; object->unk10 = 1; case 1: - if (var_r31->unk_08) { - fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); - fn_1_9A4(lbl_1_bss_8, 0.0f, 420.0f, -600.0f, 30); + if (work->constellationSelF) { + PresentCameraTargetSet(presentCamera, 0.0f, 220.0f, 250.0f, 30); + PresentCameraFocusSet(presentCamera, 0.0f, 420.0f, -600.0f, 30); } else { - fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, 250.0f, 30); - fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); + PresentCameraTargetSet(presentCamera, 0.0f, 220.0f, 250.0f, 30); + PresentCameraFocusSet(presentCamera, 0.0f, 0.0f, -600.0f, 30); } object->unk10 = 2; case 2: - if (!fn_1_B6C(lbl_1_bss_8) && !var_r31->unk_228->unk_20 && !fn_1_28F0(object)) { - fn_1_4080(var_r31->unk_228); - fn_1_4080(var_r31->unk_22C); - if (var_r31->unk_08) { - var_r29 = 0x320080; + if (!PresentCameraDoneCheck(presentCamera) && !work->presentDescWindow->state && !CameraRotationDoneCheck(object)) { + PresentWinAnimIn(work->presentDescWindow); + PresentWinAnimIn(work->btnLegendWindow); + if (work->constellationSelF) { + mess = 0x320080; } - else if (var_r31->unk_234 == 5) { - var_r29 = 0x320085; + else if (work->room == ROOM_TROPHY) { + mess = 0x320085; } else { - var_r29 = 0x32007e; + mess = 0x32007e; } - fn_1_40B0(var_r31->unk_22C, var_r29); - switch (var_r31->unk_234) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 6: - case 7: - case 8: - if (var_r31->unk_08) { - if (fn_1_2B84(object, var_r31->unk_234, 5)) { - var_r29 = 0x320005; + PresentWinMesSet(work->btnLegendWindow, mess); + switch (work->room) { + case ROOM_MARIO: + case ROOM_LUIGI: + case ROOM_PEACH: + case ROOM_YOSHI: + case ROOM_WARIO: + case ROOM_DK: + case ROOM_DAISY: + case ROOM_WALUIGI: + if (work->constellationSelF) { + if (PresentUnlocked(object, work->room, ROOM_TROPHY)) { + mess = 0x320005; } else { - var_r29 = 0x320082; + mess = 0x320082; } } - else if (fn_1_2BCC(object, var_r31->unk_234) > 0) { - var_r29 = 0x320001; + else if (UnlockedPresents(object, work->room) > 0) { + mess = 0x320001; } else { - var_r29 = 0x320081; + mess = 0x320081; } - fn_1_40B0(var_r31->unk_228, var_r29); - fn_1_4104(var_r31->unk_228, lbl_1_rodata_9F8[var_r31->unk_234], 0); + PresentWinMesSet(work->presentDescWindow, mess); + PresentWinInsertMesSet(work->presentDescWindow, roomMessTbl[work->room], 0); break; - case 5: - if (fn_1_2B84(object, 5, 0)) { - var_r29 = 0x320041; + case ROOM_TROPHY: + if (PresentUnlocked(object, ROOM_TROPHY, 0)) { + mess = 0x320041; } else { - var_r29 = 0x320084; + mess = 0x320084; } - fn_1_40B0(var_r31->unk_228, var_r29); + PresentWinMesSet(work->presentDescWindow, mess); break; - case 9: - if (fn_1_2BCC(object, 9) > 0) { - var_r29 = 0x320083; + case ROOM_MG: + if (UnlockedPresents(object, ROOM_MG) > 0) { + mess = 0x320083; } else { - var_r29 = 0x320081; + mess = 0x320081; } - fn_1_40B0(var_r31->unk_228, var_r29); + PresentWinMesSet(work->presentDescWindow, mess); break; default: break; } - if (var_r31->unk_08) { - sp8.x = 0.0f; - sp8.y = 600.0f; - sp8.z = -500.0f; + if (work->constellationSelF) { + cursorPos.x = 0.0f; + cursorPos.y = 600.0f; + cursorPos.z = -500.0f; } else { - sp8.x = 0.0f; - sp8.y = 210.0f; - sp8.z = -500.0f; + cursorPos.x = 0.0f; + cursorPos.y = 210.0f; + cursorPos.z = -500.0f; } - Hu3D3Dto2D(&sp8, 1, &sp8); - sp8.y -= 15.0f; - sp8.x -= 20.0f; - espPosSet(var_r31->sprite, sp8.x, sp8.y); - if (!var_r31->unk_00) { - fn_1_144(var_r31->sprite, 1, 5); - var_r31->unk_00 = 1; + Hu3D3Dto2D(&cursorPos, 1, &cursorPos); + cursorPos.y -= 15.0f; + cursorPos.x -= 20.0f; + espPosSet(work->cursor, cursorPos.x, cursorPos.y); + if (!work->cursorVisibleF) { + PresentFadeSprite(work->cursor, TRUE, 5); + work->cursorVisibleF = TRUE; } object->unk10 = 3; } break; case 3: - if (!var_r31->unk_228->unk_20) { - if (fn_1_550(512) && !var_r31->unk_08) { - fn_1_144(var_r31->sprite, 0, 5); - var_r31->unk_00 = 0; - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); + if (!work->presentDescWindow->state) { + if (PresentPadCheck(PAD_BUTTON_B) && !work->constellationSelF) { + PresentFadeSprite(work->cursor, FALSE, 5); + work->cursorVisibleF = FALSE; + PresentWinAnimOut(work->presentDescWindow); + PresentWinAnimOut(work->btnLegendWindow); HuAudFXPlay(3); object->unk10 = 4; } - else if (fn_1_550(256) && !var_r31->unk_08) { - if (var_r31->unk_234 != 5) { - fn_1_144(var_r31->sprite, 0, 5); - var_r31->unk_00 = 0; - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); + else if (PresentPadCheck(PAD_BUTTON_A) && !work->constellationSelF) { + if (work->room != ROOM_TROPHY) { + PresentFadeSprite(work->cursor, FALSE, 5); + work->cursorVisibleF = FALSE; + PresentWinAnimOut(work->presentDescWindow); + PresentWinAnimOut(work->btnLegendWindow); HuAudFXPlay(2); - fn_1_180C(object, 2); + PresentExecModeSet(object, PRESENT_MODE_SELECT_PRESENT); } } - else if (fn_1_584(8) && !var_r31->unk_08) { - if ((var_r31->unk_234 != 5) && (var_r31->unk_234 != 9)) { - var_r31->unk_08 = 1; - fn_1_144(var_r31->sprite, 0, 5); - var_r31->unk_00 = 0; - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); + else if (PresentPadDStkRepCheck(PAD_BUTTON_UP) && !work->constellationSelF) { + if (work->room != ROOM_TROPHY && work->room != ROOM_MG) { + work->constellationSelF = TRUE; + PresentFadeSprite(work->cursor, FALSE, 5); + work->cursorVisibleF = FALSE; + PresentWinAnimOut(work->presentDescWindow); + PresentWinAnimOut(work->btnLegendWindow); HuAudFXPlay(0); object->unk10 = 1; } } - else if (fn_1_584(4) && var_r31->unk_08) { - var_r31->unk_08 = 0; - fn_1_144(var_r31->sprite, 0, 5); - var_r31->unk_00 = 0; - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); + else if (PresentPadDStkRepCheck(PAD_BUTTON_DOWN) && work->constellationSelF) { + work->constellationSelF = FALSE; + PresentFadeSprite(work->cursor, FALSE, 5); + work->cursorVisibleF = FALSE; + PresentWinAnimOut(work->presentDescWindow); + PresentWinAnimOut(work->btnLegendWindow); HuAudFXPlay(0); object->unk10 = 1; } - else if (fn_1_584(1)) { - fn_1_1FA8(object, 1); + else if (PresentPadDStkRepCheck(PAD_BUTTON_LEFT)) { + ChangeRoom(object, ROOM_CHANGE_LEFT); HuAudFXPlay(0); object->unk10 = 2; } - else if (fn_1_584(2)) { - fn_1_1FA8(object, 2); + else if (PresentPadDStkRepCheck(PAD_BUTTON_RIGHT)) { + ChangeRoom(object, ROOM_CHANGE_RIGHT); HuAudFXPlay(0); object->unk10 = 2; } } break; case 4: - fn_1_180C(object, 0); + PresentExecModeSet(object, PRESENT_MODE_NONE); break; } - fn_1_2774(object); + RotateCamera(object); } -static void fn_1_1FA8(omObjData *object, s32 arg1) +static void ChangeRoom(omObjData *object, s32 direction) { - float var_f31; - float var_f30; - float var_f29; + float rotAbs; + float rot; + float rotTarget; - s32 var_r30; - s32 var_r29; - s32 var_r28; + s32 special; + s32 change; + s32 duration; - UnkPresentStruct2 *var_r31 = object->data; + PresentWork *work = object->data; - for (var_r30 = 0, var_f31 = 0.0f;; var_r30++) { - var_f31 += 36.0f; - if (arg1 == 1) { - var_r29 = -1; + for (special = 0, rotAbs = 0.0f;; special++) { + rotAbs += 36.0f; + if (direction == ROOM_CHANGE_LEFT) { + change = -1; } else { - var_r29 = 1; + change = 1; } - var_r31->unk_234 = var_r31->unk_234 + var_r29; - if (var_r31->unk_234 < 0) { - var_r31->unk_234 = 9; + work->room += change; + if (work->room < ROOM_MARIO) { + work->room = ROOM_MAX; } - else if (var_r31->unk_234 >= 10) { - var_r31->unk_234 = 0; + else if (work->room >= ROOM_MAX + 1) { + work->room = ROOM_MARIO; } - if (!((var_r31->unk_08) && ((var_r31->unk_234 == 5) || (var_r31->unk_234 == 9)))) { + if (!work->constellationSelF || (work->room != ROOM_TROPHY && work->room != ROOM_MG)) { break; } } - if (arg1 == 1) { - var_f30 = -var_f31; + if (direction == ROOM_CHANGE_LEFT) { + rot = -rotAbs; } else { - var_f30 = var_f31; + rot = rotAbs; } - var_f29 = var_r31->unk_23C + var_f30; - if (!var_r30) { - var_r28 = 30; + rotTarget = work->rot + rot; + if (special == 0) { + duration = 30; } else { - var_r28 = 45; + duration = 45; } - fn_1_2708(object, var_f29, var_r28); + SetCameraRot(object, rotTarget, duration); } -static void fn_1_20E8(omObjData *object) +static void ExecSelectPresent(omObjData *object) { - float var_f31; - float var_f30; + float cursorX; + float cursorY; - UnkPresentStruct2 *var_r31 = object->data; - s32 var_r29 = var_r31->unk_238; - s32 var_r27 = var_r31->unk_234; + PresentWork *work = object->data; + s32 idxInRoom = work->idxInRoom; + s32 room = work->room; switch (object->unk10) { case 0: - fn_1_920(lbl_1_bss_8, 0.0f, 220.0f, -120.0f, 30); - fn_1_9A4(lbl_1_bss_8, 0.0f, 0.0f, -600.0f, 30); - var_r31->unk_04 = fn_1_2BCC(object, var_r27) > 0; - var_r31->unk_00 = 0; - var_r31->unk_238 = 0; - if (var_r31->unk_04) { - s32 var_r25 = fn_1_3394(var_r31->unk_234); - s32 var_r28; - for (var_r28 = 0; var_r28 < var_r25; var_r28++) { - if (fn_1_2B84(object, var_r27, var_r28)) { - var_r31->unk_238 = var_r28; + PresentCameraTargetSet(presentCamera, 0.0f, 220.0f, -120.0f, 30); + PresentCameraFocusSet(presentCamera, 0.0f, 0.0f, -600.0f, 30); + work->roomNotEmptyF = UnlockedPresents(object, room) > 0; + work->cursorVisibleF = FALSE; + work->idxInRoom = 0; + if (work->roomNotEmptyF) { + s32 totalPresents = TotalPresentsInRoom(work->room); + s32 i; + // set the initial present to the highest unlocked one + for (i = 0; i < totalPresents; i++) { + if (PresentUnlocked(object, room, i)) { + work->idxInRoom = i; break; } } } object->unk10 = 1; case 1: - if (fn_1_B6C(lbl_1_bss_8)) { + if (PresentCameraDoneCheck(presentCamera)) { break; } - fn_1_4080(var_r31->unk_228); - fn_1_4080(var_r31->unk_22C); - fn_1_40B0(var_r31->unk_22C, 0x32007F); + PresentWinAnimIn(work->presentDescWindow); + PresentWinAnimIn(work->btnLegendWindow); + PresentWinMesSet(work->btnLegendWindow, 0x32007F); - if (var_r31->unk_04) { - fn_1_40B0(var_r31->unk_228, lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_0C); + if (work->roomNotEmptyF) { + PresentWinMesSet(work->presentDescWindow, roomTbl[room].presentData[idxInRoom].descMess); } else { - fn_1_40B0(var_r31->unk_228, 0x320003); + PresentWinMesSet(work->presentDescWindow, 0x320003); } - var_r31->unk_258 = 0.0f; - var_r31->unk_25C = 5.0f / 30.0f; - if (var_r31->unk_04) { - Vec sp8; - fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r27].unk_04[var_r29].unk_00], &sp8.x, &sp8.y, &sp8.z); - Hu3D3Dto2D(&sp8, 1, &sp8); - sp8.y -= 15.0f; - sp8.x -= 20.0f; - if (!var_r31->unk_00) { - fn_1_144(var_r31->sprite, 1, 5); - var_r31->unk_00 = 1; - var_r31->unk_260 = sp8.x; - var_r31->unk_264 = sp8.y; + work->cursorTime = 0.0f; + work->cursorSpeed = 1.0f / 6.0f; + if (work->roomNotEmptyF) { + Vec cursorPos; + GetCursorPos(work->object[roomTbl[room].presentData[idxInRoom].cursorPosIdx], &cursorPos.x, &cursorPos.y, &cursorPos.z); + Hu3D3Dto2D(&cursorPos, 1, &cursorPos); + cursorPos.y -= 15.0f; + cursorPos.x -= 20.0f; + if (!work->cursorVisibleF) { + PresentFadeSprite(work->cursor, TRUE, 5); + work->cursorVisibleF = TRUE; + work->cursorPos.x = cursorPos.x; + work->cursorPos.y = cursorPos.y; } else { - var_r31->unk_260 = var_r31->unk_268; - var_r31->unk_264 = var_r31->unk_26C; + work->cursorPos.x = work->newCursorPos.x; + work->cursorPos.y = work->newCursorPos.y; } - var_r31->unk_268 = sp8.x; - var_r31->unk_26C = sp8.y; + work->newCursorPos.x = cursorPos.x; + work->newCursorPos.y = cursorPos.y; object->unk10 = 2; } else { @@ -590,241 +753,250 @@ static void fn_1_20E8(omObjData *object) break; } case 2: - var_f31 = var_r31->unk_260 + (var_r31->unk_258 * (var_r31->unk_268 - var_r31->unk_260)); - var_f30 = var_r31->unk_264 + (var_r31->unk_258 * (var_r31->unk_26C - var_r31->unk_264)); - espPosSet(var_r31->sprite, var_f31, var_f30); - if ((var_r31->unk_258 = var_r31->unk_258 + var_r31->unk_25C) < 1.0f) { + cursorX = work->cursorPos.x + (work->cursorTime * (work->newCursorPos.x - work->cursorPos.x)); + cursorY = work->cursorPos.y + (work->cursorTime * (work->newCursorPos.y - work->cursorPos.y)); + espPosSet(work->cursor, cursorX, cursorY); + if ((work->cursorTime += work->cursorSpeed) < 1.0f) { break; } - espPosSet(var_r31->sprite, var_r31->unk_268, var_r31->unk_26C); + espPosSet(work->cursor, work->newCursorPos.x, work->newCursorPos.y); object->unk10 = 3; case 3: - if (fn_1_550(512)) { - fn_1_4098(var_r31->unk_228); - fn_1_4098(var_r31->unk_22C); + if (PresentPadCheck(PAD_BUTTON_B)) { + PresentWinAnimOut(work->presentDescWindow); + PresentWinAnimOut(work->btnLegendWindow); HuAudFXPlay(3); object->unk10 = 4; } - else if (var_r31->unk_04) { - if (fn_1_584(1) && fn_1_5B8(8)) { - var_r29 = fn_1_2C5C(object, 5); + else if (work->roomNotEmptyF) { + if (PresentPadDStkRepCheck(PAD_BUTTON_LEFT) && PresentPadDStkCheck(PAD_BUTTON_UP)) { + idxInRoom = MoveCursor(object, 5); } - else if (fn_1_584(1) && fn_1_5B8(4)) { - var_r29 = fn_1_2C5C(object, 9); + else if (PresentPadDStkRepCheck(PAD_BUTTON_LEFT) && PresentPadDStkCheck(PAD_BUTTON_DOWN)) { + idxInRoom = MoveCursor(object, 9); } - else if (fn_1_584(2) && fn_1_5B8(8)) { - var_r29 = fn_1_2C5C(object, 6); + else if (PresentPadDStkRepCheck(PAD_BUTTON_RIGHT) && PresentPadDStkCheck(PAD_BUTTON_UP)) { + idxInRoom = MoveCursor(object, 6); } - else if (fn_1_584(2) && fn_1_5B8(4)) { - var_r29 = fn_1_2C5C(object, 10); + else if (PresentPadDStkRepCheck(PAD_BUTTON_RIGHT) && PresentPadDStkCheck(PAD_BUTTON_DOWN)) { + idxInRoom = MoveCursor(object, 10); } - else if (fn_1_584(1)) { - var_r29 = fn_1_2C5C(object, 1); + else if (PresentPadDStkRepCheck(PAD_BUTTON_LEFT)) { + idxInRoom = MoveCursor(object, 1); } - else if (fn_1_584(2)) { - var_r29 = fn_1_2C5C(object, 2); + else if (PresentPadDStkRepCheck(PAD_BUTTON_RIGHT)) { + idxInRoom = MoveCursor(object, 2); } - else if (fn_1_584(8)) { - var_r29 = fn_1_2C5C(object, 4); + else if (PresentPadDStkRepCheck(PAD_BUTTON_UP)) { + idxInRoom = MoveCursor(object, 4); } - else if (fn_1_584(4)) { - var_r29 = fn_1_2C5C(object, 8); + else if (PresentPadDStkRepCheck(PAD_BUTTON_DOWN)) { + idxInRoom = MoveCursor(object, 8); } } else { break; } - if (var_r29 == -1) { - var_r29 = var_r31->unk_238; + if (idxInRoom == -1) { + idxInRoom = work->idxInRoom; } - if (var_r29 != var_r31->unk_238) { - var_r31->unk_238 = var_r29; + if (idxInRoom != work->idxInRoom) { + work->idxInRoom = idxInRoom; object->unk10 = 1; HuAudFXPlay(0); } break; case 4: - if (var_r31->unk_00) { - fn_1_144(var_r31->sprite, 0, 5); + if (work->cursorVisibleF) { + PresentFadeSprite(work->cursor, FALSE, 5); } - fn_1_180C(object, 1); + PresentExecModeSet(object, PRESENT_MODE_SELECT_ROOM); break; default: break; } } -static void fn_1_268C(omObjData *object, float *arg1, float *arg2, float *arg3) +static void GetCursorPos(omObjData *object, float *x, float *y, float *z) { Mtx sp8; Hu3DModelObjMtxGet(object->model[0], "cursor", sp8); - *arg1 = sp8[0][3]; - *arg2 = sp8[1][3]; - *arg3 = sp8[2][3]; + *x = sp8[0][3]; + *y = sp8[1][3]; + *z = sp8[2][3]; } -static void fn_1_2708(omObjData *arg0, float arg8, s32 arg1) +static void SetCameraRot(omObjData *object, float rot, s32 duration) { - UnkPresentStruct2 *var_r31 = arg0->data; + PresentWork *work = object->data; - var_r31->unk_244 = arg8; - var_r31->unk_240 = var_r31->unk_23C; - var_r31->unk_248 = 0.0f; - var_r31->unk_250 = 1.0f / arg1; + work->rotTarget = rot; + work->rotPrev = work->rot; + work->timeRot = 0.0f; + work->rotSpeed = 1.0f / duration; } -static void fn_1_2774 (omObjData *object) +static void RotateCamera(omObjData *object) { - s32 var_r30; - UnkPresentStruct2 *var_r31 = object->data; + s32 i; + PresentWork *work = object->data; - if (var_r31->unk_248 < 1.0f) { - float var_f31 = sin(90.0f * var_r31->unk_248 * M_PI / 180.0f); - var_f31 *= var_f31; - var_r31->unk_23C = var_r31->unk_240 + (var_f31 * (var_r31->unk_244 - var_r31->unk_240)); + if (work->timeRot < 1.0f) { + float weight = sind(90.0f * work->timeRot); + weight *= weight; + work->rot = work->rotPrev + (weight * (work->rotTarget - work->rotPrev)); - if ((var_r31->unk_248 = var_r31->unk_248 + var_r31->unk_250) >= 1.0f) { - var_r31->unk_23C = var_r31->unk_244; + if ((work->timeRot += work->rotSpeed) >= 1.0f) { + work->rot = work->rotTarget; } } - var_r31->unk_23C = fmod(var_r31->unk_23C, 360.0); + work->rot = fmod(work->rot, 360.0); - if (var_r31->unk_23C < 0.0f) { - var_r31->unk_23C += 360.0f; + if (work->rot < 0.0f) { + work->rot += 360.0f; } - for (var_r30 = 0; var_r30 < 134; var_r30++) { - omSetRot(var_r31->unk_10[var_r30], 0.0f, var_r31->unk_23C, 0.0f); + for (i = 0; i < PRESENT_MDL_MAX; i++) { + omSetRot(work->object[i], 0.0f, work->rot, 0.0f); } } -static s32 fn_1_28F0 (omObjData *object) +static BOOL CameraRotationDoneCheck(omObjData *object) { - UnkPresentStruct2 *var_r31 = object->data; - return var_r31->unk_248 < 1.0f; + PresentWork *work = object->data; + return work->timeRot < 1.0f; } -s32 lbl_1_data_84[] = { 0, 1, 2, 3, 4, 6, 7, 8 }; +s32 roomIdxTbl2[NUM_CHARACTERS] = { + ROOM_MARIO, + ROOM_LUIGI, + ROOM_PEACH, + ROOM_YOSHI, + ROOM_WARIO, + ROOM_DK, + ROOM_DAISY, + ROOM_WALUIGI, +}; -static void fn_1_2924(omObjData *object) +static void ShowHidePresents(omObjData *object) { - UnkPresentStruct2 *var_r31 = object->data; - s32 var_r30; - s32 var_r29; + PresentWork *work = object->data; + s32 character; + s32 i; - Hu3DModelAttrReset(var_r31->unk_10[0]->model[0], 1); + Hu3DModelAttrReset(work->object[0]->model[0], 1); - for (var_r29 = 0; var_r29 < 8; var_r29++) { - s32 var_r27; - if (fn_1_2BCC(object, lbl_1_data_84[var_r29]) > 0) { - Hu3DModelAttrReset(var_r31->unk_10[var_r29 + 109]->model[0], 1); + for (character = 0; character < NUM_CHARACTERS; character++) { + s32 j; + if (UnlockedPresents(object, roomIdxTbl2[character]) > 0) { + Hu3DModelAttrReset(work->object[character + 109]->model[0], 1); } - for (var_r27 = 0, var_r30 = 0; var_r30 < 6; var_r30++) { - if (fn_1_2B84(object, lbl_1_data_84[var_r29], var_r30)) { - Hu3DModelAttrReset(var_r31->unk_10[var_r29 * 6 * 2 + 2 + var_r30]->model[0], 1); - Hu3DModelAttrReset(var_r31->unk_10[var_r29 * 6 * 2 + 8 + var_r30]->model[0], 1); - var_r27++; + for (j = 0, i = 0; i < PRESENT_COUNT_CHAR_ROOM; i++) { + if (PresentUnlocked(object, roomIdxTbl2[character], i)) { + Hu3DModelAttrReset(work->object[character * PRESENT_COUNT_CHAR_ROOM * 2 + 2 + i]->model[0], 1); + Hu3DModelAttrReset(work->object[character * PRESENT_COUNT_CHAR_ROOM * 2 + 8 + i]->model[0], 1); + j++; } } - if (var_r27 >= 6) { - Hu3DModelAttrReset(var_r31->unk_10[var_r29 + 118]->model[0], 1); + if (j >= 6) { + Hu3DModelAttrReset(work->object[character + 118]->model[0], 1); } } - if (fn_1_2BCC(object, 9) > 0) { - Hu3DModelAttrReset(var_r31->unk_10[117]->model[0], 1); + if (UnlockedPresents(object, ROOM_MG) > 0) { + Hu3DModelAttrReset(work->object[117]->model[0], 1); } - for (var_r30 = 0; var_r30 < 11; var_r30++) { - if (fn_1_2B84(object, 9, var_r30)) { - Hu3DModelAttrReset(var_r31->unk_10[var_r30 + 98]->model[0], 1); + for (i = 0; i < PRESENT_COUNT_MG_ROOM; i++) { + if (PresentUnlocked(object, ROOM_MG, i)) { + Hu3DModelAttrReset(work->object[i + 98]->model[0], 1); } } - if (fn_1_2B84(object, 5, 0)) { - Hu3DModelAttrReset(var_r31->unk_10[1]->model[0], 1); + if (PresentUnlocked(object, ROOM_TROPHY, 0)) { + Hu3DModelAttrReset(work->object[1]->model[0], 1); } - for (var_r30 = 0; var_r30 < 8; var_r30++) { - if (fn_1_2B84(object, lbl_1_data_84[var_r30], 5)) { - Hu3DModelAttrReset(var_r31->unk_10[var_r30 + 126]->model[0], 1); + for (i = 0; i < NUM_CHARACTERS; i++) { + if (PresentUnlocked(object, roomIdxTbl2[i], PRESENT_CONSTELLATION)) { + Hu3DModelAttrReset(work->object[i + 126]->model[0], 1); } } } -static const s32 lbl_1_rodata_A74[] = { 0, 6, 12, 18, 24, 59, 30, 36, 42, 48 }; +static const s32 roomPresentOffsetTbl[] = { 0, 6, 12, 18, 24, 59, 30, 36, 42, 48 }; -static s32 fn_1_2B84(omObjData *arg0, s32 arg1, s32 arg2) +static BOOL PresentUnlocked(omObjData *object, s32 room, s32 present) { - UnkPresentStruct2 *var_r31 = arg0->data; - return var_r31->unk_270[arg2 + lbl_1_rodata_A74[arg1]] != 0; + PresentWork *work = object->data; + return work->presentUnlockedF[roomPresentOffsetTbl[room] + present] != 0; } -static s32 fn_1_2BCC(omObjData *object, s32 arg1) +static s32 UnlockedPresents(omObjData *object, s32 room) { - s32 var_r31; - s32 var_r30; - s32 var_r28 = fn_1_3394(arg1); + s32 i; + s32 unlockedPresents; + s32 presentCount = TotalPresentsInRoom(room); - for (var_r30 = 0, var_r31 = 0; var_r31 < var_r28; var_r31++) { - if (fn_1_2B84(object, arg1, var_r31)) { - var_r30++; + for (unlockedPresents = 0, i = 0; i < presentCount; i++) { + if (PresentUnlocked(object, room, i)) { + unlockedPresents++; } } - return var_r30; + return unlockedPresents; } -static s32 fn_1_2C5C(omObjData *object, s32 arg1) +/* Returns the index of the newly selected present inside the room */ +static s32 MoveCursor(omObjData *object, s32 arg1) { - UnkPresentStruct7 spA4[10]; - Vec sp38; + PresentDistanceStruct availablePresents[10]; + Vec cursorPos; - float var_f31; - float var_f30; + float angle; - UnkPresentStruct2 *var_r31 = object->data; - s32 var_r30; - s32 var_r28; - s32 var_r26; + PresentWork *work = object->data; + s32 present; + s32 i; + s32 j; s32 var_r23; - s32 var_r22 = fn_1_3394(var_r31->unk_234); - s32 var_r18 = fn_1_2BCC(object, var_r31->unk_234); + s32 totalPresents = TotalPresentsInRoom(work->room); + s32 unlockedPresents = UnlockedPresents(object, work->room); - if (var_r18 == 1) { - return var_r31->unk_238; + if (unlockedPresents == 1) { + return work->idxInRoom; } - fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r31->unk_238].unk_00], &sp38.x, &sp38.y, &sp38.z); - Hu3D3Dto2D(&sp38, 1, &sp38); - for (var_r28 = 0, var_r26 = 0; !var_r28 && (var_r26 < 1); var_r26++) { - for (var_r28 = 0, var_r30 = 0; var_r30 < var_r22; var_r30++) { - Vec sp2C; - float var_f29; - if (var_r30 == var_r31->unk_238) { + GetCursorPos(work->object[roomTbl[work->room].presentData[work->idxInRoom].cursorPosIdx], &cursorPos.x, &cursorPos.y, &cursorPos.z); + Hu3D3Dto2D(&cursorPos, 1, &cursorPos); + for (i = 0, j = 0; i == 0 && j < 1; j++) { + for (i = 0, present = 0; present < totalPresents; present++) { + Vec cursorPosNew; + float dx, dy; + if (present == work->idxInRoom) { continue; } - if (!fn_1_2B84(object, var_r31->unk_234, var_r30)) { + if (!PresentUnlocked(object, work->room, present)) { continue; } - fn_1_268C(var_r31->unk_10[lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r30].unk_00], &sp2C.x, &sp2C.y, &sp2C.z); - Hu3D3Dto2D(&sp2C, 1, &sp2C); - var_f30 = sp38.x - sp2C.x; - var_f29 = sp38.y - sp2C.y; - var_f31 = fmod(atan2d(var_f30, var_f29), 360.0); - if (var_f31 < 0.0f) { - var_f31 += 360.0f; + GetCursorPos(work->object[roomTbl[work->room].presentData[present].cursorPosIdx], &cursorPosNew.x, &cursorPosNew.y, &cursorPosNew.z); + Hu3D3Dto2D(&cursorPosNew, 1, &cursorPosNew); + dx = cursorPos.x - cursorPosNew.x; + dy = cursorPos.y - cursorPosNew.y; + angle = fmod(atan2d(dx, dy), 360.0); + if (angle < 0.0f) { + angle += 360.0f; } - if ((arg1 == 1 && var_f31 >= 45.0f && var_f31 < 135.0f) || (arg1 == 2 && var_f31 >= 225.0f && var_f31 < 315.0f) - || (arg1 == 8 && var_f31 >= 135.0f && var_f31 < 225.0f) - || (arg1 == 4 && (var_f31 >= 0.0f && var_f31 < 45.0f || var_f31 >= 315.0f && var_f31 < 360.0f)) - || (arg1 == 5 && var_f31 >= 0.0f && var_f31 < 90.0f) || (arg1 == 9 && var_f31 >= 90.0f && var_f31 < 180.0f) - || (arg1 == 6 && var_f31 >= 270.0f && var_f31 < 360.0f) || (arg1 == 10 && var_f31 >= 180.0f && var_f31 < 270.0f)) { - spA4[var_r28].unk_00 = var_r30; - spA4[var_r28].unk_04 = sqrtf(var_f30 * var_f30 + var_f29 * var_f29); - var_r28++; + if ((arg1 == 1 && angle >= 45.0f && angle < 135.0f) || (arg1 == 2 && angle >= 225.0f && angle < 315.0f) + || (arg1 == 8 && angle >= 135.0f && angle < 225.0f) + || (arg1 == 4 && (angle >= 0.0f && angle < 45.0f || angle >= 315.0f && angle < 360.0f)) + || (arg1 == 5 && angle >= 0.0f && angle < 90.0f) || (arg1 == 9 && angle >= 90.0f && angle < 180.0f) + || (arg1 == 6 && angle >= 270.0f && angle < 360.0f) || (arg1 == 10 && angle >= 180.0f && angle < 270.0f)) { + availablePresents[i].present = present; + availablePresents[i].distance = sqrtf(dx * dx + dy * dy); + i++; } } - if (var_r28) { + if (i != 0) { continue; } switch (arg1) { @@ -862,85 +1034,85 @@ static s32 fn_1_2C5C(omObjData *object, s32 arg1) break; } } - if (!var_r28) { - return var_r31->unk_238; + if (i == 0) { + return work->idxInRoom; } do { - for (var_r23 = 0, var_r30 = 0; var_r30 < (var_r28 - 1); var_r30++) { - if (spA4[var_r30].unk_04 > spA4[var_r30 + 1].unk_04) { - UnkPresentStruct7 sp24 = spA4[var_r30 + 1]; - spA4[var_r30 + 1] = spA4[var_r30]; - spA4[var_r30] = sp24; + for (var_r23 = 0, present = 0; present < (i - 1); present++) { + if (availablePresents[present].distance > availablePresents[present + 1].distance) { + PresentDistanceStruct next = availablePresents[present + 1]; + availablePresents[present + 1] = availablePresents[present]; + availablePresents[present] = next; var_r23 = 1; } } } while (var_r23); - return spA4[(var_r26 <= 1) ? 0 : var_r28 - 1].unk_00; + return availablePresents[(j <= 1) ? 0 : i - 1].present; } -static const s32 lbl_1_rodata_AC8[] = { 6, 6, 6, 6, 6, 1, 6, 6, 6, 11 }; +static const s32 totalPresentCntTbl[10] = { 6, 6, 6, 6, 6, 1, 6, 6, 6, 11 }; -static s32 fn_1_3394(s32 arg0) +static s32 TotalPresentsInRoom(s32 room) { - return lbl_1_rodata_AC8[arg0]; + return totalPresentCntTbl[room]; } -static const s32 lbl_1_rodata_AF0[] = { 2, 14, 26, 38, 50, 0, 62, 74, 86, 0 }; -static const s32 lbl_1_rodata_B18[] = { 8, 20, 32, 44, 56, 0, 68, 80, 92, 0 }; -static const s32 lbl_1_rodata_B40[] = { 126, 127, 128, 129, 130, 0, 131, 132, 133, 0 }; -static const s32 lbl_1_rodata_B68[] = { 118, 119, 120, 121, 122, 0, 123, 124, 125, 0 }; +static const s32 presentItemIdxTbl[10] = { 2, 14, 26, 38, 50, 0, 62, 74, 86, 0 }; +static const s32 lbl_1_rodata_B18[10] = { 8, 20, 32, 44, 56, 0, 68, 80, 92, 0 }; +static const s32 constellationIdxTbl[10] = { 126, 127, 128, 129, 130, 0, 131, 132, 133, 0 }; +static const s32 roofIdxTbl[10] = { 118, 119, 120, 121, 122, 0, 123, 124, 125, 0 }; -static void fn_1_33AC(omObjData *object) +static void ExecPresentGet(omObjData *object) { - f32 var_f31; - f32 var_f29; + f32 weight; + f32 rot; - UnkPresentStruct2 *var_r31 = object->data; + PresentWork *work = object->data; switch (object->unk10) { case 0: - var_f29 = 36.0f * var_r31->unk_234; - fn_1_2708(object, var_f29, 1); - fn_1_2774(object); - Hu3DModelAttrSet(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1); - Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B68[var_r31->unk_234]]->model[0], 1); - Hu3DModelAttrSet(var_r31->unk_10[lbl_1_rodata_B40[var_r31->unk_234]]->model[0], 1); - var_r31->unk_24C = 0.0f; - var_r31->unk_254 = 1.0f / 360.0f; + rot = 36.0f * work->room; + SetCameraRot(object, rot, 1); + RotateCamera(object); + Hu3DModelAttrSet(work->object[work->idxInRoom + lbl_1_rodata_B18[work->room]]->model[0], 1); + Hu3DModelAttrSet(work->object[roofIdxTbl[work->room]]->model[0], 1); + Hu3DModelAttrSet(work->object[constellationIdxTbl[work->room]]->model[0], 1); + work->presentFallingTime = 0.0f; + work->presentFallingSpeed = 1.0f / 360.0f; object->unk10 = 1; case 1: WipeCreate(WIPE_MODE_IN, WIPE_TYPE_NORMAL, 120); object->unk10 = 2; case 2: - var_f31 = sind(90.0f * var_r31->unk_24C); - var_f31 *= var_f31; - fn_1_920(lbl_1_bss_8, 0.0f, 820.0f - (600.0f * var_f31), -120.0f, 1); - fn_1_9A4(lbl_1_bss_8, 0.0f, 680.0f - (680.0f * var_f31), -600.0f, 1); - omSetTra(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_AF0[var_r31->unk_234]], 0.0f, 840.0f - (840.0f * var_f31), 0.0f); - if ((var_r31->unk_24C = var_r31->unk_24C + var_r31->unk_254) < 1.0f) { + weight = sind(90.0f * work->presentFallingTime); + weight *= weight; + PresentCameraTargetSet(presentCamera, 0.0f, 820.0f - (600.0f * weight), -120.0f, 1); + PresentCameraFocusSet(presentCamera, 0.0f, 680.0f - (680.0f * weight), -600.0f, 1); + omSetTra(work->object[work->idxInRoom + presentItemIdxTbl[work->room]], 0.0f, 840.0f - (840.0f * weight), 0.0f); + if ((work->presentFallingTime += work->presentFallingSpeed) < 1.0f) { return; } - if (fn_1_393C(var_r31->unk_234, var_r31->unk_238)) { - fn_1_334(var_r31->unk_10[var_r31->unk_238 + lbl_1_rodata_B18[var_r31->unk_234]]->model[0], 1, 0.4f, 30); + if (fn_1_393C(work->room, work->idxInRoom)) { + FadeSpriteWithMultiplier(work->object[work->idxInRoom + lbl_1_rodata_B18[work->room]]->model[0], 1, 0.4f, 30); } object->unk10 = 3; case 3: - fn_1_4080(var_r31->unk_228); - fn_1_4104(var_r31->unk_228, lbl_1_rodata_2B8[var_r31->unk_234].unk_04[var_r31->unk_238].unk08, 0); - fn_1_40B0(var_r31->unk_228, 0x320004); - fn_1_419C(var_r31->unk_228); + PresentWinAnimIn(work->presentDescWindow); + PresentWinInsertMesSet(work->presentDescWindow, roomTbl[work->room].presentData[work->idxInRoom].nameMess, 0); + PresentWinMesSet(work->presentDescWindow, 0x320004); + PresentWinMesWait(work->presentDescWindow); object->unk10 = 4; case 4: - if (var_r31->unk_228->unk_20) { + if (work->presentDescWindow->state) { break; } object->unk10 = 5; case 5: - fn_1_4098(var_r31->unk_228); + PresentWinAnimOut(work->presentDescWindow); object->unk10 = 6; case 6: - if (!var_r31->unk_228->unk_20) { - fn_1_180C(object, 0); + if (!work->presentDescWindow->state) { + PresentExecModeSet(object, PRESENT_MODE_NONE); } break; } From f2de6f74661ac6ccd0e83733f94e332e0bc2d1e7 Mon Sep 17 00:00:00 2001 From: kabiskac Date: Sun, 4 Aug 2024 18:41:54 +0200 Subject: [PATCH 7/7] Fix optionDll inconsistencies --- include/REL/option.h | 2 +- src/REL/option/camera.c | 37 +++++++++++-------------------------- src/REL/option/guide.c | 17 +++++++---------- src/REL/option/state.c | 16 ++++++++++------ 4 files changed, 29 insertions(+), 43 deletions(-) diff --git a/include/REL/option.h b/include/REL/option.h index 3052b323..a4004a17 100755 --- a/include/REL/option.h +++ b/include/REL/option.h @@ -9,7 +9,7 @@ typedef struct { /* 0x00 */ Process *process; /* 0x04 */ s16 window; /* 0x08 */ s32 id; - /* 0x0C */ s32 visible; + /* 0x0C */ BOOL visible; /* 0x10 */ BOOL messWaitSignal; /* 0x14 */ BOOL choiceSignal; /* 0x18 */ u32 messToBeSet; diff --git a/src/REL/option/camera.c b/src/REL/option/camera.c index 99e2aa68..bd93317b 100755 --- a/src/REL/option/camera.c +++ b/src/REL/option/camera.c @@ -17,8 +17,8 @@ typedef struct { /* 0x2C */ Vec posPrev; /* 0x38 */ Vec targetPrev; /* 0x44 */ char unk44[0xC]; - /* 0x50 */ float prevZoom; - /* 0x54 */ float prevRot; + /* 0x50 */ float zoomPrev; + /* 0x54 */ float rotPrev; /* 0x58 */ Vec posTarget; /* 0x64 */ Vec posFocus; /* 0x70 */ char unk70[0xC]; @@ -34,8 +34,6 @@ typedef struct { static void ExecCameraObj(omObjData *object); static void ExecCamera(omObjData *object); -static void fn_1_12E4(omObjData *object); -static void PrintDebugInfo(omObjData *object); omObjData *optionCamera; @@ -45,11 +43,8 @@ static s32 pad_04_00000018_data = -1; omObjData *OptionCameraCreate(void) { - omObjData *object; - CameraWork *work; - - object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj); - work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM); + omObjData *object = omAddObjEx(optionObjMan, 1001, 0, 0, 3, ExecCameraObj); + CameraWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(CameraWork), MEMORY_DEFAULT_NUM); object->data = work; work->pos.x = 0.0f; work->pos.y = 0.0f; @@ -110,33 +105,26 @@ void OptionCameraViewSet(omObjData *object, float zoom, float rot, float y, s32 work->zoomTarget = zoom; work->rotTarget = rot; work->targetPrev.y = work->target.y; - work->prevZoom = work->zoom; - work->prevRot = work->rot; + work->zoomPrev = work->zoom; + work->rotPrev = work->rot; work->timeRot = 0.0f; work->rotSpeed = 1.0f / duration; } -// GetZoom float OptionCameraZoomGet(omObjData *object) { CameraWork *work = object->data; - float zoom; - - zoom = work->zoom; + float zoom = work->zoom; return zoom; } -// GetRot float OptionCameraRotGet(omObjData *object) { CameraWork *work = object->data; - float rot; - - rot = work->rot; + float rot = work->rot; return rot; } -// Getpos void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z) { CameraWork *temp_r31 = object->data; @@ -146,7 +134,6 @@ void OptionCameraPosGet(omObjData *object, float *x, float *y, float *z) *z = temp_r31->pos.z; } -// Gettarget void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z) { CameraWork *work = object->data; @@ -156,7 +143,6 @@ void OptionCameraTargetGet(omObjData *object, float *x, float *y, float *z) *z = work->target.z; } -// CameraDone s32 OptionCameraDoneCheck(omObjData *object) { CameraWork *work = object->data; @@ -205,8 +191,8 @@ static void ExecCamera(omObjData *object) if (work->timeRot < 1.0f) { weight = sind(90.0f * work->timeRot); work->target.y = work->targetPrev.y + weight * (work->posFocus.y - work->targetPrev.y); - work->zoom = work->prevZoom + weight * (work->zoomTarget - work->prevZoom); - work->rot = work->prevRot + weight * (work->rotTarget - work->prevRot); + work->zoom = work->zoomPrev + weight * (work->zoomTarget - work->zoomPrev); + work->rot = work->rotPrev + weight * (work->rotTarget - work->rotPrev); if ((work->timeRot += work->rotSpeed) >= 1.0f) { work->target.y = work->posFocus.y; work->zoom = work->zoomTarget; @@ -223,8 +209,7 @@ static void ExecCamera(omObjData *object) work->rot += 360.0f; } - Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x, - work->target.y, work->target.z); + Hu3DCameraPosSet(1, work->pos.x, work->pos.y, work->pos.z, work->up.x, work->up.y, work->up.z, work->target.x, work->target.y, work->target.z); } static void CameraExecDebug(omObjData *object) diff --git a/src/REL/option/guide.c b/src/REL/option/guide.c index 2487f72c..89865969 100755 --- a/src/REL/option/guide.c +++ b/src/REL/option/guide.c @@ -22,8 +22,8 @@ typedef struct { /* 0x48 */ char unk48[0xC]; /* 0x54 */ float time; /* 0x58 */ float speed; - /* 0x5C */ s32 unk5C; - /* 0x60 */ s32 unk60; + /* 0x5C */ s32 unk_5C; + /* 0x60 */ s32 unk_60; } GuideWork; // Size 0x64 #define MODE_DISABLED 0 @@ -70,8 +70,8 @@ omObjData *OptionGuideCreate(void) for (i = 0; i < 3; i++) { object->motion[i] = Hu3DJointMotion(object->model[0], HuDataSelHeapReadNum(guideMotTbl[i], MEMORY_DEFAULT_NUM, HEAP_DATA)); } - work->unk5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC); - work->unk60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC); + work->unk_5C = CharModelEffectNpcInit(object->model[0], object->motion[2], 1, 0xC); + work->unk_60 = CharModelEffectNpcInit(object->model[0], object->motion[1], 0, 0xC); CharModelLayerSetAll(1); Hu3DModelShadowSet(object->model[0]); Hu3DMotionShiftSet(object->model[0], object->motion[0], 0.0f, 8.0f, 0x40000001); @@ -186,9 +186,7 @@ static void ExecGuide(omObjData *object) static void UpdateGuide(omObjData *object) { GuideWork *work = object->data; - s16 motion; - - motion = 0; + s16 motion = 0; work->distRemain = sqrtf(work->posDelta.x * work->posDelta.x + work->posDelta.z * work->posDelta.z); if (0.001f <= work->distRemain) { if (14.0f <= work->distRemain) { @@ -219,9 +217,8 @@ static void UpdateGuide(omObjData *object) static float LerpAngle(float start, float end, float time) { float angle; - float delta; - - delta = fmod(end - start, 360.0); + + float delta = fmod(end - start, 360.0); if (0.0f > delta) { delta += 360.0f; } diff --git a/src/REL/option/state.c b/src/REL/option/state.c index 1ed1cb12..294e9c35 100755 --- a/src/REL/option/state.c +++ b/src/REL/option/state.c @@ -18,6 +18,12 @@ typedef struct { /* 0x18 */ GXColor color; } UnkLightDataStruct; /* size = 0x1C */ // TODO same as m446Dll::unkStruct10 and present::UnkPresentStruct3 +typedef struct UnkShadowDataStruct { + /* 0x00 */ Vec pos; + /* 0x0C */ Vec up; + /* 0x18 */ Vec target; +} UnkShadowDataStruct; /* size = 0x24 */ + static void ExecState(omObjData *object); omObjData *optionState; @@ -28,7 +34,7 @@ static UnkLightDataStruct lightTbl = { { 0xFF, 0xFF, 0xFF, 0xFF }, }; -static Vec shadowPosTbl[3] = { +static UnkShadowDataStruct shadowPosTbl = { { 0.0f, 3000.0f, 1.0f }, { 0.0f, 1.0f, 0.0f }, { 0.0f, 0.0f, 0.0f }, @@ -36,12 +42,10 @@ static Vec shadowPosTbl[3] = { omObjData *OptionStateCreate(void) { - omObjData *object; - StateWork *work; LightData *lightData; - object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState); - work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); + omObjData *object = omAddObjEx(optionObjMan, 1000, 0, 0, 4, ExecState); + StateWork *work = HuMemDirectMallocNum(HEAP_SYSTEM, sizeof(StateWork), MEMORY_DEFAULT_NUM); object->data = work; optionCamera = OptionCameraCreate(); optionRoom = OptionRoomCreate(); @@ -52,7 +56,7 @@ omObjData *OptionStateCreate(void) lightData = &Hu3DGlobalLight[work->light]; Hu3DShadowCreate(30.0f, 20.0f, 5000.0f); Hu3DShadowTPLvlSet(0.45f); - Hu3DShadowPosSet(&shadowPosTbl[0], &shadowPosTbl[1], &shadowPosTbl[2]); + Hu3DShadowPosSet(&shadowPosTbl.pos, &shadowPosTbl.up, &shadowPosTbl.target); return object; }