From d88bee3b37b88f226bb34e6e9bcc1e1653831fe8 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Thu, 24 Jul 2025 11:15:07 +0300 Subject: [PATCH] d_a_obj_tatigi matching --- config/GZ2E01/rels/d_a_obj_tatigi/symbols.txt | 16 +- config/GZ2J01/rels/d_a_obj_tatigi/symbols.txt | 16 +- config/GZ2P01/rels/d_a_obj_tatigi/symbols.txt | 16 +- .../RZDE01_00/rels/d_a_obj_tatigi/symbols.txt | 14 +- .../ShieldD/rels/d_a_obj_tatigiD/symbols.txt | 16 +- configure.py | 2 +- include/d/actor/d_a_obj_tatigi.h | 31 +- src/d/actor/d_a_obj_tatigi.cpp | 491 +++++++----------- tools/utilities/greg_calc.py | 2 + 9 files changed, 255 insertions(+), 349 deletions(-) diff --git a/config/GZ2E01/rels/d_a_obj_tatigi/symbols.txt b/config/GZ2E01/rels/d_a_obj_tatigi/symbols.txt index 7bd32d9c954..f6421aae33c 100644 --- a/config/GZ2E01/rels/d_a_obj_tatigi/symbols.txt +++ b/config/GZ2E01/rels/d_a_obj_tatigi/symbols.txt @@ -1,13 +1,13 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x20 scope:global -daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000078; // type:function size:0x88 scope:global -daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000100; // type:function size:0x288 scope:global -daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000388; // type:function size:0x8 scope:global -daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000390; // type:function size:0x88 scope:global -useHeapInit__FP10fopAc_ac_c = .text:0x00000418; // type:function size:0xAC scope:global -set_pos_check__FP16obj_tatigi_classi = .text:0x000004C4; // type:function size:0x1B4 scope:global -daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000678; // type:function size:0x3E8 scope:global +daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000078; // type:function size:0x88 scope:local +daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000100; // type:function size:0x288 scope:local +daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000388; // type:function size:0x8 scope:local +daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000390; // type:function size:0x88 scope:local +useHeapInit__FP10fopAc_ac_c = .text:0x00000418; // type:function size:0xAC scope:local +set_pos_check__FP16obj_tatigi_classi = .text:0x000004C4; // type:function size:0x1B4 scope:local +daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000678; // type:function size:0x3E8 scope:local __dt__5tg_ssFv = .text:0x00000A60; // type:function size:0xD4 scope:global __ct__5tg_ssFv = .text:0x00000B34; // type:function size:0x94 scope:global __dt__8cM3dGCylFv = .text:0x00000BC8; // type:function size:0x48 scope:global @@ -34,7 +34,7 @@ _dtors = .dtors:0x00000000; // type:label scope:global @4076 = .rodata:0x00000058; // type:object size:0x8 scope:local @stringBase0 = .rodata:0x00000060; // type:object size:0x7 scope:local data:string_table cc_cyl_src$3986 = .data:0x00000000; // type:object size:0x44 scope:local -l_daObj_Tatigi_Method = .data:0x00000044; // type:object size:0x20 scope:global +l_daObj_Tatigi_Method = .data:0x00000044; // type:object size:0x20 scope:local g_profile_OBJ_TATIGI = .data:0x00000064; // type:object size:0x30 scope:global __vt__8cM3dGAab = .data:0x00000094; // type:object size:0xC scope:global __vt__8cM3dGCyl = .data:0x000000A0; // type:object size:0xC scope:global diff --git a/config/GZ2J01/rels/d_a_obj_tatigi/symbols.txt b/config/GZ2J01/rels/d_a_obj_tatigi/symbols.txt index 7bd32d9c954..f6421aae33c 100644 --- a/config/GZ2J01/rels/d_a_obj_tatigi/symbols.txt +++ b/config/GZ2J01/rels/d_a_obj_tatigi/symbols.txt @@ -1,13 +1,13 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x20 scope:global -daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000078; // type:function size:0x88 scope:global -daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000100; // type:function size:0x288 scope:global -daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000388; // type:function size:0x8 scope:global -daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000390; // type:function size:0x88 scope:global -useHeapInit__FP10fopAc_ac_c = .text:0x00000418; // type:function size:0xAC scope:global -set_pos_check__FP16obj_tatigi_classi = .text:0x000004C4; // type:function size:0x1B4 scope:global -daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000678; // type:function size:0x3E8 scope:global +daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000078; // type:function size:0x88 scope:local +daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000100; // type:function size:0x288 scope:local +daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000388; // type:function size:0x8 scope:local +daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000390; // type:function size:0x88 scope:local +useHeapInit__FP10fopAc_ac_c = .text:0x00000418; // type:function size:0xAC scope:local +set_pos_check__FP16obj_tatigi_classi = .text:0x000004C4; // type:function size:0x1B4 scope:local +daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000678; // type:function size:0x3E8 scope:local __dt__5tg_ssFv = .text:0x00000A60; // type:function size:0xD4 scope:global __ct__5tg_ssFv = .text:0x00000B34; // type:function size:0x94 scope:global __dt__8cM3dGCylFv = .text:0x00000BC8; // type:function size:0x48 scope:global @@ -34,7 +34,7 @@ _dtors = .dtors:0x00000000; // type:label scope:global @4076 = .rodata:0x00000058; // type:object size:0x8 scope:local @stringBase0 = .rodata:0x00000060; // type:object size:0x7 scope:local data:string_table cc_cyl_src$3986 = .data:0x00000000; // type:object size:0x44 scope:local -l_daObj_Tatigi_Method = .data:0x00000044; // type:object size:0x20 scope:global +l_daObj_Tatigi_Method = .data:0x00000044; // type:object size:0x20 scope:local g_profile_OBJ_TATIGI = .data:0x00000064; // type:object size:0x30 scope:global __vt__8cM3dGAab = .data:0x00000094; // type:object size:0xC scope:global __vt__8cM3dGCyl = .data:0x000000A0; // type:object size:0xC scope:global diff --git a/config/GZ2P01/rels/d_a_obj_tatigi/symbols.txt b/config/GZ2P01/rels/d_a_obj_tatigi/symbols.txt index 7bd32d9c954..f6421aae33c 100644 --- a/config/GZ2P01/rels/d_a_obj_tatigi/symbols.txt +++ b/config/GZ2P01/rels/d_a_obj_tatigi/symbols.txt @@ -1,13 +1,13 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x20 scope:global -daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000078; // type:function size:0x88 scope:global -daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000100; // type:function size:0x288 scope:global -daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000388; // type:function size:0x8 scope:global -daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000390; // type:function size:0x88 scope:global -useHeapInit__FP10fopAc_ac_c = .text:0x00000418; // type:function size:0xAC scope:global -set_pos_check__FP16obj_tatigi_classi = .text:0x000004C4; // type:function size:0x1B4 scope:global -daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000678; // type:function size:0x3E8 scope:global +daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000078; // type:function size:0x88 scope:local +daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000100; // type:function size:0x288 scope:local +daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000388; // type:function size:0x8 scope:local +daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000390; // type:function size:0x88 scope:local +useHeapInit__FP10fopAc_ac_c = .text:0x00000418; // type:function size:0xAC scope:local +set_pos_check__FP16obj_tatigi_classi = .text:0x000004C4; // type:function size:0x1B4 scope:local +daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000678; // type:function size:0x3E8 scope:local __dt__5tg_ssFv = .text:0x00000A60; // type:function size:0xD4 scope:global __ct__5tg_ssFv = .text:0x00000B34; // type:function size:0x94 scope:global __dt__8cM3dGCylFv = .text:0x00000BC8; // type:function size:0x48 scope:global @@ -34,7 +34,7 @@ _dtors = .dtors:0x00000000; // type:label scope:global @4076 = .rodata:0x00000058; // type:object size:0x8 scope:local @stringBase0 = .rodata:0x00000060; // type:object size:0x7 scope:local data:string_table cc_cyl_src$3986 = .data:0x00000000; // type:object size:0x44 scope:local -l_daObj_Tatigi_Method = .data:0x00000044; // type:object size:0x20 scope:global +l_daObj_Tatigi_Method = .data:0x00000044; // type:object size:0x20 scope:local g_profile_OBJ_TATIGI = .data:0x00000064; // type:object size:0x30 scope:global __vt__8cM3dGAab = .data:0x00000094; // type:object size:0xC scope:global __vt__8cM3dGCyl = .data:0x000000A0; // type:object size:0xC scope:global diff --git a/config/RZDE01_00/rels/d_a_obj_tatigi/symbols.txt b/config/RZDE01_00/rels/d_a_obj_tatigi/symbols.txt index 766a6f3b252..b1aa49fcdc3 100644 --- a/config/RZDE01_00/rels/d_a_obj_tatigi/symbols.txt +++ b/config/RZDE01_00/rels/d_a_obj_tatigi/symbols.txt @@ -1,12 +1,12 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x0000002C; // type:function size:0x2C scope:global _unresolved = .text:0x00000058; // type:function size:0x4 scope:global -daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x0000005C; // type:function size:0x80 scope:global -daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x000000DC; // type:function size:0x2CC scope:global -daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x000003A8; // type:function size:0x8 scope:global -useHeapInit__FP10fopAc_ac_c = .text:0x000003B0; // type:function size:0xA8 scope:global -daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000458; // type:function size:0x480 scope:global -daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x000008D8; // type:function size:0x88 scope:global +daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x0000005C; // type:function size:0x80 scope:local +daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x000000DC; // type:function size:0x2CC scope:local +daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x000003A8; // type:function size:0x8 scope:local +useHeapInit__FP10fopAc_ac_c = .text:0x000003B0; // type:function size:0xA8 scope:local +daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000458; // type:function size:0x480 scope:local +daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x000008D8; // type:function size:0x88 scope:local __ct__5tg_ssFv = .text:0x00000960; // type:function size:0x68 scope:global __dt__5tg_ssFv = .text:0x000009C8; // type:function size:0x5C scope:global _ctors = .ctors:0x00000000; // type:label scope:global @@ -28,5 +28,5 @@ _dtors = .dtors:0x00000000; // type:label scope:global @94608 = .rodata:0x00000038; // type:object size:0x8 scope:local lbl_654_data_0 = .data:0x00000000; // type:object size:0x8 cc_cyl_src$93474 = .data:0x00000008; // type:object size:0x44 scope:local -l_daObj_Tatigi_Method = .data:0x0000004C; // type:object size:0x20 scope:global +l_daObj_Tatigi_Method = .data:0x0000004C; // type:object size:0x20 scope:local g_profile_OBJ_TATIGI = .data:0x0000006C; // type:object size:0x30 scope:global diff --git a/config/ShieldD/rels/d_a_obj_tatigiD/symbols.txt b/config/ShieldD/rels/d_a_obj_tatigiD/symbols.txt index 407d827ad01..135fd31ab14 100644 --- a/config/ShieldD/rels/d_a_obj_tatigiD/symbols.txt +++ b/config/ShieldD/rels/d_a_obj_tatigiD/symbols.txt @@ -1,15 +1,15 @@ _prolog = .text:0x00000000; // type:function size:0x2C scope:global _epilog = .text:0x00000030; // type:function size:0x2C scope:global _unresolved = .text:0x00000060; // type:function size:0x20 scope:global -daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000080; // type:function size:0x90 scope:global +daObj_Tatigi_Draw__FP16obj_tatigi_class = .text:0x00000080; // type:function size:0x90 scope:local dComIfGp_entrySimpleModel__FP8J3DModeli = .text:0x00000110; // type:function size:0x3C scope:global -daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000150; // type:function size:0x314 scope:global -daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000470; // type:function size:0x8 scope:global -daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000480; // type:function size:0x94 scope:global +daObj_Tatigi_Execute__FP16obj_tatigi_class = .text:0x00000150; // type:function size:0x314 scope:local +daObj_Tatigi_IsDelete__FP16obj_tatigi_class = .text:0x00000470; // type:function size:0x8 scope:local +daObj_Tatigi_Delete__FP16obj_tatigi_class = .text:0x00000480; // type:function size:0x94 scope:local dComIfGp_removeSimpleModel__FP12J3DModelDatai = .text:0x00000520; // type:function size:0x3C scope:global -useHeapInit__FP10fopAc_ac_c = .text:0x00000560; // type:function size:0xE4 scope:global -set_pos_check__FP16obj_tatigi_classi = .text:0x00000650; // type:function size:0xF0 scope:global -daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000740; // type:function size:0x550 scope:global +useHeapInit__FP10fopAc_ac_c = .text:0x00000560; // type:function size:0xE4 scope:local +set_pos_check__FP16obj_tatigi_classi = .text:0x00000650; // type:function size:0xF0 scope:local +daObj_Tatigi_Create__FP10fopAc_ac_c = .text:0x00000740; // type:function size:0x550 scope:local dComIfGp_addSimpleModel__FP12J3DModelDataiUc = .text:0x00000C90; // type:function size:0x44 scope:global __ct__16obj_tatigi_classFv = .text:0x00000CE0; // type:function size:0x5C scope:global __dt__5tg_ssFv = .text:0x00000D40; // type:function size:0x7C scope:global @@ -46,7 +46,7 @@ lbl_642_rodata_50 = .rodata:0x00000050; // type:object size:0x14 @118546 = .data:0x00000108; // type:object size:0x23 scope:local data:string @118552 = .data:0x0000012C; // type:object size:0x34 scope:local @118555 = .data:0x00000160; // type:object size:0x35 scope:local -l_daObj_Tatigi_Method = .data:0x00000198; // type:object size:0x20 scope:global +l_daObj_Tatigi_Method = .data:0x00000198; // type:object size:0x20 scope:local g_profile_OBJ_TATIGI = .data:0x000001B8; // type:object size:0x30 scope:global @118618 = .data:0x000001F4; // type:object size:0x9 scope:local data:string @118619 = .data:0x00000214; // type:object size:0x9 scope:local data:string diff --git a/configure.py b/configure.py index 57008c9ae7a..82e4658b50b 100755 --- a/configure.py +++ b/configure.py @@ -2130,7 +2130,7 @@ config.libs = [ ActorRel(NonMatching, "d_a_obj_taFence"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_table"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_takaraDai"), - ActorRel(NonMatching, "d_a_obj_tatigi"), + ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tatigi"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_ten"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_testcube"), ActorRel(MatchingFor("GZ2E01"), "d_a_obj_tgake"), diff --git a/include/d/actor/d_a_obj_tatigi.h b/include/d/actor/d_a_obj_tatigi.h index f94676e2b94..69c082b55f8 100644 --- a/include/d/actor/d_a_obj_tatigi.h +++ b/include/d/actor/d_a_obj_tatigi.h @@ -1,12 +1,21 @@ #ifndef D_A_OBJ_TATIGI_H #define D_A_OBJ_TATIGI_H +#include "d/d_cc_d.h" #include "f_op/f_op_actor_mng.h" struct tg_ss { public: - /* 80D083C0 */ ~tg_ss(); - /* 80D08494 */ tg_ss(); + /* 80D083C0 */ ~tg_ss() {} + /* 80D08494 */ tg_ss() {} + + /* 0x000 */ J3DModel* mModel; + /* 0x004 */ cXyz mPos; + /* 0x010 */ cXyz mScale; + /* 0x01C */ s16 mAngle; + /* 0x01E */ s16 field_0x1e; + /* 0x020 */ dCcD_Cyl mCyl; + /* 0x15C */ s8 mActive; }; /** @@ -17,9 +26,21 @@ public: * @details * */ -class obj_tatigi_class : public fopAc_ac_c { -private: - /* 0x568 */ u8 field_0x568[0x1bc0 - 0x568]; +class obj_tatigi_class{ +public: + /* 0x0000 */ fopAc_ac_c mBase; + /* 0x0568 */ request_of_phase_process_class mPhase; + /* 0x0570 */ u8 field_0x570; + /* 0x0571 */ u8 field_0x571; + /* 0x0572 */ u8 field_0x572; + /* 0x0574 */ s16 field_0x574; + /* 0x0576 */ s16 field_0x576; + /* 0x0578 */ int field_0x578; + /* 0x057C */ tg_ss mTgs[16]; + /* 0x1B7C */ int mTgNum; + /* 0x1B80 */ dCcD_Stts mStts; + /* 0x1BBC */ u8 field_0x1bbc; + /* 0x1BBD */ bool mModelLoaded; }; STATIC_ASSERT(sizeof(obj_tatigi_class) == 0x1bc0); diff --git a/src/d/actor/d_a_obj_tatigi.cpp b/src/d/actor/d_a_obj_tatigi.cpp index 238b1263c67..24eea77757d 100644 --- a/src/d/actor/d_a_obj_tatigi.cpp +++ b/src/d/actor/d_a_obj_tatigi.cpp @@ -5,303 +5,222 @@ #include "d/actor/d_a_obj_tatigi.h" #include "d/d_cc_d.h" +#include "d/d_cc_uty.h" +#include "d/d_s_play.h" +#include "d/d_com_inf_game.h" #include "dol2asm.h" - - -// -// Forward References: -// - -extern "C" static void daObj_Tatigi_Draw__FP16obj_tatigi_class(); -extern "C" static void daObj_Tatigi_Execute__FP16obj_tatigi_class(); -extern "C" static bool daObj_Tatigi_IsDelete__FP16obj_tatigi_class(); -extern "C" static void daObj_Tatigi_Delete__FP16obj_tatigi_class(); -extern "C" static void useHeapInit__FP10fopAc_ac_c(); -extern "C" static void set_pos_check__FP16obj_tatigi_classi(); -extern "C" static void daObj_Tatigi_Create__FP10fopAc_ac_c(); -extern "C" void __dt__5tg_ssFv(); -extern "C" void __ct__5tg_ssFv(); -extern "C" void __dt__8cM3dGCylFv(); -extern "C" void __dt__8cM3dGAabFv(); -extern "C" extern char const* const d_a_obj_tatigi__stringBase0; - -// -// External References: -// - -extern "C" void mDoMtx_XrotM__FPA4_fs(); -extern "C" void mDoMtx_YrotM__FPA4_fs(); -extern "C" void mDoMtx_ZrotM__FPA4_fs(); -extern "C" void scaleM__14mDoMtx_stack_cFfff(); -extern "C" void mDoExt_J3DModel__create__FP12J3DModelDataUlUl(); -extern "C" void __ct__10fopAc_ac_cFv(); -extern "C" void fopAcM_entrySolidHeap__FP10fopAc_ac_cPFP10fopAc_ac_c_iUl(); -extern "C" void addSimpleModel__14dComIfG_play_cFP12J3DModelDataiUc(); -extern "C" void removeSimpleModel__14dComIfG_play_cFP12J3DModelDatai(); -extern "C" void entrySimpleModel__14dComIfG_play_cFP8J3DModeli(); -extern "C" void dComIfG_resLoad__FP30request_of_phase_process_classPCc(); -extern "C" void dComIfG_resDelete__FP30request_of_phase_process_classPCc(); -extern "C" void getRes__14dRes_control_cFPCclP11dRes_info_ci(); -extern "C" void GroundCross__4cBgSFP11cBgS_GndChk(); -extern "C" void __ct__11dBgS_GndChkFv(); -extern "C" void __dt__11dBgS_GndChkFv(); -extern "C" void __ct__10dCcD_GSttsFv(); -extern "C" void Init__9dCcD_SttsFiiP10fopAc_ac_c(); -extern "C" void __ct__12dCcD_GObjInfFv(); -extern "C" void __dt__12dCcD_GObjInfFv(); -extern "C" void ChkCoHit__12dCcD_GObjInfFv(); -extern "C" void GetCoHitObj__12dCcD_GObjInfFv(); -extern "C" void Set__8dCcD_CylFRC11dCcD_SrcCyl(); -extern "C" void GetAc__8cCcD_ObjFv(); -extern "C" void Set__4cCcSFP8cCcD_Obj(); -extern "C" void __mi__4cXyzCFRC3Vec(); -extern "C" void cM_rndF__Ff(); -extern "C" void cM_initRnd2__Fiii(); -extern "C" void cM_rndF2__Ff(); -extern "C" void SetPos__11cBgS_GndChkFPC3Vec(); -extern "C" void SetC__8cM3dGCylFRC4cXyz(); -extern "C" void SetH__8cM3dGCylFf(); -extern "C" void SetR__8cM3dGCylFf(); -extern "C" void MtxTrans__FfffUc(); -extern "C" void MtxPosition__FP4cXyzP4cXyz(); -extern "C" void MtxPush__Fv(); -extern "C" void MtxPull__Fv(); -extern "C" void __dl__FPv(); -extern "C" void __construct_array(); -extern "C" void _savegpr_23(); -extern "C" void _savegpr_25(); -extern "C" void _savegpr_26(); -extern "C" void _savegpr_27(); -extern "C" void _restgpr_23(); -extern "C" void _restgpr_25(); -extern "C" void _restgpr_26(); -extern "C" void _restgpr_27(); -extern "C" extern void* __vt__8dCcD_Cyl[36]; -extern "C" extern void* __vt__9dCcD_Stts[11]; -extern "C" extern void* __vt__12cCcD_CylAttr[25]; -extern "C" extern void* __vt__14cCcD_ShapeAttr[22]; -extern "C" extern void* __vt__9cCcD_Stts[8]; -extern "C" u8 now__14mDoMtx_stack_c[48]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" u8 sincosTable___5JMath[65536]; -extern "C" extern void* calc_mtx[1 + 1 /* padding */]; - -// -// Declarations: -// - /* 80D079D8-80D07A60 000078 0088+00 1/0 0/0 0/0 .text daObj_Tatigi_Draw__FP16obj_tatigi_class */ -static void daObj_Tatigi_Draw(obj_tatigi_class* param_0) { - // NONMATCHING +static int daObj_Tatigi_Draw(obj_tatigi_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)&i_this->mBase; + int roomNo = fopAcM_GetRoomNo(a_this); + tg_ss* pTg = i_this->mTgs; + for (int i = 0; i < i_this->mTgNum; i++, pTg++) { + if (pTg->mActive != 0) { + dComIfGp_entrySimpleModel(pTg->mModel, roomNo); + } + } + return 1; } -/* ############################################################################################## */ -/* 80D085C0-80D085C4 000000 0004+00 3/3 0/0 0/0 .rodata @3867 */ -SECTION_RODATA static f32 const lit_3867 = 30.0f; -COMPILER_STRIP_GATE(0x80D085C0, &lit_3867); - -/* 80D085C4-80D085C8 000004 0004+00 0/1 0/0 0/0 .rodata @3868 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3868 = 500.0f; -COMPILER_STRIP_GATE(0x80D085C4, &lit_3868); -#pragma pop - -/* 80D085C8-80D085CC 000008 0004+00 0/1 0/0 0/0 .rodata @3869 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3869 = 5.0f; -COMPILER_STRIP_GATE(0x80D085C8, &lit_3869); -#pragma pop - -/* 80D085CC-80D085D0 00000C 0004+00 0/1 0/0 0/0 .rodata @3870 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3870 = 7.0f; -COMPILER_STRIP_GATE(0x80D085CC, &lit_3870); -#pragma pop - -/* 80D085D0-80D085D8 000010 0008+00 0/1 0/0 0/0 .rodata @3872 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3872[8] = { - 0x43, 0x30, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D085D0, &lit_3872); -#pragma pop - /* 80D07A60-80D07CE8 000100 0288+00 2/1 0/0 0/0 .text daObj_Tatigi_Execute__FP16obj_tatigi_class */ -static void daObj_Tatigi_Execute(obj_tatigi_class* param_0) { - // NONMATCHING +static int daObj_Tatigi_Execute(obj_tatigi_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)&i_this->mBase; + i_this->field_0x574++; + if (i_this->field_0x576 == 0) { + tg_ss* pTg = i_this->mTgs; + for (s32 i = 0; i < i_this->mTgNum; i++, pTg++) { + if (pTg->mActive != 0) { + mDoMtx_stack_c::transS(pTg->mPos.x, pTg->mPos.y, pTg->mPos.z); + mDoMtx_stack_c::YrotM(pTg->mAngle); + mDoMtx_stack_c::scaleM(pTg->mScale.x, pTg->mScale.y, pTg->mScale.z); + pTg->mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + pTg->mCyl.SetC(pTg->mPos); + pTg->mCyl.SetR(pTg->mScale.x * (TREG_F(16) + 30.0f)); + pTg->mCyl.SetH(TREG_F(17) + 500.0f); + } + } + i_this->field_0x576 = 1; + } else { + tg_ss* pTg = i_this->mTgs; + s16 xRot; + s16 zRot; + int i; + for (i = 0; i < i_this->mTgNum; i++, pTg++) { + dComIfG_Ccsp()->Set(&pTg->mCyl); + if (pTg->field_0x1e == 0 && pTg->mCyl.ChkCoHit()) { + fopAc_ac_c* hitActor = dCc_GetAc(pTg->mCyl.GetCoHitObj()->GetAc()); + if (hitActor != NULL && hitActor->speedF >= 5.0f) { + pTg->field_0x1e = 20; + } + } + if (pTg->field_0x1e != 0) { + pTg->field_0x1e--; + xRot = ((TREG_F(18) + 7.0f) * (pTg->field_0x1e * cM_ssin(i_this->field_0x574 * (WREG_S(3) + 5000)))); + zRot = ((TREG_F(18) + 7.0f) * (pTg->field_0x1e * cM_ssin(i_this->field_0x574 * (WREG_S(4) + 6000)))); + mDoMtx_stack_c::transS(pTg->mPos.x, pTg->mPos.y, pTg->mPos.z); + mDoMtx_stack_c::YrotM(pTg->mAngle); + mDoMtx_stack_c::XrotM(xRot); + mDoMtx_stack_c::ZrotM(zRot); + mDoMtx_stack_c::scaleM(pTg->mScale.x, pTg->mScale.y, pTg->mScale.z); + pTg->mModel->setBaseTRMtx(mDoMtx_stack_c::get()); + } + } + } + return 1; } /* 80D07CE8-80D07CF0 000388 0008+00 1/0 0/0 0/0 .text daObj_Tatigi_IsDelete__FP16obj_tatigi_class */ -static bool daObj_Tatigi_IsDelete(obj_tatigi_class* param_0) { - return true; +static int daObj_Tatigi_IsDelete(obj_tatigi_class* param_0) { + return 1; } -/* ############################################################################################## */ -/* 80D08620-80D08620 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ -#pragma push -#pragma force_active on -SECTION_DEAD static char const* const stringBase_80D08620 = "Obj_tg"; -#pragma pop - /* 80D07CF0-80D07D78 000390 0088+00 1/0 0/0 0/0 .text daObj_Tatigi_Delete__FP16obj_tatigi_class */ -static void daObj_Tatigi_Delete(obj_tatigi_class* param_0) { - // NONMATCHING +static int daObj_Tatigi_Delete(obj_tatigi_class* i_this) { + fopAc_ac_c* a_this = (fopAc_ac_c*)&i_this->mBase; + fopAcM_RegisterDeleteID(i_this, "Obj_Tatigi"); + if (i_this->mModelLoaded) { + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_tg", 3); + dComIfGp_removeSimpleModel(modelData, fopAcM_GetRoomNo(a_this)); + } + dComIfG_resDelete(&i_this->mPhase, "Obj_tg"); + return 1; } /* 80D07D78-80D07E24 000418 00AC+00 1/1 0/0 0/0 .text useHeapInit__FP10fopAc_ac_c */ -static void useHeapInit(fopAc_ac_c* param_0) { - // NONMATCHING +static int useHeapInit(fopAc_ac_c* a_this) { + obj_tatigi_class* i_this = (obj_tatigi_class*)a_this; + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_tg", 3); + JUT_ASSERT(279, modelData != 0); + for (int i = 0; i < i_this->mTgNum; i++) { + i_this->mTgs[i].mModel = mDoExt_J3DModel__create(modelData, 0x20000, 0x11000084); + if (i_this->mTgs[i].mModel == NULL) { + return 0; + } + } + return 1; } -/* ############################################################################################## */ -/* 80D085D8-80D085E0 000018 0004+04 0/2 0/0 0/0 .rodata @3955 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3955[4 + 4 /* padding */] = { - 0x00, - 0x00, - 0x00, - 0x00, - /* padding */ - 0x00, - 0x00, - 0x00, - 0x00, -}; -COMPILER_STRIP_GATE(0x80D085D8, &lit_3955); -#pragma pop - -/* 80D085E0-80D085E8 000020 0008+00 0/1 0/0 0/0 .rodata @3956 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3956[8] = { - 0x3F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D085E0, &lit_3956); -#pragma pop - -/* 80D085E8-80D085F0 000028 0008+00 0/1 0/0 0/0 .rodata @3957 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3957[8] = { - 0x40, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D085E8, &lit_3957); -#pragma pop - -/* 80D085F0-80D085F8 000030 0008+00 0/1 0/0 0/0 .rodata @3958 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_3958[8] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D085F0, &lit_3958); -#pragma pop - -/* 80D085F8-80D085FC 000038 0004+00 0/1 0/0 0/0 .rodata @3959 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_3959 = 150.0f; -COMPILER_STRIP_GATE(0x80D085F8, &lit_3959); -#pragma pop - /* 80D07E24-80D07FD8 0004C4 01B4+00 1/1 0/0 0/0 .text set_pos_check__FP16obj_tatigi_classi */ -static void set_pos_check(obj_tatigi_class* param_0, int param_1) { - // NONMATCHING +static BOOL set_pos_check(obj_tatigi_class* i_this, int param_2) { + cXyz cStack_2c; + f32 dVar7 = KREG_F(7) + 150.0f; + for (int i = 0; i < param_2; i++) { + cStack_2c = i_this->mTgs[i].mPos - i_this->mTgs[param_2].mPos; + if (cStack_2c.abs() < dVar7) { + return 0; + } + } + return TRUE; } -/* ############################################################################################## */ -/* 80D085FC-80D08600 00003C 0004+00 0/1 0/0 0/0 .rodata @4068 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4068 = 65536.0f; -COMPILER_STRIP_GATE(0x80D085FC, &lit_4068); -#pragma pop - -/* 80D08600-80D08604 000040 0004+00 0/1 0/0 0/0 .rodata @4069 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4069 = 100.0f; -COMPILER_STRIP_GATE(0x80D08600, &lit_4069); -#pragma pop - -/* 80D08604-80D08608 000044 0004+00 0/1 0/0 0/0 .rodata @4070 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4070 = 3.0f / 5.0f; -COMPILER_STRIP_GATE(0x80D08604, &lit_4070); -#pragma pop - -/* 80D08608-80D0860C 000048 0004+00 0/1 0/0 0/0 .rodata @4071 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4071 = 2.0f / 5.0f; -COMPILER_STRIP_GATE(0x80D08608, &lit_4071); -#pragma pop - -/* 80D0860C-80D08610 00004C 0004+00 0/1 0/0 0/0 .rodata @4072 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4072 = 1.0f; -COMPILER_STRIP_GATE(0x80D0860C, &lit_4072); -#pragma pop - -/* 80D08610-80D08618 000050 0004+04 0/1 0/0 0/0 .rodata @4073 */ -#pragma push -#pragma force_active on -SECTION_RODATA static f32 const lit_4073[1 + 1 /* padding */] = { - 65535.0f, - /* padding */ - 0.0f, -}; -COMPILER_STRIP_GATE(0x80D08610, &lit_4073); -#pragma pop - -/* 80D08618-80D08620 000058 0008+00 0/1 0/0 0/0 .rodata @4076 */ -#pragma push -#pragma force_active on -SECTION_RODATA static u8 const lit_4076[8] = { - 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; -COMPILER_STRIP_GATE(0x80D08618, &lit_4076); -#pragma pop - -/* 80D08628-80D0866C 000000 0044+00 1/1 0/0 0/0 .data cc_cyl_src$3986 */ -static dCcD_SrcCyl cc_cyl_src = { - { - {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x11}, 0x79}}, // mObj - {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt - {dCcD_SE_METAL, 0x2, 0x0, 0x0, 0x3}, // mGObjTg - {0x0}, // mGObjCo - }, // mObjInf - { - {0.0f, 0.0f, 0.0f}, // mCenter - 35.0f, // mRadius - 120.0f // mHeight - } // mCyl -}; - /* 80D07FD8-80D083C0 000678 03E8+00 1/0 0/0 0/0 .text daObj_Tatigi_Create__FP10fopAc_ac_c */ -static void daObj_Tatigi_Create(fopAc_ac_c* param_0) { - // NONMATCHING +static int daObj_Tatigi_Create(fopAc_ac_c* a_this) { + static dCcD_SrcCyl cc_cyl_src = { + { + {0x0, {{0x0, 0x0, 0x0}, {0xd8fbfdff, 0x11}, 0x79}}, // mObj + {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x0}, // mGObjAt + {dCcD_SE_METAL, 0x2, 0x0, 0x0, 0x3}, // mGObjTg + {0x0}, // mGObjCo + }, // mObjInf + { + {0.0f, 0.0f, 0.0f}, // mCenter + 35.0f, // mRadius + 120.0f // mHeight + } // mCyl + }; + + obj_tatigi_class* i_this = (obj_tatigi_class*)a_this; + fopAcM_SetupActor(&i_this->mBase, obj_tatigi_class); + + int rv = dComIfG_resLoad(&i_this->mPhase, "Obj_tg"); + if (rv == cPhs_COMPLEATE_e) { + OS_REPORT("OBJ_TATIGI PARAM %x\n", fopAcM_GetParam(a_this)); + i_this->field_0x570 = fopAcM_GetParam(a_this) & 0xff; + i_this->field_0x571 = (fopAcM_GetParam(a_this) & 0xff00) >> 8; + i_this->field_0x572 = (fopAcM_GetParam(a_this) & 0xff0000) >> 16; + if (i_this->field_0x572 == 0xff) { + i_this->field_0x572 = 0; + } + + i_this->mTgNum = i_this->field_0x570 + 1; + if (i_this->mTgNum > 16) { + i_this->mTgNum = 16; + } + + OS_REPORT("OBJ_TATIGI//////////////OBJ_TATIGI SET 1 !!\n"); + + if (!fopAcM_entrySolidHeap(a_this, useHeapInit, 0x4b000)) { + OS_REPORT("//////////////OBJ_TATIGI SET NON !!\n"); + return cPhs_ERROR_e; + } + + OS_REPORT("//////////////OBJ_TATIGI SET 2 !!\n"); + + MtxTrans(a_this->current.pos.x, a_this->current.pos.y, a_this->current.pos.z, 0); + cXyz cStack_80(0.0f, 0.0f, 0.0f); + Vec local_8c; + dBgS_GndChk gndCheck; + int local_94 = 0; + cM_initRnd2(13, 123, 33); + for (int i = 0; i < i_this->mTgNum; i++) { + MtxPush(); + cMtx_YrotM(*calc_mtx, cM_rndF2(65536.0f)); + MtxPosition(&cStack_80, &i_this->mTgs[i].mPos); + MtxPull(); + local_8c.x = i_this->mTgs[i].mPos.x; + local_8c.y = i_this->mTgs[i].mPos.y + 100.0f; + local_8c.z = i_this->mTgs[i].mPos.z; + gndCheck.SetPos(&local_8c); + i_this->mTgs[i].mPos.y = dComIfG_Bgsp().GroundCross(&gndCheck); + i_this->mTgs[i].mAngle = cM_rndF2(65536.0f); + if (set_pos_check(i_this, i)) { + i_this->mTgs[i].mActive = 1; + i_this->mTgs[i].mScale.x = i_this->mTgs[i].mScale.z = cM_rndF2(0.4f) + 0.6f; + i_this->mTgs[i].mScale.y = cM_rndF2(0.4f) + 0.6f; + } else { + i--; + local_94++; + if (local_94 > 10000) { + // The designated area for the standing tree is too narrow to place it. + OS_REPORT(" 立ち木の指定範囲が狭すぎて置けません!!!!\n"); + return cPhs_ERROR_e; + } + } + cStack_80.z = cM_rndF2(1.0f); + cStack_80.z = 1.0f - cStack_80.z * cStack_80.z; + cStack_80.z = cStack_80.z * (i_this->field_0x571 * 100.0f); + } + + i_this->field_0x574 = cM_rndF(65535.0f); + i_this->mStts.Init(0xff, 0, a_this); + for (int i = 0; i < i_this->mTgNum; i++) { + i_this->mTgs[i].mCyl.Set(cc_cyl_src); + i_this->mTgs[i].mCyl.SetStts(&i_this->mStts); + } + daObj_Tatigi_Execute(i_this); + J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Obj_tg", 3); + JUT_ASSERT(476, modelData != 0); + if (dComIfGp_addSimpleModel(modelData, fopAcM_GetRoomNo(a_this), 0) == -1) { + // Standing tree: simple model registration failed. + OS_REPORT("\x1B" "[43;30m立ち木:シンプルモデル登録失敗しました。\n" "\x1B" "[m"); + } + i_this->mModelLoaded = true; + } + return rv; } /* ############################################################################################## */ /* 80D0866C-80D0868C -00001 0020+00 1/0 0/0 0/0 .data l_daObj_Tatigi_Method */ static actor_method_class l_daObj_Tatigi_Method = { - (process_method_func)daObj_Tatigi_Create__FP10fopAc_ac_c, - (process_method_func)daObj_Tatigi_Delete__FP16obj_tatigi_class, - (process_method_func)daObj_Tatigi_Execute__FP16obj_tatigi_class, - (process_method_func)daObj_Tatigi_IsDelete__FP16obj_tatigi_class, - (process_method_func)daObj_Tatigi_Draw__FP16obj_tatigi_class, + (process_method_func)daObj_Tatigi_Create, + (process_method_func)daObj_Tatigi_Delete, + (process_method_func)daObj_Tatigi_Execute, + (process_method_func)daObj_Tatigi_IsDelete, + (process_method_func)daObj_Tatigi_Draw, }; /* 80D0868C-80D086BC -00001 0030+00 0/0 0/0 1/0 .data g_profile_OBJ_TATIGI */ @@ -322,40 +241,4 @@ extern actor_process_profile_definition g_profile_OBJ_TATIGI = { fopAc_CULLBOX_CUSTOM_e, // cullType }; -/* 80D086BC-80D086C8 000094 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGAab */ -SECTION_DATA extern void* __vt__8cM3dGAab[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGAabFv, -}; - -/* 80D086C8-80D086D4 0000A0 000C+00 3/3 0/0 0/0 .data __vt__8cM3dGCyl */ -SECTION_DATA extern void* __vt__8cM3dGCyl[3] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__8cM3dGCylFv, -}; - -/* 80D083C0-80D08494 000A60 00D4+00 1/1 0/0 0/0 .text __dt__5tg_ssFv */ -tg_ss::~tg_ss() { - // NONMATCHING -} - -/* 80D08494-80D08528 000B34 0094+00 1/1 0/0 0/0 .text __ct__5tg_ssFv */ -tg_ss::tg_ss() { - // NONMATCHING -} - -/* 80D08528-80D08570 000BC8 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGCylFv */ -// cM3dGCyl::~cM3dGCyl() { -extern "C" void __dt__8cM3dGCylFv() { - // NONMATCHING -} - -/* 80D08570-80D085B8 000C10 0048+00 1/0 0/0 0/0 .text __dt__8cM3dGAabFv */ -// cM3dGAab::~cM3dGAab() { -extern "C" void __dt__8cM3dGAabFv() { - // NONMATCHING -} - /* 80D08620-80D08620 000060 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ diff --git a/tools/utilities/greg_calc.py b/tools/utilities/greg_calc.py index 40e10049076..03b372d6be5 100644 --- a/tools/utilities/greg_calc.py +++ b/tools/utilities/greg_calc.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import sys REG_F = {