From 082f5b40af19dfe0e756bc476e05f91136f3b337 Mon Sep 17 00:00:00 2001 From: Pheenoh Date: Mon, 26 Dec 2022 22:53:24 -0700 Subject: [PATCH] d_select_cursor first pass (#221) --- ...veCenter__16dSelect_cursor_cFP7J2DPaneff.s | 15 -- .../setAlphaRate__16dSelect_cursor_cFf.s | 39 ---- ...16dSelect_cursor_cFP18J2DAnmTransformKey.s | 25 --- .../setParam__16dSelect_cursor_cFfffff.s | 7 - include/d/d_select_cursor.h | 35 +++- src/d/cc/d_cc_d_nonmatching.cpp | 2 +- src/d/d_select_cursor.cpp | 166 ++++++++++++++---- 7 files changed, 162 insertions(+), 127 deletions(-) delete mode 100644 asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s delete mode 100644 asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s delete mode 100644 asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s delete mode 100644 asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s diff --git a/asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s b/asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s deleted file mode 100644 index c875b81224e..00000000000 --- a/asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s +++ /dev/null @@ -1,15 +0,0 @@ -lbl_80195940: -/* 80195940 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 80195944 7C 08 02 A6 */ mflr r0 -/* 80195948 90 01 00 14 */ stw r0, 0x14(r1) -/* 8019594C D0 24 00 D4 */ stfs f1, 0xd4(r4) -/* 80195950 D0 44 00 D8 */ stfs f2, 0xd8(r4) -/* 80195954 7C 83 23 78 */ mr r3, r4 -/* 80195958 81 84 00 00 */ lwz r12, 0(r4) -/* 8019595C 81 8C 00 2C */ lwz r12, 0x2c(r12) -/* 80195960 7D 89 03 A6 */ mtctr r12 -/* 80195964 4E 80 04 21 */ bctrl -/* 80195968 80 01 00 14 */ lwz r0, 0x14(r1) -/* 8019596C 7C 08 03 A6 */ mtlr r0 -/* 80195970 38 21 00 10 */ addi r1, r1, 0x10 -/* 80195974 4E 80 00 20 */ blr diff --git a/asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s b/asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s deleted file mode 100644 index 7359654ad68..00000000000 --- a/asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s +++ /dev/null @@ -1,39 +0,0 @@ -lbl_801952A0: -/* 801952A0 94 21 FF E0 */ stwu r1, -0x20(r1) -/* 801952A4 7C 08 02 A6 */ mflr r0 -/* 801952A8 90 01 00 24 */ stw r0, 0x24(r1) -/* 801952AC DB E1 00 10 */ stfd f31, 0x10(r1) -/* 801952B0 F3 E1 00 18 */ psq_st f31, 24(r1), 0, 0 /* qr0 */ -/* 801952B4 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801952B8 7C 7F 1B 78 */ mr r31, r3 -/* 801952BC FF E0 08 90 */ fmr f31, f1 -/* 801952C0 C0 02 A0 50 */ lfs f0, lit_3808(r2) -/* 801952C4 FC 1F 00 40 */ fcmpo cr0, f31, f0 -/* 801952C8 40 81 00 20 */ ble lbl_801952E8 -/* 801952CC 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801952D0 48 0C 03 7D */ bl isVisible__13CPaneMgrAlphaFv -/* 801952D4 54 60 06 3F */ clrlwi. r0, r3, 0x18 -/* 801952D8 40 82 00 30 */ bne lbl_80195308 -/* 801952DC 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801952E0 48 0C 02 E9 */ bl show__13CPaneMgrAlphaFv -/* 801952E4 48 00 00 24 */ b lbl_80195308 -lbl_801952E8: -/* 801952E8 FF E0 00 90 */ fmr f31, f0 -/* 801952EC 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 801952F0 48 0C 03 5D */ bl isVisible__13CPaneMgrAlphaFv -/* 801952F4 54 60 06 3E */ clrlwi r0, r3, 0x18 -/* 801952F8 28 00 00 01 */ cmplwi r0, 1 -/* 801952FC 40 82 00 0C */ bne lbl_80195308 -/* 80195300 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 80195304 48 0C 03 05 */ bl hide__13CPaneMgrAlphaFv -lbl_80195308: -/* 80195308 80 7F 00 10 */ lwz r3, 0x10(r31) -/* 8019530C FC 20 F8 90 */ fmr f1, f31 -/* 80195310 48 0C 04 C1 */ bl setAlphaRate__13CPaneMgrAlphaFf -/* 80195314 E3 E1 00 18 */ psq_l f31, 24(r1), 0, 0 /* qr0 */ -/* 80195318 CB E1 00 10 */ lfd f31, 0x10(r1) -/* 8019531C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80195320 80 01 00 24 */ lwz r0, 0x24(r1) -/* 80195324 7C 08 03 A6 */ mtlr r0 -/* 80195328 38 21 00 20 */ addi r1, r1, 0x20 -/* 8019532C 4E 80 00 20 */ blr diff --git a/asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s b/asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s deleted file mode 100644 index f98dacc811a..00000000000 --- a/asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s +++ /dev/null @@ -1,25 +0,0 @@ -lbl_801958E0: -/* 801958E0 94 21 FF F0 */ stwu r1, -0x10(r1) -/* 801958E4 7C 08 02 A6 */ mflr r0 -/* 801958E8 90 01 00 14 */ stw r0, 0x14(r1) -/* 801958EC 93 E1 00 0C */ stw r31, 0xc(r1) -/* 801958F0 7C 9F 23 78 */ mr r31, r4 -/* 801958F4 80 63 00 04 */ lwz r3, 4(r3) -/* 801958F8 3C 80 5F 69 */ lis r4, 0x5F69 /* 0x5F69636F@ha */ -/* 801958FC 38 C4 63 6F */ addi r6, r4, 0x636F /* 0x5F69636F@l */ -/* 80195900 3C 80 73 73 */ lis r4, 0x7373 /* 0x7373656C@ha */ -/* 80195904 38 A4 65 6C */ addi r5, r4, 0x656C /* 0x7373656C@l */ -/* 80195908 81 83 00 00 */ lwz r12, 0(r3) -/* 8019590C 81 8C 00 3C */ lwz r12, 0x3c(r12) -/* 80195910 7D 89 03 A6 */ mtctr r12 -/* 80195914 4E 80 04 21 */ bctrl -/* 80195918 7F E4 FB 78 */ mr r4, r31 -/* 8019591C 81 83 00 00 */ lwz r12, 0(r3) -/* 80195920 81 8C 00 60 */ lwz r12, 0x60(r12) -/* 80195924 7D 89 03 A6 */ mtctr r12 -/* 80195928 4E 80 04 21 */ bctrl -/* 8019592C 83 E1 00 0C */ lwz r31, 0xc(r1) -/* 80195930 80 01 00 14 */ lwz r0, 0x14(r1) -/* 80195934 7C 08 03 A6 */ mtlr r0 -/* 80195938 38 21 00 10 */ addi r1, r1, 0x10 -/* 8019593C 4E 80 00 20 */ blr diff --git a/asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s b/asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s deleted file mode 100644 index 9d4e0fd83d9..00000000000 --- a/asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s +++ /dev/null @@ -1,7 +0,0 @@ -lbl_801951B0: -/* 801951B0 D0 23 00 60 */ stfs f1, 0x60(r3) -/* 801951B4 D0 43 00 64 */ stfs f2, 0x64(r3) -/* 801951B8 D0 63 00 68 */ stfs f3, 0x68(r3) -/* 801951BC D0 83 00 6C */ stfs f4, 0x6c(r3) -/* 801951C0 D0 A3 00 70 */ stfs f5, 0x70(r3) -/* 801951C4 4E 80 00 20 */ blr diff --git a/include/d/d_select_cursor.h b/include/d/d_select_cursor.h index eee23d7f3a5..e9d3f70360f 100644 --- a/include/d/d_select_cursor.h +++ b/include/d/d_select_cursor.h @@ -4,6 +4,8 @@ #include "d/d_drawlist.h" #include "d/d_select_icon.h" #include "dolphin/types.h" +#include "JSystem/J2DGraph/J2DScreen.h" +#include "JSystem/J2DGraph/J2DPane.h" class dSelect_cursorHIO_c { public: @@ -31,8 +33,8 @@ public: /* 801951B0 */ void setParam(f32, f32, f32, f32, f32); /* 801951C8 */ void setScale(f32); /* 801952A0 */ void setAlphaRate(f32); - /* 80195330 */ void addAlpha(); - /* 801953CC */ void decAlpha(); + /* 80195330 */ int addAlpha(); + /* 801953CC */ int decAlpha(); /* 80195460 */ void setBpkAnimation(J2DAnmColor*); /* 801955F0 */ void setBtk0Animation(J2DAnmTextureSRTKey*); /* 80195724 */ void setCursorAnimation(); @@ -43,15 +45,32 @@ public: /* 801949EC */ virtual ~dSelect_cursor_c(); void setPos(f32 x, f32 y) { - field_0x58 = x; - field_0x5c = y; + mPositionX = x; + mPositionY = y; } private: - u8 field_0x4[0x54]; - f32 field_0x58; - f32 field_0x5c; - u8 field_0x60[0x58]; + /* 0x04 */ J2DScreen* mpScreen; + /* 0x08 */ J2DPane* mpPane; + /* 0x0C */ dSelect_icon_c* mpSelectIcon; + /* 0x10 */ CPaneMgr* mpPaneMgr; + /* 0x14 */ u8 field_0x14[40]; + /* 0x3C */ dSelect_cursorHIO_c* mpCursorHIO; + /* 0x40 */ u8 field_0x40[16]; + /* 0x50 */ f32 field_0x50; + /* 0x54 */ f32 field_0x54; + /* 0x58 */ f32 mPositionX; + /* 0x5C */ f32 mPositionY; + /* 0x60 */ f32 mParam1; + /* 0x64 */ f32 mParam2; + /* 0x68 */ f32 mParam3; + /* 0x6C */ f32 mParam4; + /* 0x70 */ f32 mParam5; + /* 0x74 */ u8 field_0x74[32]; + /* 0x94 */ f32 field_0x94[4]; + /* 0xA4 */ f32 field_0xa4[4]; + /* 0xB4 */ u8 field_0xb4; + /* 0xB5 */ s8 mNameIdx; }; #endif /* D_D_SELECT_CURSOR_H */ diff --git a/src/d/cc/d_cc_d_nonmatching.cpp b/src/d/cc/d_cc_d_nonmatching.cpp index a29adfbbb84..a67067aa585 100644 --- a/src/d/cc/d_cc_d_nonmatching.cpp +++ b/src/d/cc/d_cc_d_nonmatching.cpp @@ -235,7 +235,7 @@ cCcD_GObjInf* dCcD_GObjInf::GetAtHitGObj() { } /* 800843DC-800843FC 07ED1C 0020+00 0/0 1/1 0/0 .text ChkAtNoGuard__12dCcD_GObjInfFv */ -#ifdef NON_MATCHING +#ifdef NONMATCHING bool dCcD_GObjInf::ChkAtNoGuard() { return 12 < mGObjAt.mSpl; } diff --git a/src/d/d_select_cursor.cpp b/src/d/d_select_cursor.cpp index 28a646cc835..e01da64eb46 100644 --- a/src/d/d_select_cursor.cpp +++ b/src/d/d_select_cursor.cpp @@ -6,6 +6,7 @@ #include "d/d_select_cursor.h" #include "dol2asm.h" #include "dolphin/types.h" +#include "d/com/d_com_inf_game.h" // // Types: @@ -74,7 +75,6 @@ extern "C" extern void* __vt__12dDlst_base_c[3]; extern "C" extern void* __vt__10J2DAnmBase[4]; extern "C" extern void* __vt__15J2DAnmTransform[5 + 4 /* padding */]; extern "C" extern void* __vt__18J2DAnmTransformKey[6]; -extern "C" extern u8 g_dComIfG_gameInfo[122384]; // // Declarations: @@ -249,6 +249,18 @@ asm dSelect_cursor_c::~dSelect_cursor_c() { #pragma pop /* 80194C30-80194CC0 18F570 0090+00 1/0 0/0 0/0 .text draw__16dSelect_cursor_cFv */ +#ifdef NONMATCHING +void dSelect_cursor_c::draw() { + mpPaneMgr->getAlphaRate(); + update(); + J2DGrafContext* gphCtx = dComIfGp_getCurrentGrafPort(); + gphCtx->setup2D(); + mpScreen->draw(FLOAT_LABEL(lit_3808),FLOAT_LABEL(lit_3808),gphCtx); + if (mpSelectIcon) { + // mpSelectIcon->drawSelf(); // inline here, but not sure how to properly define it + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -258,6 +270,7 @@ extern "C" asm void draw__16dSelect_cursor_cFv() { #include "asm/d/d_select_cursor/draw__16dSelect_cursor_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80453A54-80453A58 002054 0004+00 3/3 0/0 0/0 .sdata2 @4062 */ @@ -281,6 +294,41 @@ asm void dSelect_cursor_c::update() { SECTION_SDATA2 static f32 lit_4089 = -1.0f; /* 801950F4-801951B0 18FA34 00BC+00 0/0 30/30 0/0 .text setPos__16dSelect_cursor_cFffP7J2DPaneb */ +#ifdef NONMATCHING +void dSelect_cursor_c::setPos(f32 i_posX, f32 i_posY, J2DPane* i_pane, bool i_scaleBounds) { + mpPane = i_pane; + setPos(i_posX,i_posY); + + if (!i_pane) { + return; + } + + f32 width = i_pane->getWidth() * FLOAT_LABEL(lit_3673) * FLOAT_LABEL(lit_4062); + f32 height = i_pane->getHeight() * FLOAT_LABEL(lit_4062); + + if (i_scaleBounds) { + width *= i_pane->getScaleX(); + height *= i_pane->getScaleY(); + } + + f32 tmp7 = FLOAT_LABEL(lit_4089); + + for (int i = 0; i < 4; i++) { + + field_0x94[i] = width; + field_0xa4[i] = height; + + if (i < 2) { + field_0x94[i] *= tmp7; + } + + if ((i & 1) ^ (i >> 0x1f) == i >> 0x1f) { + field_0xa4[i] *= tmp7; + } + } + +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -289,19 +337,35 @@ asm void dSelect_cursor_c::setPos(f32 param_0, f32 param_1, J2DPane* param_2, bo #include "asm/d/d_select_cursor/setPos__16dSelect_cursor_cFffP7J2DPaneb.s" } #pragma pop +#endif /* 801951B0-801951C8 18FAF0 0018+00 0/0 24/24 0/0 .text setParam__16dSelect_cursor_cFfffff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::setParam(f32 param_0, f32 param_1, f32 param_2, f32 param_3, - f32 param_4) { - nofralloc -#include "asm/d/d_select_cursor/setParam__16dSelect_cursor_cFfffff.s" +void dSelect_cursor_c::setParam(f32 i_param1, f32 i_param2, f32 i_param3, f32 i_param4, + f32 i_param5) { + mParam1 = i_param1; + mParam2 = i_param2; + mParam3 = i_param3; + mParam4 = i_param4; + mParam5 = i_param5; } -#pragma pop /* 801951C8-801952A0 18FB08 00D8+00 0/0 14/14 0/0 .text setScale__16dSelect_cursor_cFf */ +#ifdef NONMATCHING +// first conditional has issues +void dSelect_cursor_c::setScale(f32 i_scale) { + J2DPane* pane = mpPaneMgr->getPanePtr(); + pane->scale(i_scale,i_scale); + + s8 name_idx = mNameIdx; + if ((name_idx == 1 || name_idx < 1) || (name_idx < 0 && name_idx < 4)) { + field_0x50 = mpScreen->search('ssel_ico')->getTranslateX(); + field_0x54 = mpScreen->search('ssel_ico')->getTranslateY(); + } else { + field_0x50 = 0.0f; + field_0x54 = 0.0f; + } +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off @@ -310,40 +374,88 @@ asm void dSelect_cursor_c::setScale(f32 param_0) { #include "asm/d/d_select_cursor/setScale__16dSelect_cursor_cFf.s" } #pragma pop +#endif /* 801952A0-80195330 18FBE0 0090+00 0/0 77/77 0/0 .text setAlphaRate__16dSelect_cursor_cFf */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::setAlphaRate(f32 param_0) { - nofralloc -#include "asm/d/d_select_cursor/setAlphaRate__16dSelect_cursor_cFf.s" +void dSelect_cursor_c::setAlphaRate(f32 i_alphaRate) { + if (i_alphaRate > FLOAT_LABEL(lit_3808)) { + if (mpPaneMgr->isVisible() == 0) { + mpPaneMgr->show(); + } + } else { + i_alphaRate = FLOAT_LABEL(lit_3808); + if (mpPaneMgr->isVisible() == 1) { + mpPaneMgr->hide(); + } + } + + mpPaneMgr->setAlphaRate(i_alphaRate); } -#pragma pop /* ############################################################################################## */ /* 80453A64-80453A68 002064 0004+00 2/2 0/0 0/0 .sdata2 @4157 */ SECTION_SDATA2 static f32 lit_4157 = 5.0f; /* 80195330-801953CC 18FC70 009C+00 0/0 1/1 0/0 .text addAlpha__16dSelect_cursor_cFv */ +#ifdef NONMATCHING +// matches with literals +int dSelect_cursor_c::addAlpha() { + s16 alpha_timer = mpPaneMgr->getAlphaTimer(); + + if (mpPaneMgr->isVisible() == 0) { + mpPaneMgr->show(); + } + + if (alpha_timer >= 5) { + return 1; + } else { + alpha_timer++; + mpPaneMgr->alphaAnimeStart(alpha_timer); + mpPaneMgr->setAlphaRate(alpha_timer/FLOAT_LABEL(lit_4157)); + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dSelect_cursor_c::addAlpha() { +asm int dSelect_cursor_c::addAlpha() { nofralloc #include "asm/d/d_select_cursor/addAlpha__16dSelect_cursor_cFv.s" } #pragma pop +#endif /* 801953CC-80195460 18FD0C 0094+00 0/0 1/1 0/0 .text decAlpha__16dSelect_cursor_cFv */ +#ifdef NONMATCHING +// matches with literals +int dSelect_cursor_c::decAlpha() { + s16 alpha_timer = mpPaneMgr->getAlphaTimer(); + + if (alpha_timer <= 0) { + if (mpPaneMgr->isVisible() == 1) { + mpPaneMgr->hide(); + } + return 1; + } else { + alpha_timer--; + mpPaneMgr->alphaAnimeStart(alpha_timer); + mpPaneMgr->setAlphaRate(alpha_timer/FLOAT_LABEL(lit_4157)); + } + + return 0; +} +#else #pragma push #pragma optimization_level 0 #pragma optimizewithasm off -asm void dSelect_cursor_c::decAlpha() { +asm int dSelect_cursor_c::decAlpha() { nofralloc #include "asm/d/d_select_cursor/decAlpha__16dSelect_cursor_cFv.s" } #pragma pop +#endif /* ############################################################################################## */ /* 80394A30-80394A50 021090 0020+00 1/1 0/0 0/0 .rodata tag$4181 */ @@ -410,25 +522,15 @@ asm void dSelect_cursor_c::setCursorAnimation() { /* 801958E0-80195940 190220 0060+00 1/1 0/0 0/0 .text * setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::setBckAnimation(J2DAnmTransformKey* param_0) { - nofralloc -#include "asm/d/d_select_cursor/setBckAnimation__16dSelect_cursor_cFP18J2DAnmTransformKey.s" +void dSelect_cursor_c::setBckAnimation(J2DAnmTransformKey* param_0) { + mpScreen->search('ssel_ico')->setAnimation((J2DAnmTransform*)param_0); } -#pragma pop /* 80195940-80195978 190280 0038+00 1/1 0/0 0/0 .text moveCenter__16dSelect_cursor_cFP7J2DPaneff */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm void dSelect_cursor_c::moveCenter(J2DPane* param_0, f32 param_1, f32 param_2) { - nofralloc -#include "asm/d/d_select_cursor/moveCenter__16dSelect_cursor_cFP7J2DPaneff.s" +void dSelect_cursor_c::moveCenter(J2DPane* i_pane, f32 i_x, f32 i_y) { + i_pane->translate(i_x,i_y); } -#pragma pop /* 80195978-801959C0 1902B8 0048+00 1/0 0/0 0/0 .text __dt__19dSelect_cursorHIO_cFv */ #pragma push