From 22059e57b780ebb537c7d73b926a1f258a21cc3f Mon Sep 17 00:00:00 2001 From: hatal175 Date: Fri, 23 Jun 2023 17:34:19 +0300 Subject: [PATCH] Work on d_a_tag_wljump (#351) --- Progress.md | 8 +- .../d_a_tag_wljump/__dt__13daTagWljump_cFv.s | 27 -- .../create__13daTagWljump_cFv.s | 84 ----- .../daTagWljump_Create__FP10fopAc_ac_c.s | 9 - .../daTagWljump_Delete__FP13daTagWljump_c.s | 11 - .../daTagWljump_Draw__FP13daTagWljump_c.s | 9 - .../daTagWljump_Execute__FP13daTagWljump_c.s | 9 - diff_settings.py | 2 +- include/d/a/d_a_alink.h | 16 +- include/d/a/d_a_player.h | 2 + include/d/d_attention.h | 3 + .../d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h | 31 ++ rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp | 354 ++++++++++++------ 13 files changed, 281 insertions(+), 284 deletions(-) delete mode 100644 asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/__dt__13daTagWljump_cFv.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/create__13daTagWljump_cFv.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Create__FP10fopAc_ac_c.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Delete__FP13daTagWljump_c.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Draw__FP13daTagWljump_c.s delete mode 100644 asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Execute__FP13daTagWljump_c.s diff --git a/Progress.md b/Progress.md index 6bbfb7982d6..1b64fa58c73 100644 --- a/Progress.md +++ b/Progress.md @@ -21,8 +21,8 @@ Total | 35.320165% | 1420108 | 4020672 Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- main.dol | 35.320165% | 1420108 | 4020672 -RELs | 33.653313% | 3870240 | 11500324 -Total | 34.085106% | 5290348 | 15520996 +RELs | 33.657973% | 3870776 | 11500324 +Total | 34.088560% | 5290884 | 15520996 ## RELs @@ -773,7 +773,7 @@ d_a_tag_theB_hint | 100.000000% | 1136 | 1136 d_a_tag_wara_howl | 100.000000% | 1420 | 1420 d_a_tag_watchge | 100.000000% | 1240 | 1240 d_a_tag_waterfall | 46.361502% | 1580 | 3408 -d_a_tag_wljump | 30.777538% | 1140 | 3704 +d_a_tag_wljump | 45.248380% | 1676 | 3704 d_a_tag_yami | 42.650334% | 1532 | 3592 d_a_talk | 45.434783% | 836 | 1840 d_a_tbox | 30.165503% | 9332 | 30936 @@ -785,4 +785,4 @@ d_a_vrbox2 | 34.977578% | 2184 | 6244 d_a_warp_bug | 54.940711% | 1112 | 2024 d_a_ykgr | 44.400631% | 2252 | 5072 f_pc_profile_lst | 100.000000% | 28156 | 28156 -Total | 33.653313% | 3870240 | 11500324 +Total | 33.657973% | 3870776 | 11500324 diff --git a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/__dt__13daTagWljump_cFv.s b/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/__dt__13daTagWljump_cFv.s deleted file mode 100644 index 6ce0e10a2fe..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/__dt__13daTagWljump_cFv.s +++ /dev/null @@ -1,27 +0,0 @@ -lbl_80D65004: -/* 80D65004 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80D65008 7C 08 02 A6 */ mflr r0 -/* 80D6500C 90 01 00 14 */ stw r0, 0x14(r1) -/* 80D65010 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80D65014 93 C1 00 08 */ stw r30, 8(r1) -/* 80D65018 7C 7E 1B 79 */ or. r30, r3, r3 -/* 80D6501C 7C 9F 23 78 */ mr r31, r4 -/* 80D65020 41 82 00 2C */ beq lbl_80D6504C -/* 80D65024 38 7E 05 78 */ addi r3, r30, 0x578 -/* 80D65028 38 80 FF FF */ li r4, -1 -/* 80D6502C 4B 4E 4F 1D */ bl __dt__10dMsgFlow_cFv -/* 80D65030 7F C3 F3 78 */ mr r3, r30 -/* 80D65034 38 80 00 00 */ li r4, 0 -/* 80D65038 4B 2B 3C 55 */ bl __dt__10fopAc_ac_cFv -/* 80D6503C 7F E0 07 35 */ extsh. r0, r31 -/* 80D65040 40 81 00 0C */ ble lbl_80D6504C -/* 80D65044 7F C3 F3 78 */ mr r3, r30 -/* 80D65048 4B 56 9C F5 */ bl __dl__FPv -lbl_80D6504C: -/* 80D6504C 7F C3 F3 78 */ mr r3, r30 -/* 80D65050 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80D65054 83 C1 00 08 */ lwz r30, 8(r1) -/* 80D65058 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80D6505C 7C 08 03 A6 */ mtlr r0 -/* 80D65060 38 21 00 10 */ addi r1, r1, 0x10 -/* 80D65064 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/create__13daTagWljump_cFv.s b/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/create__13daTagWljump_cFv.s deleted file mode 100644 index 2ad616cea21..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/create__13daTagWljump_cFv.s +++ /dev/null @@ -1,84 +0,0 @@ -lbl_80D64EB8: -/* 80D64EB8 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80D64EBC 7C 08 02 A6 */ mflr r0 -/* 80D64EC0 90 01 00 14 */ stw r0, 0x14(r1) -/* 80D64EC4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 80D64EC8 93 C1 00 08 */ stw r30, 8(r1) -/* 80D64ECC 7C 7F 1B 78 */ mr r31, r3 -/* 80D64ED0 80 03 04 A0 */ lwz r0, 0x4a0(r3) -/* 80D64ED4 54 00 07 39 */ rlwinm. r0, r0, 0, 0x1c, 0x1c -/* 80D64ED8 40 82 00 28 */ bne lbl_80D64F00 -/* 80D64EDC 7F E0 FB 79 */ or. r0, r31, r31 -/* 80D64EE0 41 82 00 14 */ beq lbl_80D64EF4 -/* 80D64EE4 7C 1E 03 78 */ mr r30, r0 -/* 80D64EE8 4B 2B 3C 7D */ bl __ct__10fopAc_ac_cFv -/* 80D64EEC 38 7E 05 78 */ addi r3, r30, 0x578 -/* 80D64EF0 4B 4E 50 11 */ bl __ct__10dMsgFlow_cFv -lbl_80D64EF4: -/* 80D64EF4 80 1F 04 A0 */ lwz r0, 0x4a0(r31) -/* 80D64EF8 60 00 00 08 */ ori r0, r0, 8 -/* 80D64EFC 90 1F 04 A0 */ stw r0, 0x4a0(r31) -lbl_80D64F00: -/* 80D64F00 80 1F 00 B0 */ lwz r0, 0xb0(r31) -/* 80D64F04 54 00 C6 3E */ rlwinm r0, r0, 0x18, 0x18, 0x1f -/* 80D64F08 98 1F 05 71 */ stb r0, 0x571(r31) -/* 80D64F0C 80 1F 00 B0 */ lwz r0, 0xb0(r31) -/* 80D64F10 54 03 06 3E */ clrlwi r3, r0, 0x18 -/* 80D64F14 2C 03 00 FF */ cmpwi r3, 0xff -/* 80D64F18 40 82 00 0C */ bne lbl_80D64F24 -/* 80D64F1C 38 60 00 05 */ li r3, 5 -/* 80D64F20 48 00 00 AC */ b lbl_80D64FCC -lbl_80D64F24: -/* 80D64F24 88 1F 04 E2 */ lbz r0, 0x4e2(r31) -/* 80D64F28 7C 04 07 74 */ extsb r4, r0 -/* 80D64F2C 4B 2E C8 C1 */ bl dPath_GetRoomPath__Fii -/* 80D64F30 90 7F 05 C4 */ stw r3, 0x5c4(r31) -/* 80D64F34 80 7F 05 C4 */ lwz r3, 0x5c4(r31) -/* 80D64F38 28 03 00 00 */ cmplwi r3, 0 -/* 80D64F3C 41 82 00 10 */ beq lbl_80D64F4C -/* 80D64F40 A0 03 00 00 */ lhz r0, 0(r3) -/* 80D64F44 28 00 00 02 */ cmplwi r0, 2 -/* 80D64F48 40 80 00 0C */ bge lbl_80D64F54 -lbl_80D64F4C: -/* 80D64F4C 38 60 00 05 */ li r3, 5 -/* 80D64F50 48 00 00 7C */ b lbl_80D64FCC -lbl_80D64F54: -/* 80D64F54 38 00 00 32 */ li r0, 0x32 -/* 80D64F58 98 1F 05 44 */ stb r0, 0x544(r31) -/* 80D64F5C 98 1F 05 4B */ stb r0, 0x54b(r31) -/* 80D64F60 38 60 00 00 */ li r3, 0 -/* 80D64F64 B0 7F 04 E8 */ sth r3, 0x4e8(r31) -/* 80D64F68 38 00 FF FF */ li r0, -1 -/* 80D64F6C 98 1F 05 68 */ stb r0, 0x568(r31) -/* 80D64F70 80 1F 00 B0 */ lwz r0, 0xb0(r31) -/* 80D64F74 54 00 87 3E */ rlwinm r0, r0, 0x10, 0x1c, 0x1f -/* 80D64F78 98 1F 05 6C */ stb r0, 0x56c(r31) -/* 80D64F7C 88 1F 05 6C */ lbz r0, 0x56c(r31) -/* 80D64F80 28 00 00 01 */ cmplwi r0, 1 -/* 80D64F84 41 82 00 08 */ beq lbl_80D64F8C -/* 80D64F88 98 7F 05 6C */ stb r3, 0x56c(r31) -lbl_80D64F8C: -/* 80D64F8C 88 1F 05 6C */ lbz r0, 0x56c(r31) -/* 80D64F90 28 00 00 00 */ cmplwi r0, 0 -/* 80D64F94 40 82 00 34 */ bne lbl_80D64FC8 -/* 80D64F98 88 9F 05 71 */ lbz r4, 0x571(r31) -/* 80D64F9C 28 04 00 FF */ cmplwi r4, 0xff -/* 80D64FA0 41 82 00 28 */ beq lbl_80D64FC8 -/* 80D64FA4 3C 60 80 40 */ lis r3, g_dComIfG_gameInfo@ha /* 0x804061C0@ha */ -/* 80D64FA8 38 63 61 C0 */ addi r3, r3, g_dComIfG_gameInfo@l /* 0x804061C0@l */ -/* 80D64FAC 88 1F 04 BA */ lbz r0, 0x4ba(r31) -/* 80D64FB0 7C 05 07 74 */ extsb r5, r0 -/* 80D64FB4 4B 2D 03 AD */ bl isSwitch__10dSv_info_cCFii -/* 80D64FB8 2C 03 00 00 */ cmpwi r3, 0 -/* 80D64FBC 40 82 00 0C */ bne lbl_80D64FC8 -/* 80D64FC0 38 00 00 01 */ li r0, 1 -/* 80D64FC4 98 1F 05 73 */ stb r0, 0x573(r31) -lbl_80D64FC8: -/* 80D64FC8 38 60 00 04 */ li r3, 4 -lbl_80D64FCC: -/* 80D64FCC 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80D64FD0 83 C1 00 08 */ lwz r30, 8(r1) -/* 80D64FD4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80D64FD8 7C 08 03 A6 */ mtlr r0 -/* 80D64FDC 38 21 00 10 */ addi r1, r1, 0x10 -/* 80D64FE0 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Create__FP10fopAc_ac_c.s b/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Create__FP10fopAc_ac_c.s deleted file mode 100644 index fb6a2159492..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Create__FP10fopAc_ac_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80D64FE4: -/* 80D64FE4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80D64FE8 7C 08 02 A6 */ mflr r0 -/* 80D64FEC 90 01 00 14 */ stw r0, 0x14(r1) -/* 80D64FF0 4B FF FE C9 */ bl create__13daTagWljump_cFv -/* 80D64FF4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80D64FF8 7C 08 03 A6 */ mtlr r0 -/* 80D64FFC 38 21 00 10 */ addi r1, r1, 0x10 -/* 80D65000 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Delete__FP13daTagWljump_c.s b/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Delete__FP13daTagWljump_c.s deleted file mode 100644 index 6d604c5e6a8..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Delete__FP13daTagWljump_c.s +++ /dev/null @@ -1,11 +0,0 @@ -lbl_80D65068: -/* 80D65068 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80D6506C 7C 08 02 A6 */ mflr r0 -/* 80D65070 90 01 00 14 */ stw r0, 0x14(r1) -/* 80D65074 38 80 FF FF */ li r4, -1 -/* 80D65078 4B FF FF 8D */ bl __dt__13daTagWljump_cFv -/* 80D6507C 38 60 00 01 */ li r3, 1 -/* 80D65080 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80D65084 7C 08 03 A6 */ mtlr r0 -/* 80D65088 38 21 00 10 */ addi r1, r1, 0x10 -/* 80D6508C 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Draw__FP13daTagWljump_c.s b/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Draw__FP13daTagWljump_c.s deleted file mode 100644 index 0455a883fa6..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Draw__FP13daTagWljump_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80D658A4: -/* 80D658A4 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80D658A8 7C 08 02 A6 */ mflr r0 -/* 80D658AC 90 01 00 14 */ stw r0, 0x14(r1) -/* 80D658B0 4B FF FF ED */ bl draw__13daTagWljump_cFv -/* 80D658B4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80D658B8 7C 08 03 A6 */ mtlr r0 -/* 80D658BC 38 21 00 10 */ addi r1, r1, 0x10 -/* 80D658C0 4E 80 00 20 */ blr diff --git a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Execute__FP13daTagWljump_c.s b/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Execute__FP13daTagWljump_c.s deleted file mode 100644 index cf546a30478..00000000000 --- a/asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Execute__FP13daTagWljump_c.s +++ /dev/null @@ -1,9 +0,0 @@ -lbl_80D6587C: -/* 80D6587C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80D65880 7C 08 02 A6 */ mflr r0 -/* 80D65884 90 01 00 14 */ stw r0, 0x14(r1) -/* 80D65888 4B FF F8 09 */ bl execute__13daTagWljump_cFv -/* 80D6588C 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80D65890 7C 08 03 A6 */ mtlr r0 -/* 80D65894 38 21 00 10 */ addi r1, r1, 0x10 -/* 80D65898 4E 80 00 20 */ blr diff --git a/diff_settings.py b/diff_settings.py index 986d3639456..c7971cb6bef 100644 --- a/diff_settings.py +++ b/diff_settings.py @@ -15,6 +15,6 @@ def apply(config, args): ] if args.show_source: config['makeflags'].append('DEBUG=1') - config['source_directories'] = ['src', 'libs', 'include'] + config['source_directories'] = ['src', 'libs', 'include', 'rel'] config['arch'] = 'ppc' config['objdump_executable'] = f"{os.environ['DEVKITPPC']}/bin/powerpc-eabi-objdump" diff --git a/include/d/a/d_a_alink.h b/include/d/a/d_a_alink.h index f918ad216aa..95ba5e5a4b5 100644 --- a/include/d/a/d_a_alink.h +++ b/include/d/a/d_a_alink.h @@ -6243,6 +6243,9 @@ public: class mDoExt_morf_c; +inline BOOL dComIfGs_isTransformLV(int i_no); +inline BOOL i_dComIfGs_isEventBit(const u16); + typedef int (daMidna_c::*daMidna_func)(); class daMidna_c : public fopAc_ac_c { public: @@ -6257,6 +6260,7 @@ public: FLG0_NPC_FAR = 0x40000, FLG0_NO_INPUT = 0x4000, FLG0_NO_DRAW = 0x2000, + FLG0_UNK_800 = 0x800, FLG0_UNK_200 = 0x200, }; @@ -6272,6 +6276,9 @@ public: u32 checkForceNormalColor() const; u32 checkForceTiredColor() const; bool checkMidnaTired(); + bool i_checkMidnaTired() { + return dComIfGs_isTransformLV(3) && !i_dComIfGs_isEventBit(0x1e08); + } void onNoServiceWait(); /* 804BC3E0 */ void modelCallBack(int); /* 804BC5C4 */ void changeUpperBck(); @@ -6330,6 +6337,7 @@ public: BOOL checkNpcFar() { return checkStateFlg0(FLG0_NPC_FAR); } BOOL checkNoDraw() const { return checkStateFlg0(FLG0_NO_DRAW); } BOOL checkNoInput() const { return checkStateFlg0(FLG0_NO_INPUT); } + BOOL checkWolfNoPos() const { return checkStateFlg0(FLG0_UNK_800); } int checkMetamorphoseEnable() { return (this->*mpFunc)(); } int checkShadowModelDrawDemoForce() const { return checkStateFlg1(FLG1_SHADOW_MODEL_DRAW_DEMO_FORCE); } @@ -6362,12 +6370,8 @@ public: return 0; } - int checkShadowModeTalkWait() const { - if (mDemoType != 2 && mDemoType != 1) { - return 0; - } - - return 1; + bool checkShadowModeTalkWait() const { + return (field_0x84e == 2 || field_0x84e == 1) ; } void setShadowReturn() { mDemoType = 4; } diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index ede65e97816..2bb875205d1 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -176,6 +176,7 @@ private: class daMidna_c; class daPy_py_c; inline daPy_py_c* dComIfGp_getLinkPlayer(); +inline BOOL i_dComIfGs_isEventBit(const u16); class daPy_py_c : public fopAc_ac_c { public: @@ -788,6 +789,7 @@ public: inline static BOOL i_checkNowWolf() { return dComIfGp_getLinkPlayer()->i_checkWolf(); } inline bool checkZoraWearFlg() const; inline bool checkMagicArmorWearFlg() const; + inline static BOOL i_checkFirstMidnaDemo() { return i_dComIfGs_isEventBit(0xc10); } static daMidna_c* getMidnaActor() { return m_midnaActor; } diff --git a/include/d/d_attention.h b/include/d/d_attention.h index e011115c264..2ce3e8efb0c 100644 --- a/include/d/d_attention.h +++ b/include/d/d_attention.h @@ -215,6 +215,9 @@ public: int GetActionCount() { return mActionCount; } int GetLockonCount() { return mLockonCount; } bool Lockon() { return LockonTruth() || chkFlag(0x20000000); } // only matches with -O2? + int ZHintRequest(fopAc_ac_c *param_1, int param_2) { + return mZHintTarget.request(param_1, param_2); + } static type_tbl_entry loc_type_tbl[3]; static type_tbl_entry act_type_tbl[5]; diff --git a/include/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h b/include/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h index 510dfa5d8b3..fa13fcbb8c9 100644 --- a/include/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h +++ b/include/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h @@ -2,5 +2,36 @@ #define D_A_TAG_WLJUMP_H #include "dolphin/types.h" +#include "f_op/f_op_actor.h" +#include "d/msg/d_msg_flow.h" +#include "d/com/d_com_inf_game.h" + +struct dPath; + +struct daTagWljump_c : fopAc_ac_c { + /* 80D64EB8 */ int create(); + /* 80D65004 */ ~daTagWljump_c(); + /* 80D65090 */ int execute(); + /* 80D6589C */ int draw(); + + int dComIfGp_att_ZHintRequest(fopAc_ac_c *param_1, int param_2) { + return dComIfGp_getAttention().ZHintRequest(param_1, param_2); + } + + /* 0x568 */ s8 field_0x568; + /* 0x568 */ s8 field_0x569; + /* 0x568 */ u8 field_0x56a; + /* 0x568 */ u8 field_0x56b; + /* 0x56C */ u8 field_0x56c[4]; + /* 0x570 */ u8 field_0x570; + /* 0x571 */ u8 field_0x571; + /* 0x572 */ u8 field_0x572; + /* 0x573 */ u8 field_0x573; + /* 0x574 */ s16 field_0x574; + /* 0x574 */ u16 field_0x576; + /* 0x578 */ dMsgFlow_c mMsgFlow; + /* 0x5C4 */ dPath* field_0x5c4; + /* 0x5C8 */ f32 field_0x5c8; +}; #endif /* D_A_TAG_WLJUMP_H */ diff --git a/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp b/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp index e2c6f35225a..4c29ffb81da 100644 --- a/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp +++ b/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.cpp @@ -6,67 +6,16 @@ #include "rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_path.h" +#include "d/a/d_a_alink.h" +#include "d/d_procname.h" +#include "JSystem/JKernel/JKRHeap.h" // // Types: // -struct fopAc_ac_c { - /* 80018B64 */ fopAc_ac_c(); - /* 80018C8C */ ~fopAc_ac_c(); -}; - -struct daTagWljump_c { - /* 80D64EB8 */ void create(); - /* 80D65004 */ ~daTagWljump_c(); - /* 80D65090 */ void execute(); - /* 80D6589C */ bool draw(); -}; - -struct daPy_py_c { - static u8 m_midnaActor[4]; -}; - -struct dSv_player_status_b_c { - /* 80032BEC */ void isTransformLV(int) const; -}; - -struct dSv_info_c { - /* 80035200 */ void onSwitch(int, int); - /* 80035360 */ void isSwitch(int, int) const; -}; - -struct dSv_event_c { - /* 800349BC */ void isEventBit(u16) const; -}; - -struct dMsgFlow_c { - /* 80249F00 */ dMsgFlow_c(); - /* 80249F48 */ ~dMsgFlow_c(); - /* 80249F90 */ void init(fopAc_ac_c*, int, int, fopAc_ac_c**); - /* 8024A2D8 */ void doFlow(fopAc_ac_c*, fopAc_ac_c**, int); -}; - -struct dEvt_control_c { - /* 80042468 */ void reset(); -}; - -struct dAttHint_c { - /* 800738FC */ void request(fopAc_ac_c*, int); -}; - -struct JAISoundID {}; - -struct Vec {}; - -struct Z2SeMgr { - /* 802AB984 */ void seStart(JAISoundID, Vec const*, u32, s8, f32, f32, f32, f32, u8); -}; - -struct Z2AudioMgr { - static u8 mAudioMgrPtr[4 + 4 /* padding */]; -}; - // // Forward References: // @@ -79,7 +28,6 @@ extern "C" void execute__13daTagWljump_cFv(); extern "C" static void daTagWljump_Execute__FP13daTagWljump_c(); extern "C" bool draw__13daTagWljump_cFv(); extern "C" static void daTagWljump_Draw__FP13daTagWljump_c(); -extern "C" extern void* g_profile_Tag_Wljump[12]; // // External References: @@ -100,13 +48,8 @@ extern "C" void init__10dMsgFlow_cFP10fopAc_ac_ciiPP10fopAc_ac_c(); extern "C" void doFlow__10dMsgFlow_cFP10fopAc_ac_cPP10fopAc_ac_ci(); extern "C" void seStart__7Z2SeMgrF10JAISoundIDPC3VecUlScffffUc(); extern "C" void __dl__FPv(); -extern "C" void PSVECSquareDistance(); extern "C" void _savegpr_26(); extern "C" void _restgpr_26(); -extern "C" extern void* g_fopAc_Method[8]; -extern "C" extern void* g_fpcLf_Method[5 + 1 /* padding */]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; -extern "C" extern u32 __float_nan; extern "C" u8 m_midnaActor__9daPy_py_c[4]; extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; @@ -115,47 +58,215 @@ extern "C" u8 mAudioMgrPtr__10Z2AudioMgr[4 + 4 /* padding */]; // /* 80D64EB8-80D64FE4 000078 012C+00 1/1 0/0 0/0 .text create__13daTagWljump_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void daTagWljump_c::create() { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/create__13daTagWljump_cFv.s" +int daTagWljump_c::create() { + if (!fopAcM_CheckCondition(this, 8)) { + new (this) daTagWljump_c(); + fopAcM_OnCondition(this, 8); + } + u32 param = (fopAcM_GetParam(this) >> 8) & 0xff; + field_0x571 = (u8)param; + s32 uVar2 = fopAcM_GetParam(this); + if ((uVar2 & 0xff) == 0xff) { + return 5; + } + + field_0x5c4 = dPath_GetRoomPath(uVar2 & 0xff, fopAcM_GetRoomNo(this)); + if (field_0x5c4 == NULL || field_0x5c4->m_num < 2) { + return 5; + } + + mAttentionInfo.field_0x0[0] = 0x32; + mAttentionInfo.field_0x4[3] = 0x32; + shape_angle.z = 0; + field_0x568 = -1; + field_0x56c[0] = (fopAcM_GetParam(this) >> 16) & 0xf; + if (field_0x56c[0] != 1) { + field_0x56c[0] = 0; + } + if (field_0x56c[0] == 0 && field_0x571 != 0xff) { + if (dComIfGs_isSwitch(field_0x571, fopAcM_GetHomeRoomNo(this)) == 0) { + field_0x573 = 1; + } + } + return 4; } -#pragma pop /* 80D64FE4-80D65004 0001A4 0020+00 1/0 0/0 0/0 .text daTagWljump_Create__FP10fopAc_ac_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTagWljump_Create(fopAc_ac_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Create__FP10fopAc_ac_c.s" +static int daTagWljump_Create(fopAc_ac_c* param_0) { + return ((daTagWljump_c*)param_0)->create(); } -#pragma pop /* 80D65004-80D65068 0001C4 0064+00 1/1 0/0 0/0 .text __dt__13daTagWljump_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm daTagWljump_c::~daTagWljump_c() { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/__dt__13daTagWljump_cFv.s" +daTagWljump_c::~daTagWljump_c() { } -#pragma pop /* 80D65068-80D65090 000228 0028+00 1/0 0/0 0/0 .text daTagWljump_Delete__FP13daTagWljump_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTagWljump_Delete(daTagWljump_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Delete__FP13daTagWljump_c.s" +static int daTagWljump_Delete(daTagWljump_c* param_0) { + param_0->~daTagWljump_c(); + return 1; } -#pragma pop /* ############################################################################################## */ + +/* 80D65090-80D6587C 000250 07EC+00 1/1 0/0 0/0 .text execute__13daTagWljump_cFv */ +// reg swap +#ifdef NONMATCHING +int daTagWljump_c::execute() { + mAttentionInfo.mFlags = 0; + if (field_0x56c[1]) { + field_0x56c[1]--; + } + + daPy_py_c* linkPlayer = daPy_getLinkPlayerActorClass(); + daMidna_c* midnaActor = daPy_py_c::getMidnaActor(); + + if (midnaActor == NULL) { + return 1; + } + + if (mEvtInfo.checkCommandTalk()) { + s32 bVar2 = 1; + if (!midnaActor->checkShadowModeTalkWait()) { + if (shape_angle.x != 0 && + (field_0x571 == 0xff || + !i_fopAcM_isSwitch(this, field_0x571))) + { + if (field_0x56c[3] == 0) { + mMsgFlow.init(this, shape_angle.x & 0xffff, 0, NULL); + field_0x56c[3] = 1; + mDoAud_seStart(0x10, 0, 0, 0); + } else { + ; + if (mMsgFlow.doFlow(this, NULL, 0)) { + mDoAud_seStart(0x11, 0, 0, 0); + shape_angle.x = 0; + } + } + } else { + field_0x568 = field_0x570; + if (midnaActor->current.pos.abs(mEyePos) < 5.0f) { + bVar2 = 0; + } + } + } + if (bVar2) { + return 1; + } + field_0x56c[3] = 0; + i_dComIfGp_event_reset(); + field_0x56c[0] = 0; + field_0x572 = 1; + if (field_0x571 != 0xff) { + i_fopAcM_onSwitch(this, field_0x571); + } + } else if (!i_dComIfGp_getEvent().i_isOrderOK()) { + field_0x572 = 0; + } else { + if (!midnaActor->checkWolfNoPos()) { + field_0x574++; + if (field_0x574 >= 5) { + field_0x572 = 0; + } + } else { + field_0x574 = 0; + } + } + + if (!linkPlayer->i_checkNowWolf() || + !daPy_py_c::i_checkFirstMidnaDemo() || + midnaActor->i_checkMidnaTired()) { + return 1; + } + if (field_0x571 != 0xff && i_fopAcM_isSwitch(this, field_0x571)) { + field_0x56c[0] = 0; + if (field_0x573) { + field_0x573 = 0; + field_0x572 = 1; + field_0x574 = 0; + } + } + if (field_0x56c[0] != 0 || field_0x572 != 0 || field_0x571 == 0xff || + i_fopAcM_isSwitch(this, field_0x571)) + { + s32 uVar6; + dStage_dPnt_c* pbVar7 = field_0x5c4->m_points; + if (linkPlayer->checkWolfTagLockJumpLand() == 0) { + if (linkPlayer->checkWolfTagLockJump() == 0) { + for (uVar6 = 0; uVar6 < field_0x5c4->m_num; uVar6++, pbVar7++) { + if (linkPlayer->current.pos.abs2(pbVar7->m_position) < pbVar7->field_0x0 * pbVar7->field_0x0 * 10.0f * 10.0f) { + field_0x56a = uVar6; + if (uVar6 == 0) { + field_0x568 = 1; + } else if (uVar6 == field_0x5c4->m_num - 1) { + field_0x568 = uVar6 - 1; + } else { + field_0x568 = uVar6 + 1; + } + break; + } + } + if (uVar6 == field_0x5c4->m_num) { + field_0x568 = -1; + } + } else if (field_0x56b) { + field_0x56b = 0; + if (field_0x56a < field_0x568) { + field_0x568++; + if (field_0x5c4->m_num == field_0x568) { + field_0x568 = 0xff; + } + } else { + field_0x568--; + } + } + } + if (field_0x568 >= 0) { + dStage_dPnt_c* pPoint = &field_0x5c4->m_points[field_0x568]; + mEyePos.set(pPoint->m_position.x, pPoint->m_position.y, pPoint->m_position.z); + mAttentionInfo.mPosition = mEyePos; + mAttentionInfo.mPosition.y += 220.0f; + field_0x5c8 = pPoint->field_0x3 * 10.0f; + if (pPoint->field_0x1 == 1) { + shape_angle.z = 1; + } else { + shape_angle.z = 0; + } + if (field_0x572 == 0) { + if (!g_dComIfG_gameInfo.play.getEvent().runCheck()) { + mEvtInfo.i_onCondition(1); + if (!linkPlayer->checkPlayerFly() && + linkPlayer->mEvtInfo.chkCondition(1)) { + dComIfGp_att_ZHintRequest(this, 0x1ff); + if (field_0x56c[2] == 0) { + field_0x56c[2] = 1; + if (field_0x56c[1] == 0) { + mDoAud_seStart(0xe, 0, 0, 0); + } + field_0x56c[1] = 0x3c; + } + } + } + field_0x570 = field_0x568; + field_0x568 = -1; + } else { + mAttentionInfo.mFlags |= 0x81; + } + } else { + field_0x572 = 0; + } + } else { + field_0x572 = 0; + field_0x568 = -1; + } + current.pos = mAttentionInfo.mPosition; + if (!mEvtInfo.chkCondition(1)) { + field_0x56c[2] = 0; + } + + return 1; +} +#else /* 80D658CC-80D658D0 000000 0004+00 1/1 0/0 0/0 .rodata @4044 */ SECTION_RODATA static f32 const lit_4044 = 1.0f; COMPILER_STRIP_GATE(0x80D658CC, &lit_4044); @@ -254,61 +365,56 @@ SECTION_RODATA static u8 const lit_4055[8] = { COMPILER_STRIP_GATE(0x80D6590C, &lit_4055); #pragma pop -/* 80D65090-80D6587C 000250 07EC+00 1/1 0/0 0/0 .text execute__13daTagWljump_cFv */ #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void daTagWljump_c::execute() { +asm int daTagWljump_c::execute() { nofralloc #include "asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/execute__13daTagWljump_cFv.s" } #pragma pop +#endif /* 80D6587C-80D6589C 000A3C 0020+00 1/0 0/0 0/0 .text daTagWljump_Execute__FP13daTagWljump_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTagWljump_Execute(daTagWljump_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Execute__FP13daTagWljump_c.s" +static int daTagWljump_Execute(daTagWljump_c* param_0) { + return param_0->execute(); } -#pragma pop /* 80D6589C-80D658A4 000A5C 0008+00 1/1 0/0 0/0 .text draw__13daTagWljump_cFv */ -bool daTagWljump_c::draw() { - return true; +int daTagWljump_c::draw() { + return 1; } /* 80D658A4-80D658C4 000A64 0020+00 1/0 0/0 0/0 .text daTagWljump_Draw__FP13daTagWljump_c */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -static asm void daTagWljump_Draw(daTagWljump_c* param_0) { - nofralloc -#include "asm/rel/d/a/tag/d_a_tag_wljump/d_a_tag_wljump/daTagWljump_Draw__FP13daTagWljump_c.s" +static int daTagWljump_Draw(daTagWljump_c* param_0) { + return param_0->draw(); } -#pragma pop /* ############################################################################################## */ /* 80D65914-80D65934 -00001 0020+00 1/0 0/0 0/0 .data l_daTagWljump_Method */ -SECTION_DATA static void* l_daTagWljump_Method[8] = { - (void*)daTagWljump_Create__FP10fopAc_ac_c, - (void*)daTagWljump_Delete__FP13daTagWljump_c, - (void*)daTagWljump_Execute__FP13daTagWljump_c, - (void*)NULL, - (void*)daTagWljump_Draw__FP13daTagWljump_c, - (void*)NULL, - (void*)NULL, - (void*)NULL, +static actor_method_class l_daTagWljump_Method = { + (process_method_func)daTagWljump_Create, + (process_method_func)daTagWljump_Delete, + (process_method_func)daTagWljump_Execute, + NULL, + (process_method_func)daTagWljump_Draw, }; /* 80D65934-80D65964 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Tag_Wljump */ -SECTION_DATA extern void* g_profile_Tag_Wljump[12] = { - (void*)0xFFFFFFFD, (void*)0x0007FFFD, - (void*)0x02C70000, (void*)&g_fpcLf_Method, - (void*)0x000005CC, (void*)NULL, - (void*)NULL, (void*)&g_fopAc_Method, - (void*)0x01040000, (void*)&l_daTagWljump_Method, - (void*)0x00044000, (void*)0x030E0000, +extern actor_process_profile_definition g_profile_Tag_Wljump = { + -3, + 7, + -3, + PROC_Tag_Wljump, + &g_fpcLf_Method.mBase, + sizeof(daTagWljump_c), + 0, + 0, + &g_fopAc_Method.base, + 0x0104, + &l_daTagWljump_Method, + 0x00044000, + 3, + 0x0E, };