From c9a0ee8430f549ba7cd03c708e28017b3c07b476 Mon Sep 17 00:00:00 2001 From: Trueffel <106771418+Trueffeloot@users.noreply.github.com> Date: Tue, 7 Mar 2023 05:31:32 +0100 Subject: [PATCH] Some work on d_menu_fishing (#304) * Some work on d_menu_fishing * pr improved based on comments * forgot ./tp pull-request --- Progress.md | 8 +- ..._cFP10JKRExpHeapP9STControlP10CSTControl.s | 18 --- .../_create__15dMenu_Fishing_cFv.s | 28 ---- .../getFigure__15dMenu_Fishing_cFi.s | 21 --- .../isSync__15dMenu_Fishing_cFv.s | 12 -- .../wait_init__15dMenu_Fishing_cFv.s | 16 -- .../wait_move__15dMenu_Fishing_cFv.s | 13 -- include/d/menu/d_menu_fishing.h | 7 +- src/d/menu/d_menu_fishing.cpp | 141 ++++++++---------- 9 files changed, 72 insertions(+), 192 deletions(-) delete mode 100644 asm/d/menu/d_menu_fishing/__ct__15dMenu_Fishing_cFP10JKRExpHeapP9STControlP10CSTControl.s delete mode 100644 asm/d/menu/d_menu_fishing/_create__15dMenu_Fishing_cFv.s delete mode 100644 asm/d/menu/d_menu_fishing/getFigure__15dMenu_Fishing_cFi.s delete mode 100644 asm/d/menu/d_menu_fishing/isSync__15dMenu_Fishing_cFv.s delete mode 100644 asm/d/menu/d_menu_fishing/wait_init__15dMenu_Fishing_cFv.s delete mode 100644 asm/d/menu/d_menu_fishing/wait_move__15dMenu_Fishing_cFv.s diff --git a/Progress.md b/Progress.md index 30bb0aedf0..e572d9cb90 100644 --- a/Progress.md +++ b/Progress.md @@ -7,22 +7,22 @@ Section | Percentage | Decompiled (bytes) | Total (bytes) .init | 97.972973% | 9280 | 9472 .extab | 100.000000% | 96 | 96 .extabindex | 100.000000% | 96 | 96 -.text | 25.173611% | 905380 | 3596544 +.text | 25.184399% | 905768 | 3596544 .ctors | 100.000000% | 448 | 448 .dtors | 100.000000% | 32 | 32 .rodata | 100.000000% | 193856 | 193856 .data | 100.000000% | 197632 | 197632 .sdata | 100.000000% | 1408 | 1408 .sdata2 | 100.000000% | 20832 | 20832 -Total | 33.062035% | 1329316 | 4020672 +Total | 33.071686% | 1329704 | 4020672 ## Total Section | Percentage | Decompiled (bytes) | Total (bytes) ---|---|---|--- -main.dol | 33.062035% | 1329316 | 4020672 +main.dol | 33.071686% | 1329704 | 4020672 RELs | 33.385425% | 3839432 | 11500324 -Total | 33.301652% | 5168748 | 15520996 +Total | 33.304151% | 5169136 | 15520996 ## RELs diff --git a/asm/d/menu/d_menu_fishing/__ct__15dMenu_Fishing_cFP10JKRExpHeapP9STControlP10CSTControl.s b/asm/d/menu/d_menu_fishing/__ct__15dMenu_Fishing_cFP10JKRExpHeapP9STControlP10CSTControl.s deleted file mode 100644 index 96413b0f84..0000000000 --- a/asm/d/menu/d_menu_fishing/__ct__15dMenu_Fishing_cFP10JKRExpHeapP9STControlP10CSTControl.s +++ /dev/null @@ -1,18 +0,0 @@ -lbl_801C4D54: -/* 801C4D54 3C E0 80 3A */ lis r7, __vt__12dDlst_base_c@ha /* 0x803A6F88@ha */ -/* 801C4D58 38 07 6F 88 */ addi r0, r7, __vt__12dDlst_base_c@l /* 0x803A6F88@l */ -/* 801C4D5C 90 03 00 00 */ stw r0, 0(r3) -/* 801C4D60 3C E0 80 3C */ lis r7, __vt__15dMenu_Fishing_c@ha /* 0x803BD074@ha */ -/* 801C4D64 38 07 D0 74 */ addi r0, r7, __vt__15dMenu_Fishing_c@l /* 0x803BD074@l */ -/* 801C4D68 90 03 00 00 */ stw r0, 0(r3) -/* 801C4D6C 90 83 00 04 */ stw r4, 4(r3) -/* 801C4D70 38 80 00 00 */ li r4, 0 -/* 801C4D74 90 83 00 08 */ stw r4, 8(r3) -/* 801C4D78 90 83 00 14 */ stw r4, 0x14(r3) -/* 801C4D7C 90 A3 00 0C */ stw r5, 0xc(r3) -/* 801C4D80 90 C3 00 10 */ stw r6, 0x10(r3) -/* 801C4D84 38 00 00 01 */ li r0, 1 -/* 801C4D88 98 03 01 FA */ stb r0, 0x1fa(r3) -/* 801C4D8C 98 83 01 FB */ stb r4, 0x1fb(r3) -/* 801C4D90 B0 83 01 F8 */ sth r4, 0x1f8(r3) -/* 801C4D94 4E 80 00 20 */ blr diff --git a/asm/d/menu/d_menu_fishing/_create__15dMenu_Fishing_cFv.s b/asm/d/menu/d_menu_fishing/_create__15dMenu_Fishing_cFv.s deleted file mode 100644 index 7b43fb7f4f..0000000000 --- a/asm/d/menu/d_menu_fishing/_create__15dMenu_Fishing_cFv.s +++ /dev/null @@ -1,28 +0,0 @@ -lbl_801C504C: -/* 801C504C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801C5050 7C 08 02 A6 */ mflr r0 -/* 801C5054 90 01 00 14 */ stw r0, 0x14(r1) -/* 801C5058 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801C505C 7C 7F 1B 78 */ mr r31, r3 -/* 801C5060 38 60 00 2C */ li r3, 0x2c -/* 801C5064 48 10 9B E9 */ bl __nw__FUl -/* 801C5068 7C 60 1B 79 */ or. r0, r3, r3 -/* 801C506C 41 82 00 0C */ beq lbl_801C5078 -/* 801C5070 48 08 4B B1 */ bl __ct__12dMsgString_cFv -/* 801C5074 7C 60 1B 78 */ mr r0, r3 -lbl_801C5078: -/* 801C5078 90 1F 01 F4 */ stw r0, 0x1f4(r31) -/* 801C507C 7F E3 FB 78 */ mr r3, r31 -/* 801C5080 48 00 05 59 */ bl screenSetBase__15dMenu_Fishing_cFv -/* 801C5084 7F E3 FB 78 */ mr r3, r31 -/* 801C5088 48 00 0C B5 */ bl screenSetDoIcon__15dMenu_Fishing_cFv -/* 801C508C 7F E3 FB 78 */ mr r3, r31 -/* 801C5090 38 80 00 01 */ li r4, 1 -/* 801C5094 48 00 11 7D */ bl setHIO__15dMenu_Fishing_cFb -/* 801C5098 7F E3 FB 78 */ mr r3, r31 -/* 801C509C 48 00 01 91 */ bl init__15dMenu_Fishing_cFv -/* 801C50A0 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801C50A4 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801C50A8 7C 08 03 A6 */ mtlr r0 -/* 801C50AC 38 21 00 10 */ addi r1, r1, 0x10 -/* 801C50B0 4E 80 00 20 */ blr diff --git a/asm/d/menu/d_menu_fishing/getFigure__15dMenu_Fishing_cFi.s b/asm/d/menu/d_menu_fishing/getFigure__15dMenu_Fishing_cFi.s deleted file mode 100644 index 3ef2d58a5f..0000000000 --- a/asm/d/menu/d_menu_fishing/getFigure__15dMenu_Fishing_cFi.s +++ /dev/null @@ -1,21 +0,0 @@ -lbl_801C6018: -/* 801C6018 2C 04 00 00 */ cmpwi r4, 0 -/* 801C601C 40 80 00 08 */ bge lbl_801C6024 -/* 801C6020 1C 84 FF FF */ mulli r4, r4, -1 -lbl_801C6024: -/* 801C6024 2C 04 03 E8 */ cmpwi r4, 0x3e8 -/* 801C6028 41 80 00 08 */ blt lbl_801C6030 -/* 801C602C 38 80 03 E7 */ li r4, 0x3e7 -lbl_801C6030: -/* 801C6030 2C 04 00 64 */ cmpwi r4, 0x64 -/* 801C6034 41 80 00 0C */ blt lbl_801C6040 -/* 801C6038 38 60 00 03 */ li r3, 3 -/* 801C603C 4E 80 00 20 */ blr -lbl_801C6040: -/* 801C6040 38 00 00 0A */ li r0, 0xa -/* 801C6044 7C 85 FE 70 */ srawi r5, r4, 0x1f -/* 801C6048 54 03 0F FE */ srwi r3, r0, 0x1f -/* 801C604C 7C 00 20 10 */ subfc r0, r0, r4 -/* 801C6050 7C 65 19 14 */ adde r3, r5, r3 -/* 801C6054 38 63 00 01 */ addi r3, r3, 1 -/* 801C6058 4E 80 00 20 */ blr diff --git a/asm/d/menu/d_menu_fishing/isSync__15dMenu_Fishing_cFv.s b/asm/d/menu/d_menu_fishing/isSync__15dMenu_Fishing_cFv.s deleted file mode 100644 index ffa2c1400d..0000000000 --- a/asm/d/menu/d_menu_fishing/isSync__15dMenu_Fishing_cFv.s +++ /dev/null @@ -1,12 +0,0 @@ -lbl_801C5204: -/* 801C5204 80 63 00 14 */ lwz r3, 0x14(r3) -/* 801C5208 28 03 00 00 */ cmplwi r3, 0 -/* 801C520C 41 82 00 18 */ beq lbl_801C5224 -/* 801C5210 88 03 00 0C */ lbz r0, 0xc(r3) -/* 801C5214 2C 00 00 00 */ cmpwi r0, 0 -/* 801C5218 40 82 00 0C */ bne lbl_801C5224 -/* 801C521C 38 60 00 00 */ li r3, 0 -/* 801C5220 4E 80 00 20 */ blr -lbl_801C5224: -/* 801C5224 38 60 00 01 */ li r3, 1 -/* 801C5228 4E 80 00 20 */ blr diff --git a/asm/d/menu/d_menu_fishing/wait_init__15dMenu_Fishing_cFv.s b/asm/d/menu/d_menu_fishing/wait_init__15dMenu_Fishing_cFv.s deleted file mode 100644 index c545189a3d..0000000000 --- a/asm/d/menu/d_menu_fishing/wait_init__15dMenu_Fishing_cFv.s +++ /dev/null @@ -1,16 +0,0 @@ -lbl_801C556C: -/* 801C556C 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801C5570 7C 08 02 A6 */ mflr r0 -/* 801C5574 90 01 00 14 */ stw r0, 0x14(r1) -/* 801C5578 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801C557C 7C 7F 1B 78 */ mr r31, r3 -/* 801C5580 38 80 00 00 */ li r4, 0 -/* 801C5584 48 00 09 35 */ bl setAButtonString__15dMenu_Fishing_cFUs -/* 801C5588 7F E3 FB 78 */ mr r3, r31 -/* 801C558C 38 80 03 F9 */ li r4, 0x3f9 -/* 801C5590 48 00 09 D9 */ bl setBButtonString__15dMenu_Fishing_cFUs -/* 801C5594 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 801C5598 80 01 00 14 */ lwz r0, 0x14(r1) -/* 801C559C 7C 08 03 A6 */ mtlr r0 -/* 801C55A0 38 21 00 10 */ addi r1, r1, 0x10 -/* 801C55A4 4E 80 00 20 */ blr diff --git a/asm/d/menu/d_menu_fishing/wait_move__15dMenu_Fishing_cFv.s b/asm/d/menu/d_menu_fishing/wait_move__15dMenu_Fishing_cFv.s deleted file mode 100644 index 9a6ba567fe..0000000000 --- a/asm/d/menu/d_menu_fishing/wait_move__15dMenu_Fishing_cFv.s +++ /dev/null @@ -1,13 +0,0 @@ -lbl_801C55A8: -/* 801C55A8 80 8D 86 48 */ lwz r4, mFader__13mDoGph_gInf_c(r13) -/* 801C55AC 80 04 00 04 */ lwz r0, 4(r4) -/* 801C55B0 2C 00 00 01 */ cmpwi r0, 1 -/* 801C55B4 4C 82 00 20 */ bnelr -/* 801C55B8 3C 80 80 3E */ lis r4, m_cpadInfo__8mDoCPd_c@ha /* 0x803DD2E8@ha */ -/* 801C55BC 38 84 D2 E8 */ addi r4, r4, m_cpadInfo__8mDoCPd_c@l /* 0x803DD2E8@l */ -/* 801C55C0 80 04 00 34 */ lwz r0, 0x34(r4) -/* 801C55C4 54 00 05 AD */ rlwinm. r0, r0, 0, 0x16, 0x16 -/* 801C55C8 4D 82 00 20 */ beqlr -/* 801C55CC 38 00 00 03 */ li r0, 3 -/* 801C55D0 98 03 01 FA */ stb r0, 0x1fa(r3) -/* 801C55D4 4E 80 00 20 */ blr diff --git a/include/d/menu/d_menu_fishing.h b/include/d/menu/d_menu_fishing.h index 77e156dc90..5bc8d58e60 100644 --- a/include/d/menu/d_menu_fishing.h +++ b/include/d/menu/d_menu_fishing.h @@ -5,9 +5,10 @@ #include "d/d_lib.h" #include "d/d_select_cursor.h" #include "dolphin/types.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "d/msg/d_msg_string.h" + -class mDoDvdThd_mountArchive_c; -class dMsgString_c; class dMenu_Fishing_c : public dDlst_base_c { public: @@ -25,7 +26,7 @@ public: /* 801C5D3C */ void screenSetDoIcon(); /* 801C5EB8 */ void setAButtonString(u16); /* 801C5F68 */ void setBButtonString(u16); - /* 801C6018 */ void getFigure(int); + /* 801C6018 */ int getFigure(int); /* 801C605C */ void setFishParam(int, u16, u8); /* 801C6210 */ void setHIO(bool); diff --git a/src/d/menu/d_menu_fishing.cpp b/src/d/menu/d_menu_fishing.cpp index 457a8d34c5..48bef773fd 100644 --- a/src/d/menu/d_menu_fishing.cpp +++ b/src/d/menu/d_menu_fishing.cpp @@ -1,38 +1,14 @@ -// -// Generated By: dol2asm -// Translation Unit: d/menu/d_menu_fishing -// +/** + * d_menu_fishing.cpp + * Fish Journal + */ #include "d/menu/d_menu_fishing.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "m_Do/m_Do_controller_pad.h" +#include "m_Do/m_Do_graphic.h" -// -// Types: -// - -struct mDoGph_gInf_c { - static u8 mFader[4]; -}; - -struct mDoDvdThd_mountArchive_c { - /* 80015E14 */ void create(char const*, u8, JKRHeap*); -}; - -struct mDoCPd_c { - static u8 m_cpadInfo[256]; -}; - -struct dMsgString_c { - /* 80249C20 */ dMsgString_c(); - /* 80249D28 */ ~dMsgString_c(); -}; - -struct JMSMesgEntry_c {}; - -struct dMeter2Info_c { - /* 8021C544 */ void getStringKanji(u32, char*, JMSMesgEntry_c*); -}; // // Forward References: @@ -102,9 +78,9 @@ extern "C" void _restgpr_28(); extern "C" void _restgpr_29(); extern "C" extern void* __vt__12dDlst_base_c[3]; extern "C" u8 m_cpadInfo__8mDoCPd_c[256]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; + extern "C" extern u8 g_drawHIO[3880]; -extern "C" extern u8 g_meter2_info[248]; + extern "C" u8 mFader__13mDoGph_gInf_c[4]; // @@ -161,14 +137,17 @@ SECTION_DATA extern void* __vt__15dMenu_Fishing_c[4 + 3 /* padding */] = { /* 801C4D54-801C4D98 1BF694 0044+00 0/0 2/2 0/0 .text * __ct__15dMenu_Fishing_cFP10JKRExpHeapP9STControlP10CSTControl */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm dMenu_Fishing_c::dMenu_Fishing_c(JKRExpHeap* param_0, STControl* param_1, CSTControl* param_2) { - nofralloc -#include "asm/d/menu/d_menu_fishing/__ct__15dMenu_Fishing_cFP10JKRExpHeapP9STControlP10CSTControl.s" +dMenu_Fishing_c::dMenu_Fishing_c(JKRExpHeap* heap, STControl* stControl, CSTControl* cstControl) { + mpHeap = heap; + field_0x8 = 0; + field_0x14 = 0; + mpStick = stControl; + mpCStick = cstControl; + mStatus = 1; + field_0x1fb = 0; + field_0x1f8 = 0; + } -#pragma pop /* 801C4D98-801C504C 1BF6D8 02B4+00 1/0 0/0 0/0 .text __dt__15dMenu_Fishing_cFv */ #pragma push @@ -178,17 +157,16 @@ asm dMenu_Fishing_c::~dMenu_Fishing_c() { nofralloc #include "asm/d/menu/d_menu_fishing/__dt__15dMenu_Fishing_cFv.s" } -#pragma pop +#pragma pop /* 801C504C-801C50B4 1BF98C 0068+00 1/1 0/0 0/0 .text _create__15dMenu_Fishing_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMenu_Fishing_c::_create() { - nofralloc -#include "asm/d/menu/d_menu_fishing/_create__15dMenu_Fishing_cFv.s" +void dMenu_Fishing_c::_create() { + mpString = new dMsgString_c(); + screenSetBase(); + screenSetDoIcon(); + setHIO(true); + init(); } -#pragma pop /* 801C50B4-801C514C 1BF9F4 0098+00 0/0 2/2 0/0 .text _move__15dMenu_Fishing_cFv */ #pragma push @@ -216,6 +194,18 @@ SECTION_SDATA2 static f32 lit_3905 = 608.0f; SECTION_SDATA2 static f32 lit_3906 = 448.0f; /* 801C514C-801C5204 1BFA8C 00B8+00 1/1 1/1 0/0 .text _draw__15dMenu_Fishing_cFv */ +#ifdef NONMATCHING +// u8 lit_3904 +void dMenu_Fishing_c::_draw() { + if (field_0x8) { + J2DGrafContext* pJVar1 = dComIfGp_getCurrentGrafPort(); + mpBlackTex->setAlpha(0xff); + mpBlackTex->draw(0,0,lit_3905,lit_3906,0,0,0); + mpScreen->draw(0,0,pJVar1); + mpIconScreen->draw(0,0,pJVar1); + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -224,16 +214,15 @@ asm void dMenu_Fishing_c::_draw() { #include "asm/d/menu/d_menu_fishing/_draw__15dMenu_Fishing_cFv.s" } #pragma pop +#endif /* 801C5204-801C522C 1BFB44 0028+00 0/0 2/2 0/0 .text isSync__15dMenu_Fishing_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm bool dMenu_Fishing_c::isSync() { - nofralloc -#include "asm/d/menu/d_menu_fishing/isSync__15dMenu_Fishing_cFv.s" +bool dMenu_Fishing_c::isSync() { + if (field_0x14 && !field_0x14->sync()) { + return false; + } + return true; } -#pragma pop /* 801C522C-801C52E4 1BFB6C 00B8+00 1/1 0/0 0/0 .text init__15dMenu_Fishing_cFv */ #pragma push @@ -243,7 +232,7 @@ asm void dMenu_Fishing_c::init() { nofralloc #include "asm/d/menu/d_menu_fishing/init__15dMenu_Fishing_cFv.s" } -#pragma pop +#pragma pop /* ############################################################################################## */ /* 80396068-80396068 0226C8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */ @@ -279,24 +268,17 @@ asm void dMenu_Fishing_c::_close() { #pragma pop /* 801C556C-801C55A8 1BFEAC 003C+00 1/0 0/0 0/0 .text wait_init__15dMenu_Fishing_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMenu_Fishing_c::wait_init() { - nofralloc -#include "asm/d/menu/d_menu_fishing/wait_init__15dMenu_Fishing_cFv.s" +void dMenu_Fishing_c::wait_init() { + setAButtonString(0); + setBButtonString(0x3f9); } -#pragma pop /* 801C55A8-801C55D8 1BFEE8 0030+00 1/0 0/0 0/0 .text wait_move__15dMenu_Fishing_cFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMenu_Fishing_c::wait_move() { - nofralloc -#include "asm/d/menu/d_menu_fishing/wait_move__15dMenu_Fishing_cFv.s" +void dMenu_Fishing_c::wait_move() { + if (mDoGph_gInf_c::getFader()->getStatus() == 1 && mDoCPd_c::getTrigB(0)) { + mStatus = 3; + } } -#pragma pop /* ############################################################################################## */ /* 80395D90-80395DC0 0223F0 0030+00 1/1 0/0 0/0 .rodata fish_n$4060 */ @@ -524,14 +506,19 @@ asm void dMenu_Fishing_c::setBButtonString(u16 param_0) { #pragma pop /* 801C6018-801C605C 1C0958 0044+00 1/1 0/0 0/0 .text getFigure__15dMenu_Fishing_cFi */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dMenu_Fishing_c::getFigure(int param_0) { - nofralloc -#include "asm/d/menu/d_menu_fishing/getFigure__15dMenu_Fishing_cFi.s" +int dMenu_Fishing_c::getFigure(int param_0) { + + if (param_0 < 0) { + param_0 *= -1; + } + if (1000 <= param_0) { + param_0 = 999; + } + if (100 <= param_0) { + return 3; + } + return (param_0 >= 10) ? 2 : 1; } -#pragma pop /* 801C605C-801C6210 1C099C 01B4+00 1/1 0/0 0/0 .text setFishParam__15dMenu_Fishing_cFiUsUc */ #pragma push @@ -562,7 +549,7 @@ extern "C" asm void draw__15dMenu_Fishing_cFv() { nofralloc #include "asm/d/menu/d_menu_fishing/draw__15dMenu_Fishing_cFv.s" } -#pragma pop +#pragma pop /* 801C65BC-801C65F8 1C0EFC 003C+00 0/0 1/0 0/0 .text __sinit_d_menu_fishing_cpp */ #pragma push