d_select_cursor first pass (#221)

This commit is contained in:
Pheenoh 2022-12-26 22:53:24 -07:00 committed by GitHub
parent 38ac3b420c
commit 082f5b40af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 162 additions and 127 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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;
}

View File

@ -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