From 6bc4faa5f7e6bc5b3f8c67e71bd4a42e58d5afc8 Mon Sep 17 00:00:00 2001 From: YunataSavior <58997725+YunataSavior@users.noreply.github.com> Date: Fri, 18 Jul 2025 00:53:45 -0700 Subject: [PATCH] d_a_obj_brg matching (#2539) --- config/GZ2E01/rels/d_a_obj_brg/symbols.txt | 20 +- configure.py | 2 +- include/d/actor/d_a_obj_brg.h | 5 +- include/d/actor/d_a_player.h | 2 +- src/d/actor/d_a_obj_brg.cpp | 670 ++++++++------------- tools/utilities/greg_calc.py | 104 ++++ 6 files changed, 359 insertions(+), 444 deletions(-) create mode 100644 tools/utilities/greg_calc.py diff --git a/config/GZ2E01/rels/d_a_obj_brg/symbols.txt b/config/GZ2E01/rels/d_a_obj_brg/symbols.txt index 87975b2b717..24008d87950 100644 --- a/config/GZ2E01/rels/d_a_obj_brg/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_brg/symbols.txt @@ -3,9 +3,9 @@ _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x20 scope:global __register_global_object = .text:0x00000078; // type:function size:0x1C scope:global __destroy_global_chain = .text:0x00000094; // type:function size:0x58 scope:global -ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c = .text:0x000000EC; // type:function size:0x3F0 scope:global +ride_call_back__FP4dBgWP10fopAc_ac_cP10fopAc_ac_c = .text:0x000000EC; // type:function size:0x3F0 scope:local __dt__4cXyzFv = .text:0x000004DC; // type:function size:0x3C scope:global -daObj_Brg_Draw__FP13obj_brg_class = .text:0x00000518; // type:function size:0xA08 scope:global +daObj_Brg_Draw__FP13obj_brg_class = .text:0x00000518; // type:function size:0xA08 scope:local control1__FP13obj_brg_classP4br_s = .text:0x00000F20; // type:function size:0x324 scope:global control2__FP13obj_brg_classP4br_s = .text:0x00001244; // type:function size:0x1C4 scope:global control3__FP13obj_brg_classP4br_s = .text:0x00001408; // type:function size:0xC0 scope:global @@ -13,12 +13,12 @@ cut_control1__FP13obj_brg_classP4br_s = .text:0x000014C8; // type:function size: cut_control2__FP13obj_brg_classP4br_s = .text:0x000017E8; // type:function size:0x330 scope:global himo_cut_control1__FP13obj_brg_classP4cXyzf = .text:0x00001B18; // type:function size:0x240 scope:global obj_brg_move__FP13obj_brg_class = .text:0x00001D58; // type:function size:0xCA4 scope:global -daObj_Brg_Execute__FP13obj_brg_class = .text:0x000029FC; // type:function size:0x1618 scope:global -daObj_Brg_IsDelete__FP13obj_brg_class = .text:0x00004014; // type:function size:0x20 scope:global -daObj_Brg_Delete__FP13obj_brg_class = .text:0x00004034; // type:function size:0x5C scope:global +daObj_Brg_Execute__FP13obj_brg_class = .text:0x000029FC; // type:function size:0x1618 scope:local +daObj_Brg_IsDelete__FP13obj_brg_class = .text:0x00004014; // type:function size:0x20 scope:local +daObj_Brg_Delete__FP13obj_brg_class = .text:0x00004034; // type:function size:0x5C scope:local CreateInit__FP10fopAc_ac_c = .text:0x00004090; // type:function size:0x190 scope:global -CallbackCreateHeap__FP10fopAc_ac_c = .text:0x00004220; // type:function size:0x610 scope:global -daObj_Brg_Create__FP10fopAc_ac_c = .text:0x00004830; // type:function size:0xD24 scope:global +CallbackCreateHeap__FP10fopAc_ac_c = .text:0x00004220; // type:function size:0x610 scope:local +daObj_Brg_Create__FP10fopAc_ac_c = .text:0x00004830; // type:function size:0xD24 scope:local __dt__8dCcD_CylFv = .text:0x00005554; // type:function size:0xCC scope:global __ct__8dCcD_CylFv = .text:0x00005620; // type:function size:0x84 scope:global __dt__8cM3dGCylFv = .text:0x000056A4; // type:function size:0x48 scope:global @@ -173,10 +173,10 @@ obj_brg_bmd$5576 = .rodata:0x00000160; // type:object size:0xC scope:local @stringBase0 = .rodata:0x00000244; // type:object size:0x17 scope:local data:string_table l_color$4002 = .data:0x00000000; // type:object size:0x4 scope:local l_color$4042 = .data:0x00000004; // type:object size:0x4 scope:local -ita_z_p = .data:0x00000008; // type:object size:0x2C scope:global align:4 data:float +ita_z_p = .data:0x00000008; // type:object size:0x2C scope:local align:4 data:float himo_cyl_src$5532 = .data:0x00000034; // type:object size:0x44 scope:local wire_cyl_src$5533 = .data:0x00000078; // type:object size:0x44 scope:local -l_daObj_Brg_Method = .data:0x000000BC; // type:object size:0x20 scope:global +l_daObj_Brg_Method = .data:0x000000BC; // type:object size:0x20 scope:local g_profile_OBJ_BRG = .data:0x000000DC; // type:object size:0x30 scope:global __vt__8cM3dGAab = .data:0x0000010C; // type:object size:0xC scope:global __vt__8cM3dGCyl = .data:0x00000118; // type:object size:0xC scope:global @@ -199,7 +199,7 @@ __global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:globa @1012 = .bss:0x0000003C; // type:object size:0x1 scope:local @1010 = .bss:0x00000040; // type:object size:0x1 scope:local @1009 = .bss:0x00000044; // type:object size:0x1 scope:local -wy = .bss:0x00000046; // type:object size:0x2 scope:global data:2byte +wy = .bss:0x00000046; // type:object size:0x2 scope:local data:2byte @5786 = .bss:0x00000048; // type:object size:0xC scope:local @5789 = .bss:0x00000058; // type:object size:0xC scope:local @5790 = .bss:0x00000064; // type:object size:0xC scope:local diff --git a/configure.py b/configure.py index 20ef6be770c..1ef0aab01ac 100755 --- a/configure.py +++ b/configure.py @@ -1891,7 +1891,7 @@ config.libs = [ ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bmshutter"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bombf"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_boumato"), - ActorRel(NonMatching, "d_a_obj_brg"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_brg"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bsGate"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_bubblePilar"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_catdoor"), diff --git a/include/d/actor/d_a_obj_brg.h b/include/d/actor/d_a_obj_brg.h index 711a2a0fb3e..f92497a5039 100644 --- a/include/d/actor/d_a_obj_brg.h +++ b/include/d/actor/d_a_obj_brg.h @@ -89,8 +89,9 @@ public: /* 0xB1EE */ u8 field_0xB1EE[0xB1EF - 0xB1EE]; /* 0xB1EF */ s8 field_0xb1ef; /* 0xB1F0 */ s8 field_0xb1f0; - /* 0xB1F1 */ u8 field_0xb1f1; - /* 0xB1F2 */ u8 field_0xb1f2[0xb1f8 - 0xB1F2]; + /* 0xB1F1 */ s8 field_0xb1f1; + /* 0xB1F2 */ s8 field_0xb1f2[2]; + /* 0xB1F4 */ u8 field_0xb1f4[0xb1f8 - 0xB1F4]; }; STATIC_ASSERT(sizeof(obj_brg_class) == 0xb1f8); diff --git a/include/d/actor/d_a_player.h b/include/d/actor/d_a_player.h index 24255bf29ad..0da213cd2bf 100644 --- a/include/d/actor/d_a_player.h +++ b/include/d/actor/d_a_player.h @@ -757,7 +757,7 @@ public: virtual BOOL checkCutCharge() const { return FALSE; } virtual BOOL checkCutTurnCharge() const { return FALSE; } virtual BOOL checkCutLargeJumpCharge() const { return FALSE; } - virtual bool getBokoFlamePos(cXyz*) { return FALSE; } + virtual BOOL getBokoFlamePos(cXyz*) { return FALSE; } virtual BOOL checkComboCutTurn() const { return FALSE; } virtual BOOL checkClimbMove() const { return FALSE; } virtual BOOL checkGrassWhistle() const { return FALSE; } diff --git a/src/d/actor/d_a_obj_brg.cpp b/src/d/actor/d_a_obj_brg.cpp index f47dcb84f06..6b0cd65a069 100644 --- a/src/d/actor/d_a_obj_brg.cpp +++ b/src/d/actor/d_a_obj_brg.cpp @@ -105,9 +105,9 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { br_s* br_p = i_this->mBr; + f32 var_f32, var_f31, var_f30, var_f29, var_f28; for (int i = 0; i < i_this->field_0xb1ea; i++, br_p++) { g_env_light.setLightTevColorType_MAJI(br_p->mpBridgeModel, &a_this->tevStr); - dComIfGd_setListBG(); mDoExt_modelUpdateDL(br_p->mpBridgeModel); dComIfGd_setList(); @@ -135,8 +135,8 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp8C = br_p->field_0x074[0] - br_p->field_0x074[1]; sp98 = br_p->field_0x050[0] - br_p->field_0x050[1]; + cXyz *spF4, *spF8; if (!(i_this->mType & 1)) { - f32 var_f30; if (i_this->mType & 8) { var_f30 = 5.0f; } else { @@ -154,17 +154,16 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp100++; } } else { - cXyz* spF4 = br_p->field_0x014.getPos(0); - cXyz* spF8 = br_p->field_0x014.getPos(2); + spF4 = br_p->field_0x014.getPos(0); + spF8 = br_p->field_0x014.getPos(2); sp8C.x *= 0.25f; sp8C.y *= 0.25f; sp8C.z *= 0.25f; - f32 var_f29 = br_p->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 5); + var_f29 = br_p->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 5); for (int j = 0; j < 5; j++) { *spFC = var_f30; - f32 var_f31; if (j == 2) { var_f31 = 1.0f; @@ -207,17 +206,16 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp100++; } } else { - cXyz* spF4 = br_p->field_0x014.getPos(1); - cXyz* spF8 = br_p->field_0x014.getPos(3); + spF4 = br_p->field_0x014.getPos(1); + spF8 = br_p->field_0x014.getPos(3); sp98.x *= 0.25f; sp98.y *= 0.25f; sp98.z *= 0.25f; - f32 var_f29 = br_p->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 5); + var_f29 = br_p->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 5); for (int j = 0; j < 5; j++) { *spFC = var_f30; - f32 var_f31; if (j == 2) { var_f31 = 1.0f; @@ -338,7 +336,6 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { sp114->y = i_this->mEndPos.y + spB0.y; sp114->z = i_this->mEndPos.z + spB0.z; - f32 var_f28; if (i_this->mType & 8) { var_f28 = 10.0f; } else if (i_this->field_0xb1ed == 1) { @@ -357,97 +354,7 @@ static int daObj_Brg_Draw(obj_brg_class* i_this) { return 1; } -/* 80BC24E8-80BC24EC 000008 0001+03 1/1 0/0 0/0 .bss @1109 */ -static u8 lit_1109[1 + 3 /* padding */]; - -/* 80BC24EC-80BC24F0 00000C 0001+03 0/0 0/0 0/0 .bss @1107 */ -#pragma push -#pragma force_active on -static u8 lit_1107[1 + 3 /* padding */]; -#pragma pop - -/* 80BC24F0-80BC24F4 000010 0001+03 0/0 0/0 0/0 .bss @1105 */ -#pragma push -#pragma force_active on -static u8 lit_1105[1 + 3 /* padding */]; -#pragma pop - -/* 80BC24F4-80BC24F8 000014 0001+03 0/0 0/0 0/0 .bss @1104 */ -#pragma push -#pragma force_active on -static u8 lit_1104[1 + 3 /* padding */]; -#pragma pop - -/* 80BC24F8-80BC24FC 000018 0001+03 0/0 0/0 0/0 .bss @1099 */ -#pragma push -#pragma force_active on -static u8 lit_1099[1 + 3 /* padding */]; -#pragma pop - -/* 80BC24FC-80BC2500 00001C 0001+03 0/0 0/0 0/0 .bss @1097 */ -#pragma push -#pragma force_active on -static u8 lit_1097[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2500-80BC2504 000020 0001+03 0/0 0/0 0/0 .bss @1095 */ -#pragma push -#pragma force_active on -static u8 lit_1095[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2504-80BC2508 000024 0001+03 0/0 0/0 0/0 .bss @1094 */ -#pragma push -#pragma force_active on -static u8 lit_1094[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2508-80BC250C 000028 0001+03 0/0 0/0 0/0 .bss @1057 */ -#pragma push -#pragma force_active on -static u8 lit_1057[1 + 3 /* padding */]; -#pragma pop - -/* 80BC250C-80BC2510 00002C 0001+03 0/0 0/0 0/0 .bss @1055 */ -#pragma push -#pragma force_active on -static u8 lit_1055[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2510-80BC2514 000030 0001+03 0/0 0/0 0/0 .bss @1053 */ -#pragma push -#pragma force_active on -static u8 lit_1053[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2514-80BC2518 000034 0001+03 0/0 0/0 0/0 .bss @1052 */ -#pragma push -#pragma force_active on -static u8 lit_1052[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2518-80BC251C 000038 0001+03 0/0 0/0 0/0 .bss @1014 */ -#pragma push -#pragma force_active on -static u8 lit_1014[1 + 3 /* padding */]; -#pragma pop - -/* 80BC251C-80BC2520 00003C 0001+03 0/0 0/0 0/0 .bss @1012 */ -#pragma push -#pragma force_active on -static u8 lit_1012[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2520-80BC2524 000040 0001+03 0/0 0/0 0/0 .bss @1010 */ -#pragma push -#pragma force_active on -static u8 lit_1010[1 + 3 /* padding */]; -#pragma pop - -/* 80BC2524-80BC2528 -00001 0004+00 5/5 0/0 0/0 .bss None */ -/* 80BC2524 0001+01 data_80BC2524 @1009 */ - -static u8 struct_80BC2524[2]; +UNK_REL_BSS; /* 80BC2526 0002+00 data_80BC2526 wy */ static s16 wy; @@ -530,15 +437,16 @@ static void control2(obj_brg_class* i_this, br_s* i_part) { sp68.y = 0.0f; sp68.z = i_this->field_0xaedc * 50.0f; - for (int i = 0; i < i_this->field_0xb1ea - 1; i++, i_part--) { - f32 var_f28 = (i_part->field_0x0e8 * 0.5f) + (((i_part->field_0x0ec * i_part->field_0x0e0) * 0.5f) + i_part->field_0x0b0.y); - f32 var_f29 = var_f28 - i_part[1].field_0x0b0.y; - f32 var_f31 = i_part->field_0x0b0.x - i_part[1].field_0x0b0.x; - f32 var_f30 = i_part->field_0x0b0.z - i_part[1].field_0x0b0.z; + f32 x_var, atan_lhs, y_var, var_f28; + for (int i = 0; i < i_this->field_0xb1ea - 1; ++i, i_part--) { + var_f28 = (i_part->field_0x0e8 * 0.5f) + (i_part->field_0x0ec * i_part->field_0x0e0 * 0.5f + i_part->field_0x0b0.y); + atan_lhs = var_f28 - i_part[1].field_0x0b0.y; + x_var = i_part->field_0x0b0.x - i_part[1].field_0x0b0.x; + y_var = i_part->field_0x0b0.z - i_part[1].field_0x0b0.z; s16 spC6, spC8; - spC8 = (s16)cM_atan2s(var_f31, var_f30); - spC6 = -cM_atan2s(var_f29, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); + spC8 = (s16)cM_atan2s(x_var, y_var); + spC6 = -cM_atan2s(atan_lhs, JMAFastSqrt(x_var * x_var + y_var * y_var)); i_part[1].field_0x0d4.y = spC8; i_part[1].field_0x0d4.x = spC6; @@ -566,15 +474,15 @@ static void control3(obj_brg_class* i_this, br_s* i_part) { /* 80BBDCE8-80BBE008 0014C8 0320+00 1/1 0/0 0/0 .text cut_control1__FP13obj_brg_classP4br_s */ static void cut_control1(obj_brg_class* i_this, br_s* i_part) { + fopAc_ac_c* a_this = i_this; cXyz sp7C; cXyz sp88; - i_part++; + ++i_part; cXyz sp94; cMtx_YrotS(*calc_mtx, i_this->home.angle.y); - sp7C.x = 0.0f; sp7C.y = 0.0f; sp7C.z = 1.0f; @@ -582,38 +490,40 @@ static void cut_control1(obj_brg_class* i_this, br_s* i_part) { cXyz spA0(0.0f, 0.0f, 0.0f); - if (fopAcM_GetRoomNo(i_this) == 4 && !dComIfGp_event_runCheck()) { + if (fopAcM_GetRoomNo(a_this) == 4 && !dComIfGp_event_runCheck()) { cMtx_YrotS(*calc_mtx, wy); sp7C.x = 0.0f; sp7C.y = 0.0f; - sp7C.z = i_this->field_0xaf30 * ((cM_ssin(i_this->field_0xaf1e) * 0.1f) + (TREG_F(7) + 0.05f)); + sp7C.z = i_this->field_0xaf30 * ((cM_ssin((s16) i_this->field_0xaf1e) * 0.1f) + (TREG_F(7) + 0.05f)); MtxPosition(&sp7C, &spA0); - i_this->field_0xaef4 = i_this->field_0xaf30 * 3000.0f; + i_this->field_0xaef4 = (3000.0f + TREG_F(15)) * i_this->field_0xaf30; } sp7C.z = i_this->field_0xaedc * 50.0f; + f32 var_f31, var_f30, var_f29, var_f28; for (int i = 1; i < i_this->field_0xaed0; i++, i_part++) { - f32 var_f29 = i_part->field_0x0b0.y + i_part->field_0x0ec; + var_f29 = i_part->field_0x0b0.y + i_part->field_0x0ec; if (var_f29 < i_part->field_0x0dc + 30.0f) { var_f29 = i_part->field_0x0dc + 30.0f; i_part->field_0x707++; } - f32 var_f28 = var_f29 - i_part[-1].field_0x0b0.y; - f32 var_f31 = (sp94.x + (i_part->field_0x0b0.x - i_part[-1].field_0x0b0.x)) + (spA0.x * (f32)(i - 1)); - f32 var_f30 = (sp94.z + (i_part->field_0x0b0.z - i_part[-1].field_0x0b0.z)) + (spA0.z * (f32)(i - 1)); + var_f28 = var_f29 - i_part[-1].field_0x0b0.y; + var_f31 = (sp94.x + (i_part->field_0x0b0.x - i_part[-1].field_0x0b0.x)) + (spA0.x * (f32)(i - 1)); + var_f30 = (sp94.z + (i_part->field_0x0b0.z - i_part[-1].field_0x0b0.z)) + (spA0.z * (f32)(i - 1)); - s16 var_r26 = (s16)cM_atan2s(var_f31, var_f30); - s16 var_r27 = -cM_atan2s(var_f28, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); + s16 var_r27, var_r26; + var_r26 = (s16)cM_atan2s(var_f31, var_f30); + var_r27 = -cM_atan2s(var_f28, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); i_part[-1].field_0x0d4.y = var_r26 + 0x8000; i_part[-1].field_0x0d4.x = -var_r27; if (i == i_this->field_0xaed0 - 1) { i_part->field_0x0d4.y = var_r26 + 0x8000; - i_part->field_0x0d4.x = var_r27; + i_part->field_0x0d4.x = -var_r27; } cMtx_YrotS(*calc_mtx, var_r26); @@ -639,7 +549,7 @@ static void cut_control2(obj_brg_class* i_this, br_s* i_part) { sp7C.x = 0.0f; sp7C.y = 0.0f; - sp7C.z = 1.0f; + sp7C.z = -1.0f; MtxPosition(&sp7C, &sp94); cXyz spA0(0.0f, 0.0f, 0.0f); @@ -693,10 +603,10 @@ static void himo_cut_control1(obj_brg_class* i_this, cXyz* param_1, f32 param_2) cXyz sp74; cXyz sp80; cXyz sp8C; - + sp74.x = 0.0f; sp74.y = 0.0f; - sp74.z = i_this->field_0xaf30 * 3.0f; + sp74.z = i_this->field_0xaf30 * (3.0f + NREG_F(7)); cMtx_YrotS(*calc_mtx, wy); MtxPosition(&sp74, &sp8C); @@ -704,27 +614,29 @@ static void himo_cut_control1(obj_brg_class* i_this, cXyz* param_1, f32 param_2) sp74.y = 0.0f; sp74.z = param_2; - cXyz* var_r28 = param_1 + 1; - cXyz* temp_r27 = var_r28; + int i, temp_r27 = (int) ++param_1; + f32 var_f31, var_f30, var_f29, var_f28, var_f27; + for (i = 1; i < 5; i++, param_1++) { + var_f28 = i_this->field_0xaf30 * cM_ssin( (i_this->field_0xaf20 * 6000) + (NREG_S(3) - 10000) * (temp_r27 + i) ) + * (NREG_F(11) + 7.0f); + var_f27 = i_this->field_0xaf30 * cM_ssin( (i_this->field_0xaf20 * 6000) + (NREG_S(4) - 12000) * (temp_r27 + i) ) + * (NREG_F(11) + 7.0f); - for (int i = 1; i < 5; i++, var_r28++) { - f32 var_f28 = (i_this->field_0xaf30 * cM_ssin((i_this->field_0xaf20 * 6000) + ((NREG_S(3) - 10000) * ((int)temp_r27 + i))) ) * (NREG_F(11) + 7.0f); - f32 var_f27 = (i_this->field_0xaf30 * cM_ssin((i_this->field_0xaf20 * 6000) + ((NREG_S(4) - 12000) * ((int)temp_r27 + i))) ) * (NREG_F(11) + 7.0f); + var_f31 = var_f28 + (sp8C.x + (param_1->x - param_1[-1].x)); + var_f29 = (param_1->y - param_1[-1].y) - 10.0f; + var_f30 = var_f27 + (sp8C.z + (param_1->z - param_1[-1].z)); - f32 var_f31 = var_f28 + (sp8C.x + (var_r28->x - var_r28[-1].x)); - f32 var_f29 = (var_r28->y - var_r28[-1].y) - 10.0f; - f32 var_f30 = var_f27 + (sp8C.z + (var_r28->z - var_r28[-1].z)); - - s16 sp94 = (s16)cM_atan2s(var_f31, var_f30); - s16 sp92 = -cM_atan2s(var_f29, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); + s16 sp92, sp94; + sp94 = (s16)cM_atan2s(var_f31, var_f30); + sp92 = -cM_atan2s(var_f29, JMAFastSqrt(var_f31 * var_f31 + var_f30 * var_f30)); cMtx_YrotS(*calc_mtx, sp94); cMtx_XrotM(*calc_mtx, sp92); MtxPosition(&sp74, &sp80); - var_r28->x = var_r28[-1].x + sp80.x; - var_r28->y = var_r28[-1].y + sp80.y; - var_r28->z = var_r28[-1].z + sp80.z; + param_1->x = param_1[-1].x + sp80.x; + param_1->y = param_1[-1].y + sp80.y; + param_1->z = param_1[-1].z + sp80.z; } } @@ -747,51 +659,54 @@ static f32 ita_z_p[] = { static void obj_brg_move(obj_brg_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; fopAc_ac_c* player = dComIfGp_getPlayer(0); + daPy_py_c* ply_p = (daPy_py_c*) player; cXyz spD0; cXyz spDC; cXyz spE8; br_s* part = i_this->mBr; + s16 my_tgt; + int i, j; + f32 var_f31, var_f30, var_f29, var_f28, var_f27, var_f26, var_f25; switch (i_this->field_0xaf1c) { case 0: i_this->field_0xb1e9 = 0; i_this->field_0xaf1c = 2; /* fallthrough */ case 2: - for (int i = 0; i < i_this->field_0xb1ea; i++) { + for (i = 0; i < i_this->field_0xb1ea; i++) { if ((i_this->mType & 1) == 1) { i_this->mBr[i].field_0x0e0 = 1.0f; } else { - i_this->mBr[i].field_0x0e0 = fabsf(sinf((i / (i_this->field_0xb1ea - 1)) * M_PI)); + var_f27 = ( f32(i) / (i_this->field_0xb1ea - 1)) * M_PI; + i_this->mBr[i].field_0x0e0 = fabsf(sin(var_f27)); } - i_this->mBr[i].field_0x705 = 3; - i_this->mBr[i].field_0x704 = 3; + i_this->mBr[i].field_0x704 = i_this->mBr[i].field_0x705 = 3; } i_this->field_0xaf1c = 3; /* fallthrough */ - case 3: - i_this->field_0xaf1e += 3000; + case 3: { + i_this->field_0xaf1e += (s16) 3000; part->field_0x0b0 = a_this->home.pos; if ((i_this->mType & 1) == 1) { cMtx_YrotS(*calc_mtx, i_this->home.angle.y); - spD0.x = (i_this->field_0xaeec * cM_scos(i_this->field_0xaf22)) * -2.0f; - spD0.y = 0.0f; - spD0.z = 0.0f; + spD0.x = (i_this->field_0xaeec * cM_scos((s16) i_this->field_0xaf22)) * -2.0f; + spD0.y = spD0.z = 0.0f; MtxPosition(&spD0, &spDC); part->field_0x0b0 += spDC; } control1(i_this, part); - part[i_this->field_0xb1ea - 1].field_0x0b0 = i_this->mEndPos; + (*(part + i_this->field_0xb1ea - 1)).field_0x0b0 = i_this->mEndPos; if ((i_this->mType & 1) == 1) { - part[i_this->field_0xb1ea - 1].field_0x0b0 -= spDC; + (*(part + i_this->field_0xb1ea - 1)).field_0x0b0 -= spDC; } control2(i_this, part); @@ -801,26 +716,27 @@ static void obj_brg_move(obj_brg_class* i_this) { a_this->current.pos = part->field_0x0b0; a_this->current.angle = part->field_0x0d4; - for (int i = 0; i < i_this->field_0xb1ea; i++, part++) { + for (i = 0; i < i_this->field_0xb1ea; i++, part++) { part->field_0x0bc = part->field_0x0b0; - f32 var_f30 = ((f32)(i_this->field_0xb1ea - i) / (f32)i_this->field_0xb1ea) * 0.75f; + var_f30 = ((f32)(i_this->field_0xb1ea - i) / (f32)i_this->field_0xb1ea) * 0.75f; part->field_0x0bc.x += spE8.x * var_f30; part->field_0x0bc.y += spE8.y * var_f30; part->field_0x0bc.z += spE8.z * var_f30; if (part->field_0x706) { - for (int j = -5; j < 6; j++) { - if (i + j > -1 && i + j < i_this->field_0xb1ea) { - cLib_addCalcAngleS2(&part[j].field_0x0f4, (f32)part->field_0x0f2 * ita_z_p[j + 5] * part[j].field_0x0e0, 4, 0x800); + for (j = -5; j <= 5; j++) { + if (i + j >= 0 && i + j < i_this->field_0xb1ea) { + my_tgt = (f32)part->field_0x0f2 * ita_z_p[j + 5] * part[j].field_0x0e0; + cLib_addCalcAngleS2(&part[j].field_0x0f4, my_tgt, 4, 0x800); cLib_addCalc2(&part[j].field_0x0e8, part->field_0x0e4 * ita_z_p[j + 5], 1.0f, 10.0f); } } } if (part->field_0x708 & 4 && (part->field_0x708 & 3) != 3) { - f32 var_f31 = 0.0f; - f32 var_f29 = -80.0f; + var_f31 = 0.0f; + var_f29 = -80.0f; if ((part->field_0x708 & 3) == 1) { var_f31 = 7000.0f; @@ -830,13 +746,16 @@ static void obj_brg_move(obj_brg_class* i_this) { var_f29 = -30.0f; } - for (int j = -5; j < 6; j++) { - if (i + j > -1 && i + j < i_this->field_0xb1ea) { - cLib_addCalcAngleS2(&part[j].field_0x0f6, var_f31 * ita_z_p[j + 5] * part[j].field_0x0e0, 4, 0x800); - cLib_addCalc2(&part[j].field_0x0e8, var_f29 * ita_z_p[j + 5], 1.0f, 15.0f); + for (j = -5; j <= 5; j++) { + if (i + j < 0 || i + j >= i_this->field_0xb1ea) { + continue; } - if ((part->field_0x708 & 3) == 0 && (i_this->mType & 4) == 0 && j > -3 && j < 3 && part[j].field_0x706 != 0) { + my_tgt = var_f31 * ita_z_p[j + 5] * part[j].field_0x0e0; + cLib_addCalcAngleS2(&part[j].field_0x0f6, my_tgt, 4, 0x800); + cLib_addCalc2(&part[j].field_0x0e8, var_f29 * ita_z_p[j + 5], 1.0f, 15.0f); + + if ((part->field_0x708 & 3) == 0 && (i_this->mType & 4) == 0 && j >= -2 && j <= 2 && part[j].field_0x706 != 0) { if (dComIfGp_event_runCheck()) { i_this->field_0xaed4 = 0; } else { @@ -863,12 +782,12 @@ static void obj_brg_move(obj_brg_class* i_this) { } if ((part->field_0x708 & 4) != 0 && (part->field_0x0fe[0] != 0 || part->field_0x0fe[1] != 0)) { - f32 var_f26 = (f32)(part->field_0x0fe[0] | part->field_0x0fe[1]) * 150.0f; - f32 var_f31 = var_f26 * cM_ssin(i_this->field_0xaf26 * 4); - - for (int j = -5; j < 6; j++) { - if (i + j > -1 && i + j < i_this->field_0xb1ea) { - part[j].field_0x0f6 += (var_f31 * ita_z_p[j + 5]) * part[j].field_0x0e0; + var_f26 = (f32)(part->field_0x0fe[0] | part->field_0x0fe[1]) * 150.0f; + var_f31 = var_f26 * cM_ssin(i_this->field_0xaf1e * 4); + for (j = -5; j <= 5; j++) { + if (i + j >= 0 && i + j < i_this->field_0xb1ea) { + my_tgt = var_f31 * ita_z_p[j + 5] * part[j].field_0x0e0; + part[j].field_0x0f6 += my_tgt; } } } @@ -878,7 +797,7 @@ static void obj_brg_move(obj_brg_class* i_this) { } part->field_0x0f2 = 0; - part->field_0x0d4.y = part->field_0x0f4 + part->field_0x0f6; + part->field_0x0d4.z = part->field_0x0f4 + part->field_0x0f6; s16 sp138 = 0; if (i_this->field_0xb1ec) { @@ -907,12 +826,13 @@ static void obj_brg_move(obj_brg_class* i_this) { i_this->field_0xaf28 = 3000; i_this->field_0xaf26 = 1400; - f32 var_f28 = i_this->field_0xaf30 * 3.0f; + var_f28 = i_this->field_0xaf30 * 3.0f; cLib_addCalc2(&i_this->field_0xaee0, var_f28, 0.1f, 0.1f); cLib_addCalc2(&i_this->field_0xaee4, var_f28 * 0.3f, 0.1f, 0.05f); break; + } case 4: - for (int i = 0; i < i_this->field_0xb1ea; i++, part++) { + for (i = 0; i < i_this->field_0xb1ea; i++, part++) { part->field_0x0ec = 0.0f; } @@ -923,48 +843,51 @@ static void obj_brg_move(obj_brg_class* i_this) { mDoAud_seStart(JA_SE_OBJ_BREAK_WOOD_L, NULL, 0, 0); if (fopAcM_GetRoomNo(a_this) != 4) { - int sw = fopAcM_GetParam(a_this) >> 0x18; + int sw = (fopAcM_GetParam(a_this) & 0xFF000000) >> 0x18; if (sw != 0xFF) { dComIfGs_onSwitch(sw, fopAcM_GetRoomNo(a_this)); } } /* fallthrough */ case 5: - br_s* var_r24 = i_this->mBr; + part = i_this->mBr; if (i_this->field_0xaf2c != 0) { i_this->field_0xaf2c--; } i_this->field_0xaf1e += 4000; - var_r24->field_0x0b0 = a_this->home.pos; + part->field_0x0b0 = a_this->home.pos; - cut_control1(i_this, var_r24); - var_r24[i_this->field_0xb1ea - 1].field_0x0b0 = i_this->mEndPos; - cut_control2(i_this, var_r24); + cut_control1(i_this, part); + (*(part + i_this->field_0xb1ea - 1)).field_0x0b0 = i_this->mEndPos; + cut_control2(i_this, part); if (i_this->field_0xb1ed) { - u32 sp11C = (u32)(i_this->field_0xaf30 * 110.0f) - 10; - if (sp11C > 0x7F) { - sp11C = 0x7F; + var_f25 = i_this->field_0xaf30; + u32 dbg_0x24 = var_f25 * 110.0f; + dbg_0x24 -= 10; + if (dbg_0x24 > 0x7F) { + dbg_0x24 = 0x7F; } - Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &a_this->home.pos, sp11C, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); - Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &i_this->mEndPos, sp11C, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &a_this->home.pos, dbg_0x24, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStartLevel(Z2SE_OBJ_BROKENBRIDGE, &i_this->mEndPos, dbg_0x24, 0, 1.0f, 1.0f, -1.0f, -1.0f, 0); } - for (int i = 0; i < i_this->field_0xb1ea; i++, var_r24++) { - var_r24->field_0x0bc = var_r24->field_0x0b0; - cLib_addCalc2(&var_r24->field_0x0ec, -50.0f, 1.0f, 5.0f); - var_r24->field_0x0dc = -10000.0f; + for (i = 0; i < i_this->field_0xb1ea; i++, part++) { + part->field_0x0bc = part->field_0x0b0; + cLib_addCalc2(&part->field_0x0ec, -50.0f, 1.0f, 5.0f); + part->field_0x0dc = -10000.0f; - if (i_this->field_0xb1f1 == 0 || (i < i_this->field_0xaed0 && i_this->field_0xb1f1 == 2) || (i >= i_this->field_0xaed0 && i_this->field_0xb1f1 == 1)) { - cLib_addCalcAngleS2(&var_r24->field_0x0d4.z, i_this->field_0xaef4 * cM_ssin(i_this->field_0xaf2e + (i * 10000)), 4, 0x800); + if (i_this->field_0xb1f1 == 0 || (i < i_this->field_0xaed0 && i_this->field_0xb1f1 == 2) + || (i >= i_this->field_0xaed0 && i_this->field_0xb1f1 == 1)) { + cLib_addCalcAngleS2(&part->field_0x0d4.z, i_this->field_0xaef4 * cM_ssin(i_this->field_0xaf2e + (i * 10000)), 4, 0x800); } } cLib_addCalc0(&i_this->field_0xaef4, 0.05f, 80.0f); - i_this->field_0xaf2e += 4500; + i_this->field_0xaf2e += (s16) 4500; if (i_this->field_0xb1ec) { spDC = i_this->mEndPos; @@ -975,23 +898,23 @@ static void obj_brg_move(obj_brg_class* i_this) { spDC.y = 3200.0f; i_this->mCyl[1].SetC(spDC); - for (int i = 0; i < 2; i++) { - i_this->mCyl[i].SetR(60.0f); - dComIfG_Ccsp()->Set(&i_this->mCyl[i]); + for (int idx = 0; idx < 2; idx++) { + i_this->mCyl[idx].SetR(60.0f); + dComIfG_Ccsp()->Set(&i_this->mCyl[idx]); - if (i_this->field_0xb1f2[i] != 0) { - i_this->field_0xb1f2[i]--; + if (i_this->field_0xb1f2[idx] != 0) { + i_this->field_0xb1f2[idx]--; } - if (i_this->field_0xb1f2[i] == 0 && i_this->mCyl[i].ChkTgHit()) { - i_this->field_0xb1f2[i] = 10; - i_this->field_0xb1f1 = i + 1; + if (i_this->field_0xb1f2[idx] == 0 && i_this->mCyl[idx].ChkTgHit()) { + i_this->field_0xb1f2[idx] = 10; + i_this->field_0xb1f1 = idx + 1; dCcU_AtInfo spC4; - spC4.mpCollider = i_this->mCyl[i].GetTgHitObj(); + spC4.mpCollider = i_this->mCyl[idx].GetTgHitObj(); at_power_check(&spC4); - if (spC4.mAttackPower > 3) { + if (spC4.mAttackPower >= 3) { i_this->field_0xaef4 = 3000.0f; } else { i_this->field_0xaef4 = 1600.0f; @@ -1005,14 +928,15 @@ static void obj_brg_move(obj_brg_class* i_this) { /* 80BBF21C-80BC0834 0029FC 1618+00 2/1 0/0 0/0 .text daObj_Brg_Execute__FP13obj_brg_class */ static int daObj_Brg_Execute(obj_brg_class* i_this) { fopAc_ac_c* a_this = (fopAc_ac_c*)i_this; - daPy_py_c* player = (daPy_py_c*)dComIfGp_getPlayer(0); + fopAc_ac_c* ply = dComIfGp_getPlayer(0); + daPy_py_c* player = (daPy_py_c*) ply; cXyz spC4; cXyz spD0; cXyz spDC; cXyz spE8; - camera_class* camera = dComIfGp_getCamera(0); + camera_class* camera = (camera_class*) dComIfGp_getCamera(0); spC4 = a_this->current.pos - camera->lookat.eye; if (i_this->field_0xb1ef != 0) { @@ -1031,7 +955,8 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { if (spC4.abs() > sp1BC) { spD0 = camera->lookat.center - camera->lookat.eye; - cMtx_YrotS(*calc_mtx, -cM_atan2s(spD0.x, spD0.z)); + s16 atan_res = cM_atan2s(spD0.x, spD0.z); + cMtx_YrotS(*calc_mtx, -atan_res); MtxPosition(&spC4, &spD0); if (spD0.z < 0.0f) { @@ -1041,7 +966,6 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } i_this->field_0xb1f0 = 0; - cXyz spF4; cXyz sp100 = a_this->current.pos + ((i_this->mEndPos - a_this->current.pos) * 0.5f); @@ -1062,30 +986,34 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { i_this->field_0xaed8 = 0; br_s* part = i_this->mBr; - cXyz sp10C; bool var_r25 = 0; if (player->getBokoFlamePos(&sp10C)) { var_r25 = 1; } - f32 var_f26 = 0.0f; - f32 var_f29; + f32 var_f31, var_f30, var_f29, var_f28, var_f27, var_f26; + var_f26 = 0.0f; if (i_this->mType & 1) { var_f29 = 1000.0f; } else if (i_this->field_0xb1ed == 1) { - var_f29 = 250.0f; + var_f29 = 250.0f + WREG_F(12); } else if (i_this->field_0xb1ed == 2) { - var_f29 = 600.0f; + var_f29 = 600.0f + WREG_F(14); } else { var_f29 = 200.0f; } + var_f31 = 2.0f + TREG_F(17); + + f32 dbg_0x5c; for (int i = 0; i < i_this->field_0xb1ea; i++, part++) { if (i_this->field_0xb1ed == 2) { - var_f26 = -300.0f * sinf(((f32)i / (f32)(i_this->field_0xb1ea - 1)) * M_PI); + dbg_0x5c = f32(i) / f32(i_this->field_0xb1ea - 1) * M_PI; + var_f26 = (-300.0f + WREG_F(15)) * f32(sin(dbg_0x5c)); } else if (i_this->field_0xb1ed == 1) { - var_f26 = -100.0f * sinf(((f32)i / (f32)(i_this->field_0xb1ea - 1)) * M_PI); + dbg_0x5c = f32(i) / f32(i_this->field_0xb1ea - 1) * M_PI; + var_f26 = (-100.0f + WREG_F(13)) * f32(sin(dbg_0x5c)); } MtxTrans(part->field_0x0bc.x, part->field_0x0bc.y, part->field_0x0bc.z, 0); @@ -1095,7 +1023,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { if (i_this->field_0xaed0 != 0) { f32 sp1CC; - if (i_this->field_0xaed0 < i) { + if (i > i_this->field_0xaed0) { sp1CC = 30.0f; } else { sp1CC = -30.0f; @@ -1105,14 +1033,14 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } spC4.x = part->field_0x0c8.x * 99.0f; - spC4.y = 5.0f; + spC4.y = 5.0f + WREG_F(2); spC4.z = 0.0f; MtxPosition(&spC4, &part->field_0x074[1]); spC4.x *= -1.0f; MtxPosition(&spC4, &part->field_0x050[1]); - spC4.y = -30.0f; + spC4.y = -30.0f + TREG_F(4); MtxPosition(&spC4, &part->field_0x050[2]); spC4.x *= -1.0f; @@ -1140,25 +1068,25 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { MtxTrans(part->field_0x074[0].x, part->field_0x074[0].y, part->field_0x074[0].z, 0); cMtx_YrotM(*calc_mtx, a_this->current.angle.y); - MtxScale(2.0f, 2.0f, 2.0f, 1); + MtxScale(var_f31, var_f31, var_f31, 1); part->mpKnotModels[0]->setBaseTRMtx(*calc_mtx); MtxTrans(part->field_0x050[0].x, part->field_0x050[0].y, part->field_0x050[0].z, 0); cMtx_YrotM(*calc_mtx, a_this->current.angle.y); - MtxScale(2.0f, 2.0f, 2.0f, 1); + MtxScale(var_f31, var_f31, var_f31, 1); part->mpKnotModels[1]->setBaseTRMtx(*calc_mtx); MtxPull(); } - if (i > 0 && i < i_this->field_0xb1ea - 2) { - f32 var_f30 = (part[1].field_0x074[0].y + part[-1].field_0x074[0].y) * 0.5f; - if (var_f30 < part->field_0x074[0].y) { + if (i >= 1 && i <= i_this->field_0xb1ea - 2) { + var_f30 = (part[-1].field_0x074[0].y - part[1].field_0x074[0].y) * 0.5f + part[1].field_0x074[0].y; + if (part->field_0x074[0].y > var_f30) { part->field_0x074[0].y = var_f30; } - var_f30 = (part[1].field_0x050[0].y + part[-1].field_0x050[0].y) * 0.5f; - if (var_f30 < part->field_0x050[0].y) { + var_f30 = (part[-1].field_0x050[0].y - part[1].field_0x050[0].y) * 0.5f + part[1].field_0x050[0].y; + if (part->field_0x050[0].y > var_f30) { part->field_0x050[0].y = var_f30; } } @@ -1173,7 +1101,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { dCcU_AtInfo spB8; if (i_this->field_0xaed0 != 0) { - part->field_0x708 &= 0x1C; + part->field_0x708 &= (u8) 0x1C; } if (part->mCyl[0].ChkTgHit() && part->field_0x0fe[0] < 10) { @@ -1188,10 +1116,11 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } part->field_0x704 -= spB8.mAttackPower; - if (part->field_0x704 < 1) { - part->field_0x708 &= 0x1E; + if (part->field_0x704 <= 0) { + part->field_0x708 &= (u8) 0x1E; - Z2GetAudioMgr()->seStartLevel(Z2SE_HIT_ROPE_CUT, &part->field_0x074[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(Z2SE_HIT_ROPE_CUT, &part->field_0x074[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); if (fopAcM_GetRoomNo(a_this) == 4) { i_this->field_0xaf1c = 4; i_this->field_0xaed0 = 10; @@ -1211,17 +1140,16 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } part->field_0x705 -= spB8.mAttackPower; - if (part->field_0x705 < 1) { - part->field_0x708 &= 0x1D; + if (part->field_0x705 <= 0) { + part->field_0x708 &= (u8) 0x1D; - Z2GetAudioMgr()->seStartLevel(Z2SE_HIT_ROPE_CUT, &part->field_0x050[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(Z2SE_HIT_ROPE_CUT, &part->field_0x050[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); } } } else { cXyz sp118; - sp118.z = 2.0f; - sp118.y = 2.0f; - sp118.x = 2.0f; + sp118.x = sp118.y = sp118.z = 2.0f; if (part->mCyl[0].ChkTgHit() && part->field_0x0fe[0] < 10) { part->mCyl[0].OnTgNoConHit(); @@ -1232,7 +1160,8 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { part->field_0x0fe[0] = 15; } - Z2GetAudioMgr()->seStartLevel(JA_SE_CM_MAGBALL_BOUND, &part->field_0x074[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(JA_SE_CM_MAGBALL_BOUND, &part->field_0x074[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); } if (part->mCyl[1].ChkTgHit() && part->field_0x0fe[1] < 10) { @@ -1244,7 +1173,8 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { part->field_0x0fe[1] = 15; } - Z2GetAudioMgr()->seStartLevel(JA_SE_CM_MAGBALL_BOUND, &part->field_0x050[0], 0, dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); + Z2GetAudioMgr()->seStart(JA_SE_CM_MAGBALL_BOUND, &part->field_0x050[0], 0, + dComIfGp_getReverb(fopAcM_GetRoomNo(a_this)), 1.0f, 1.0f, -1.0f, -1.0f, 0); } } @@ -1269,7 +1199,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } if (part->field_0x0fa == 0) { - part->field_0x708 &= 0x1E; + part->field_0x708 &= (u8) 0x1E; } } else if (var_r25) { cXyz sp130; @@ -1307,7 +1237,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { } if (part->field_0x0fc == 0) { - part->field_0x708 &= 0x1D; + part->field_0x708 &= (u8) 0x1D; } } else if (var_r25) { cXyz sp13C; @@ -1336,47 +1266,45 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { cMtx_YrotM(*calc_mtx, part->field_0x0f0); - if (i_this->field_0xb1eb <= i) { - part->field_0x0c8.z = 0.0f; - part->field_0x0c8.y = 0.0f; - part->field_0x0c8.x = 0.0f; - + if (i >= i_this->field_0xb1eb) { + part->field_0x0c8.x = part->field_0x0c8.y = part->field_0x0c8.z = 0.0f; part->mpBridgeModel->setBaseScale(part->field_0x0c8); part->field_0x708 = 0; } - MtxTrans(0.0f, part->field_0x0c8.y * -3.0f, 0.0f, 1); + MtxTrans(0.0f, (-3.0f + oREG_F(9)) * part->field_0x0c8.y, 0.0f, 1); part->mpBridgeModel->setBaseTRMtx(*calc_mtx); if (!(i_this->mType & 4) && !(i_this->mType & 1) && (part->field_0x708 & 4)) { cXyz* sp1D4 = i_this->field_0xae90.getPos(0); cXyz* sp1D8 = i_this->field_0xae90.getPos(1); + cXyz *sp1DC, *sp1E0; int sp1E4 = i_this->field_0xaed8 + 1; cXyz sp148; spC4.x = 0.0f; spC4.y = 0.0f; + s16 dbg_0xa = (i_this->field_0xb1e9 * 1500); spC4.z = i_this->field_0xaf30; - spC4.z *= (cM_ssin((i_this->field_0xb1e9 * 1500) + (i_this->field_0xaf20 * 1400)) * 2.0f + 5.0f) * 0.15f; + spC4.z = spC4.z * (cM_ssin(dbg_0xa + (i_this->field_0xaf20 * 1400)) * 2.0f + 5.0f) * 0.15f; cMtx_YrotS(*calc_mtx, wy); MtxPosition(&spC4, &sp148); + f32 dbg_0x38; if (part->field_0x708 & 1) { sp1D4[sp1E4] = part->field_0x074[0]; } else { - cXyz sp154 = sp1D4[sp1E4 - 1] - sp1D4[sp1E4 + 1]; - f32 sp1E8 = (f32)part->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 6); + cXyz sp154 = *(sp1D4 + sp1E4 - 1) - *(sp1D4 + sp1E4 + 1); + dbg_0x38 = (f32)part->field_0x0fe[0] * cM_ssin(i_this->field_0xaf1e * 6); - sp1D4[sp1E4].x = sp148.x + sp154.x * 0.5f + sp1D4[sp1E4 + 1].x; - sp1D4[sp1E4].y = sp1E8 + sp154.y * 0.5f + sp1D4[sp1E4 + 1].y; - sp1D4[sp1E4].z = sp148.z + sp154.z * 0.5f + sp1D4[sp1E4 + 1].z; + sp1D4[sp1E4].x = sp154.x * 0.5f + (*(sp1D4 + sp1E4 + 1)).x + sp148.x; + sp1D4[sp1E4].y = sp154.y * 0.5f + (*(sp1D4 + sp1E4 + 1)).y + dbg_0x38 - 1.0f + AREG_F(0); + sp1D4[sp1E4].z = sp154.z * 0.5f + (*(sp1D4 + sp1E4 + 1)).z + sp148.z; - cXyz* sp1DC = part->field_0x014.getPos(0); - cXyz* sp1E0 = part->field_0x014.getPos(2); + sp1DC = part->field_0x014.getPos(0); + sp1E0 = part->field_0x014.getPos(2); - f32 var_f28; - f32 var_f27; if (part->field_0x708 & 0x10) { var_f28 = 0.0f; var_f27 = i_this->field_0xaedc * 25.0f; @@ -1395,18 +1323,16 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { if (part->field_0x708 & 2) { sp1D8[sp1E4] = part->field_0x050[0]; } else { - cXyz sp160 = sp1D8[sp1E4 - 1] - sp1D8[sp1E4 + 1]; - f32 sp1E8 = (f32)part->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 6); + cXyz sp160 = *(sp1D8 + sp1E4 - 1) - *(sp1D8 + sp1E4 + 1); + dbg_0x38 = (f32)part->field_0x0fe[1] * cM_ssin(i_this->field_0xaf1e * 6); - sp1D8[sp1E4].x = sp148.x + sp160.x * 0.5f + sp1D8[sp1E4 + 1].x; - sp1D8[sp1E4].y = sp1E8 + sp160.y * 0.5f + sp1D8[sp1E4 + 1].y; - sp1D8[sp1E4].z = sp148.z + sp160.z * 0.5f + sp1D8[sp1E4 + 1].z; + sp1D8[sp1E4].x = sp160.x * 0.5f + (*(sp1D8 + sp1E4 + 1)).x + sp148.x; + sp1D8[sp1E4].y = sp160.y * 0.5f + (*(sp1D8 + sp1E4 + 1)).y + dbg_0x38 - 1.0f + AREG_F(0); + sp1D8[sp1E4].z = sp160.z * 0.5f + (*(sp1D8 + sp1E4 + 1)).z + sp148.z; - cXyz* sp1DC = part->field_0x014.getPos(1); - cXyz* sp1E0 = part->field_0x014.getPos(3); + sp1DC = part->field_0x014.getPos(1); + sp1E0 = part->field_0x014.getPos(3); - f32 var_f28; - f32 var_f27; if (part->field_0x708 & 0x10) { var_f28 = 0.0f; var_f27 = i_this->field_0xaedc * 25.0f; @@ -1415,12 +1341,14 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { var_f28 = var_f27; } - *sp1DC = sp1D8[sp1E4]; + *sp1DC = *(sp1D8 + sp1E4); himo_cut_control1(i_this, sp1DC, var_f28); *sp1E0 = part->field_0x050[1]; himo_cut_control1(i_this, sp1E0, var_f27); } + + ++i_this->field_0xaed8; } } @@ -1428,32 +1356,35 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { Vec* vtx_tbl = (Vec*)i_this->mpBgW->GetVtxTbl(); + int dbg_0x30; + int temp; int sp1F8 = 0; for (int i = 0; i < i_this->mpBgW->GetVtxNum(); i++) { - int temp = i >> 2; + dbg_0x30 = i & 3; + temp = i >> 2; - if (i < i_this->field_0xb1eb) { - switch (i & 3) { + if (temp < i_this->field_0xb1eb) { + part = &i_this->mBr[temp]; + switch (dbg_0x30) { case 0: - vtx_tbl[i] = i_this->mBr[temp].field_0x074[2]; + vtx_tbl[i] = part->field_0x074[2]; break; case 1: - vtx_tbl[i] = i_this->mBr[temp].field_0x050[2]; + vtx_tbl[i] = part->field_0x050[2]; break; case 2: - vtx_tbl[i] = i_this->mBr[temp].field_0x074[1]; + vtx_tbl[i] = part->field_0x074[1]; break; case 3: - vtx_tbl[i] = i_this->mBr[temp].field_0x050[1]; + vtx_tbl[i] = part->field_0x050[1]; break; } if (temp == 0 || temp == i_this->field_0xb1eb - 1) { - cMtx_YrotS(*calc_mtx, i_this->mBr[temp].field_0x0d4.y); - cMtx_XrotM(*calc_mtx, i_this->mBr[temp].field_0x0d4.x); + cMtx_YrotS(*calc_mtx, part->field_0x0d4.y); + cMtx_XrotM(*calc_mtx, part->field_0x0d4.x); - spC4.y = 0.0f; - spC4.x = 0.0f; + spC4.x = spC4.y = 0.0f; if (temp == 0) { spC4.z = 50.0f; @@ -1473,7 +1404,7 @@ static int daObj_Brg_Execute(obj_brg_class* i_this) { vtx_tbl[i] = vtx_tbl[sp1F8]; } - if (i_this->field_0xaf1c > 3) { + if (i_this->field_0xaf1c >= 4) { vtx_tbl[i].y = 10000.0f; } } @@ -1718,158 +1649,33 @@ static int CallbackCreateHeap(fopAc_ac_c* i_this) { return 1; } -/* 80BC2528-80BC2538 000048 000C+04 0/1 0/0 0/0 .bss @5786 */ -#pragma push -#pragma force_active on -static u8 lit_5786[12 + 4 /* padding */]; -#pragma pop - -/* 80BC2538-80BC2544 000058 000C+00 0/1 0/0 0/0 .bss @5789 */ -#pragma push -#pragma force_active on -static u8 lit_5789[12]; -#pragma pop - -/* 80BC2544-80BC2550 000064 000C+00 0/1 0/0 0/0 .bss @5790 */ -#pragma push -#pragma force_active on -static u8 lit_5790[12]; -#pragma pop - -/* 80BC2550-80BC255C 000070 000C+00 0/1 0/0 0/0 .bss @5791 */ -#pragma push -#pragma force_active on -static u8 lit_5791[12]; -#pragma pop - -/* 80BC255C-80BC2568 00007C 000C+00 0/1 0/0 0/0 .bss @5792 */ -#pragma push -#pragma force_active on -static u8 lit_5792[12]; -#pragma pop - -/* 80BC2568-80BC2574 000088 000C+00 0/1 0/0 0/0 .bss @5793 */ -#pragma push -#pragma force_active on -static u8 lit_5793[12]; -#pragma pop - -/* 80BC2574-80BC2580 000094 000C+00 0/1 0/0 0/0 .bss @5794 */ -#pragma push -#pragma force_active on -static u8 lit_5794[12]; -#pragma pop - -/* 80BC2580-80BC258C 0000A0 000C+00 0/1 0/0 0/0 .bss @5795 */ -#pragma push -#pragma force_active on -static u8 lit_5795[12]; -#pragma pop - -/* 80BC258C-80BC2598 0000AC 000C+00 0/1 0/0 0/0 .bss @5796 */ -#pragma push -#pragma force_active on -static u8 lit_5796[12]; -#pragma pop - -/* 80BC2598-80BC25A4 0000B8 000C+00 0/1 0/0 0/0 .bss @5797 */ -#pragma push -#pragma force_active on -static u8 lit_5797[12]; -#pragma pop - -/* 80BC25A4-80BC25B0 0000C4 000C+00 0/1 0/0 0/0 .bss @5798 */ -#pragma push -#pragma force_active on -static u8 lit_5798[12]; -#pragma pop - -/* 80BC25B0-80BC25BC 0000D0 000C+00 0/1 0/0 0/0 .bss @5799 */ -#pragma push -#pragma force_active on -static u8 lit_5799[12]; -#pragma pop - -/* 80BC25BC-80BC25C8 0000DC 000C+00 0/1 0/0 0/0 .bss @5800 */ -#pragma push -#pragma force_active on -static u8 lit_5800[12]; -#pragma pop - -/* 80BC25C8-80BC25D4 0000E8 000C+00 0/1 0/0 0/0 .bss @5801 */ -#pragma push -#pragma force_active on -static u8 lit_5801[12]; -#pragma pop - -/* 80BC25D4-80BC25E0 0000F4 000C+00 0/1 0/0 0/0 .bss @5802 */ -#pragma push -#pragma force_active on -static u8 lit_5802[12]; -#pragma pop - -/* 80BC25E0-80BC25EC 000100 000C+00 0/1 0/0 0/0 .bss @5803 */ -#pragma push -#pragma force_active on -static u8 lit_5803[12]; -#pragma pop - -/* 80BC25EC-80BC25F8 00010C 000C+00 0/1 0/0 0/0 .bss @5804 */ -#pragma push -#pragma force_active on -static u8 lit_5804[12]; -#pragma pop - -/* 80BC25F8-80BC2604 000118 000C+00 0/1 0/0 0/0 .bss @5805 */ -#pragma push -#pragma force_active on -static u8 lit_5805[12]; -#pragma pop - -/* 80BC2604-80BC2610 000124 000C+00 0/1 0/0 0/0 .bss @5806 */ -#pragma push -#pragma force_active on -static u8 lit_5806[12]; -#pragma pop - -/* 80BC2610-80BC261C 000130 000C+00 0/1 0/0 0/0 .bss @5807 */ -#pragma push -#pragma force_active on -static u8 lit_5807[12]; -#pragma pop - -/* 80BC261C-80BC2628 00013C 000C+00 0/1 0/0 0/0 .bss @5808 */ -#pragma push -#pragma force_active on -static u8 lit_5808[12]; -#pragma pop - -/* 80BC2628-80BC2634 000148 000C+00 0/1 0/0 0/0 .bss @5809 */ -#pragma push -#pragma force_active on -static u8 lit_5809[12]; -#pragma pop - /* 80BC1050-80BC1D74 004830 0D24+00 1/0 0/0 0/0 .text daObj_Brg_Create__FP10fopAc_ac_c */ static int daObj_Brg_Create(fopAc_ac_c* i_this) { obj_brg_class* a_this = (obj_brg_class*)i_this; + int phase_state; + dPath* path; + dPnt* pnt; + int sp54; + br_s* part; + int loop, sp60, brno, iter; + int fop_id = fopAcM_GetID(i_this); fopAcM_SetupActor(i_this, obj_brg_class); - int phase_state = dComIfG_resLoad(&a_this->mPhase, "Obj_brg"); + phase_state = dComIfG_resLoad(&a_this->mPhase, "Obj_brg"); if (phase_state == cPhs_COMPLEATE_e) { a_this->mType = fopAcM_GetParam(i_this); a_this->mType = 0; - a_this->field_0xb1e9 = fopAcM_GetParam(i_this) >> 8; + a_this->field_0xb1e9 = (fopAcM_GetParam(i_this) & 0xFF00) >> 8; OS_REPORT("OBJ_BRG SET %x\n", fopAcM_GetParam(i_this)); - u8 path_id = fopAcM_GetParam(i_this) >> 0x10; + u8 path_id = (fopAcM_GetParam(i_this) & 0xFF0000) >> 0x10; a_this->field_0xaedc = 1.5f; if (strcmp(dComIfGp_getStartStageName(), "F_SP104") == 0) { a_this->mType = 8; a_this->field_0xb1ed = 2; - a_this->field_0xaedc *= 3.0f; + a_this->field_0xaedc *= (3.0f + NREG_F(12)); } if (path_id == 0xFF) { @@ -1889,22 +1695,23 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { i_this->home.pos.set(0.0f, 3285.0f, 3425.0f); a_this->mEndPos.set(0.0f, 3270.0f, 1095.0f); - a_this->field_0xaedc *= 1.5f; + a_this->field_0xaedc *= (1.5f + YREG_F(5)); a_this->field_0xb1ed = 1; } else { return cPhs_ERROR_e; } } } else { - dPath* path = dPath_GetRoomPath(path_id, fopAcM_GetRoomNo(i_this)); + path = dPath_GetRoomPath(path_id, fopAcM_GetRoomNo(i_this)); if (path != NULL) { - i_this->home.pos.x = path->m_points[0].m_position.x; - i_this->home.pos.y = path->m_points[0].m_position.y; - i_this->home.pos.z = path->m_points[0].m_position.z; + pnt = &path->m_points[0]; + i_this->home.pos.x = pnt->m_position.x; + i_this->home.pos.y = pnt->m_position.y; + i_this->home.pos.z = pnt->m_position.z; - a_this->mEndPos.x = path->m_points[1].m_position.x; - a_this->mEndPos.y = path->m_points[1].m_position.y; - a_this->mEndPos.z = path->m_points[1].m_position.z; + a_this->mEndPos.x = (pnt+1)->m_position.x; + a_this->mEndPos.y = (pnt+1)->m_position.y; + a_this->mEndPos.z = (pnt+1)->m_position.z; } else { OS_REPORT("NON PATH !!!!!!!!! %d!\n", path_id); return cPhs_ERROR_e; @@ -1912,7 +1719,7 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { } cXyz sp40 = a_this->mEndPos - i_this->home.pos; - i_this->home.angle.y = cM_atan2s(sp40.x, sp40.z); + i_this->home.angle.y = (s16) cM_atan2s(sp40.x, sp40.z); i_this->home.angle.x = -cM_atan2s(sp40.y, JMAFastSqrt(sp40.x * sp40.x + sp40.z * sp40.z)); f32 var_f31 = TREG_F(14) + 3.0f; @@ -1928,9 +1735,9 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { var_f31 = 0.0f; } - a_this->field_0xb1ea = (sp40.abs() / var_f31 + 47.0f) * a_this->field_0xaedc; + a_this->field_0xb1ea = sp40.abs() / ((var_f31 + 47.0f) * a_this->field_0xaedc); - if (a_this->field_0xb1ea > 24) { + if (a_this->field_0xb1ea >= 24) { OS_REPORT("TOO MANY BIRIDGE !!!! %d!\n", a_this->field_0xb1ea); return cPhs_ERROR_e; } @@ -1941,10 +1748,10 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { return cPhs_ERROR_e; } - CreateInit(a_this); + CreateInit(i_this); if (a_this->mpBgW != NULL) { - if (dComIfG_Bgsp().Regist(a_this->mpBgW, i_this)) { + if (dComIfG_Bgsp().Regist(a_this->mpBgW, a_this)) { return cPhs_ERROR_e; } } @@ -1963,16 +1770,19 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { OS_REPORT("OBJ_BRG SET END \n"); - int sp54 = fopAcM_GetParam(i_this) >> 0x18; - bool sp78 = sp54 != 0xFF && dComIfGs_isSwitch(sp54, fopAcM_GetRoomNo(i_this)); + sp54 = (fopAcM_GetParam(i_this) & 0xFF000000) >> 0x18; + s8 sp78 = 0; + if (sp54 != 0xFF && dComIfGs_isSwitch(sp54, fopAcM_GetRoomNo(i_this))) { + sp78 = 1; + } - br_s* part = a_this->mBr; - for (int i = 0; i < a_this->field_0xb1ea; i++, part++) { + part = a_this->mBr; + for (loop = 0; loop < a_this->field_0xb1ea; loop++, part++) { part->field_0x074[0].y = i_this->home.pos.y + 350.0f; part->field_0x050[0].y = i_this->home.pos.y + 350.0f; } - int sp60 = 10; + sp60 = 10; if (a_this->field_0xb1ed == 2) { sp60 = 2; @@ -2001,17 +1811,17 @@ static int daObj_Brg_Create(fopAc_ac_c* i_this) { cXyz(334.0f, 216.0f, -16485.0f), }; - for (int i = 0; i < a_this->field_0xb1ea; i++) { - a_this->mBr[i].field_0x098[2] = brg_init_pos[i]; + for (brno = 0; brno < a_this->field_0xb1ea; brno++) { + a_this->mBr[brno].field_0x098[2] = brg_init_pos[brno]; } } - for (int i = 0; i < sp60; i++) { - if (i == 5 && sp78) { + for (iter = 0; iter < sp60; iter++) { + if (iter == 5 && sp78) { if (a_this->field_0xb1ec != 0) { a_this->field_0xaf1c = 5; a_this->field_0xaed0 = 7; - } else if (a_this->field_0xb1ec == 1) { + } else if (a_this->field_0xb1ed == 1) { a_this->field_0xaf1c = 5; a_this->field_0xaed0 = 10; a_this->mType = 4; diff --git a/tools/utilities/greg_calc.py b/tools/utilities/greg_calc.py new file mode 100644 index 00000000000..40e10049076 --- /dev/null +++ b/tools/utilities/greg_calc.py @@ -0,0 +1,104 @@ +import sys + +REG_F = { + "TREG_F": 0x00c, + "DREG_F": 0x09c, + "IREG_F": 0x12c, + "SREG_F": 0x1bc, + "UREG_F": 0x24c, + "OREG_F": 0x2dc, + "YREG_F": 0x36c, + "KREG_F": 0x3fc, + "BREG_F": 0x48c, + "MREG_F": 0x51c, + "AREG_F": 0x5ac, + "PREG_F": 0x63c, + "NREG_F": 0x6cc, + "WREG_F": 0x75c, + "JREG_F": 0x7ec, + "HREG_F": 0x87c, + "VREG_F": 0x90c, + "XREG_F": 0x99c, + "ZREG_F": 0xa2c, + "nREG_F": 0xabc, + "kREG_F": 0xb4c, + "oREG_F": 0xbdc, + "yREG_F": 0xc6c, + "aREG_F": 0xcfc, + "hREG_F": 0xd8c, + "tREG_F": 0xe1c +} + +REG_S = { + "TREG_S": 0x084, + "DREG_S": 0x114, + "IREG_S": 0x1a4, + "SREG_S": 0x234, + "UREG_S": 0x2c4, + "OREG_S": 0x354, + "YREG_S": 0x3e4, + "KREG_S": 0x474, + "BREG_S": 0x504, + "MREG_S": 0x594, + "AREG_S": 0x624, + "PREG_S": 0x6b4, + "NREG_S": 0x744, + "WREG_S": 0x7d4, + "JREG_S": 0x864, + "HREG_S": 0x8f4, + "VREG_S": 0x984, + "XREG_S": 0xa14, + "ZREG_S": 0xaa4, + "nREG_S": 0xb34, + "kREG_S": 0xbc4, + "oREG_S": 0xc54, + "yREG_S": 0xce4, + "aREG_S": 0xd74, + "hREG_S": 0xe04, + "tREG_S": 0xe94 +} + + +def find_register(hex_val, reg_map, step): + best_match = None + best_base = -1 + + for name, base in reg_map.items(): + if base <= hex_val and base > best_base: + best_match = name + best_base = base + + if best_match is not None: + index = (hex_val - best_base) // step + expected = best_base + index * step + if expected == hex_val: + return f"{best_match}({index})" + + raise ValueError("No matching register found.") + + +def main(): + if len(sys.argv) != 3: + print("Usage: greg_calc.py [s|f] [hex_val]") + return + + mode = sys.argv[1].lower() + try: + hex_val = int(sys.argv[2], 16) + except ValueError: + print("Invalid hex value. Use format like 0x75c") + return + + if mode == 'f': + result = find_register(hex_val, REG_F, 4) + elif mode == 's': + result = find_register(hex_val, REG_S, 2) + else: + print("Invalid mode. Use 's' for short or 'f' for float.") + return + + print(result) + + +if __name__ == "__main__": + main()