Match remaining functions in d_menu_collect (#2809)

* match all funcs in d_menu_collect

* remove old nonmatching comments
This commit is contained in:
Trueffel 2025-11-15 17:37:50 +01:00 committed by GitHub
parent fad2f41e33
commit 8799ed141d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 76 additions and 81 deletions

View File

@ -167,7 +167,6 @@ void daDitem_c::actionStart() {
}
/* 804E00DC-804E0A50 0005FC 0974+00 1/1 0/0 0/0 .text actionEvent__9daDitem_cFv */
// NONMATCHING - r30/r31 swap
void daDitem_c::actionEvent() {
if (mSetLightEff) {
cLib_addCalc2(&mLight.mPow, mLightStrength, 0.1f, 1.0f);

View File

@ -569,7 +569,6 @@ bool dMenuFmapIconDisp_c::getPosition(int* o_stageNo, int* o_roomNo, f32* o_posX
/* 8003E6E8-8003EB10 039028 0428+00 2/0 3/3 0/0 .text isDrawDisp__19dMenuFmapIconDisp_cFv
*/
// NONMATCHING regalloc
bool dMenuFmapIconDisp_c::isDrawDisp() {
dMenu_Fmap_stage_arc_data_c* stage_arc = mpStageData->getStageArc();
if (stage_arc == NULL) {

View File

@ -729,8 +729,7 @@ void dMenu_Collect2D_c::setBackAlpha() {
/* 801B1FAC-801B27EC 1AC8EC 0840+00 1/1 0/0 0/0 .text cursorMove__17dMenu_Collect2D_cFv
*/
// NONMATCHING
// goto logic is wrong
// Not sure if this works without gotos
void dMenu_Collect2D_c::cursorMove() {
u8 dVar1 = mCursorX;
u8 dVar2 = mCursorY;
@ -797,30 +796,27 @@ void dMenu_Collect2D_c::cursorMove() {
LAB_802ba744:
if (mpStick->checkUpTrigger()) {
if (mCursorY != 0) {
bool bVar3;
restart_loop:
do {
mCursorY--;
if (mCursorY == 2) {
u8 local_3c[9] = {3,3,4,3,4,5,4,5,5};
u8 local_48[9] = {2,1,2,0,1,2,0,1,0};
for (int i = 0; i < 9; i++) {
if (getItemTag(local_3c[i], local_48[i], true)) {
mCursorX = local_3c[i];
mCursorY = local_48[i];
break;
}
begin:
mCursorY--;
if (mCursorY == 2) {
u8 local_3c[9] = {3,3,4,3,4,5,4,5,5};
u8 local_48[9] = {2,1,2,0,1,2,0,1,0};
for (int i = 0; i < 9; i++) {
if (getItemTag(local_3c[i], local_48[i], true)) {
mCursorX = local_3c[i];
mCursorY = local_48[i];
break;
}
}
if (dVar2 == 5) {
if (dVar1 == 0) {
if (field_0x25a < 5) {
mCursorX = field_0x259;
mCursorY = field_0x25a;
break;
}
bVar3 = false;
}
if (dVar2 == 5) {
if (dVar1 == 0) {
if (field_0x25a < 5) {
mCursorX = field_0x259;
mCursorY = field_0x25a;
goto LAB_802bab54;
} else {
bool bVar3 = false;
for (int i = 0; i < 4; i++) {
if (getItemTag(i, mCursorY, true)) {
mCursorX = i;
@ -834,73 +830,77 @@ LAB_802ba744:
bVar3 = true;
}
if (bVar3) {
break;
goto LAB_802bab54;
}
goto restart_loop;
}
if (field_0x25a < 5) {
mCursorX = field_0x259;
mCursorY = field_0x25a;
break;
}
bVar3 = false;
} else if (field_0x25a < 5) {
mCursorX = field_0x259;
mCursorY = field_0x25a;
goto LAB_802bab54;
} else {
bool bVar4 = false;
for (int i = 3; i < 7; i++) {
if (getItemTag(i, mCursorY, true)) {
mCursorX = i;
bVar3 = true;
bVar4 = true;
break;
}
}
if (mCursorY == 0) {
mCursorX = dVar1;
mCursorY = dVar2;
bVar3 = true;
bVar4 = true;
}
}
} while (!bVar3);
if (!getItemTag(mCursorX, mCursorY, true)) {
if (mCursorY != 0) {
goto restart_loop;
}
}
mCursorY = dVar2;
}
} else {
if (mpStick->checkDownTrigger()) {
if (mCursorY < 4) {
do {
mCursorY++;
if (mCursorY == 3) {
u8 local_50[8] = {3, 2, 3, 1, 2, 0, 1, 0};
u8 local_58[8] = {3, 3, 4, 3, 4, 3, 4, 4};
for (int i = 0; i < 8; i++) {
if (getItemTag(local_50[i], local_58[i], true)) {
mCursorX = local_50[i];
mCursorY = local_58[i];
break;
}
}
}
if (getItemTag(mCursorX, mCursorY, true)) {
if (bVar4) {
goto LAB_802bab54;
}
} while (mCursorY < 4);
mCursorY = 5;
if (mCursorX <= 2) {
mCursorX = 0;
} else {
mCursorX = 1;
}
} else if (mCursorY == 4) {
mCursorY = 5;
if (mCursorX <= 3) {
mCursorX = 0;
} else {
mCursorX = 1;
goto begin;
} else {
if (getItemTag(mCursorX, mCursorY, true)) {
goto LAB_802bab54;
}
if (mCursorY != 0) {
goto begin;
}
mCursorY = dVar2;
}
}
} else if (mpStick->checkDownTrigger()) {
if (mCursorY < 4) {
do {
mCursorY++;
if (mCursorY == 3) {
u8 local_50[8] = {3, 2, 3, 1, 2, 0, 1, 0};
u8 local_58[8] = {3, 3, 4, 3, 4, 3, 4, 4};
for (int i = 0; i < 8; i++) {
if (getItemTag(local_50[i], local_58[i], true)) {
mCursorX = local_50[i];
mCursorY = local_58[i];
break;
}
}
}
if (getItemTag(mCursorX, mCursorY, true)) {
goto LAB_802bab54;
}
} while (mCursorY < 4);
mCursorY = 5;
if (mCursorX <= 2) {
mCursorX = 0;
} else {
mCursorX = 1;
}
} else if (mCursorY == 4) {
mCursorY = 5;
if (mCursorX <= 3) {
mCursorX = 0;
} else {
mCursorX = 1;
}
}
}
LAB_802bab54:
if (mCursorX != dVar1 || mCursorY != dVar2) {
field_0x259 = dVar1;
@ -2594,22 +2594,20 @@ void dMenu_Collect3D_c::setupItem3D(Mtx param_0) {
/* 801B7660-801B774C 1B1FA0 00EC+00 1/1 0/0 0/0 .text toItem3Dpos__17dMenu_Collect3D_cFfffP4cXyz
*/
// NONMATCHING
// This is mostly matching like this using O2 but still regalloc (f29/f31). The main issue is the use of dVar12
#pragma push
#pragma optimization_level 2
void dMenu_Collect3D_c::toItem3Dpos(f32 param_0, f32 param_1, f32 param_2, cXyz* param_3) {
Mtx adStack_98;
Mtx auStack_c8;
f32 dVar7 =
param_0 =
(2.0f * ((param_0 - mDoGph_gInf_c::getMinXF()) / mDoGph_gInf_c::getWidthF()) - 1.0f);
f32 dVar11 = (2.0f * ((param_1 - -100.0f) / 448.0f) - 1.0f);
param_1 = (2.0f * ((param_1 - -100.0f) / 448.0f) - 1.0f);
calcViewMtx(adStack_98);
MTXInverse(adStack_98, auStack_c8);
f32 tangent = tan(0.39269909262657166);
f32 dVar12 = -param_2;
cXyz cStack_d4((dVar7 * param_2) * (mDoGph_gInf_c::getAspect() * tangent),
(tangent * (dVar11 * dVar12)), dVar12);
cXyz cStack_d4((param_0 * param_2) * (mDoGph_gInf_c::getAspect() * tangent),
(tangent * (param_1 * dVar12)), dVar12);
MTXMultVec(auStack_c8, &cStack_d4, param_3);
}
#pragma pop

View File

@ -2512,7 +2512,6 @@ int dMsgFlow_c::event027(mesg_flow_node_event* i_flowNode_p, fopAc_ac_c* i_speak
/* 8024D3C4-8024D500 247D04 013C+00 1/0 0/0 0/0 .text
* event028__10dMsgFlow_cFP20mesg_flow_node_eventP10fopAc_ac_c */
// NONMATCHING regalloc
int dMsgFlow_c::event028(mesg_flow_node_event* i_flowNode_p, fopAc_ac_c* i_speaker_p) {
u8 pos = dComIfGs_getTmpReg(0xFBFF) - 1;
dMsgObject_setSelectCursorPos(pos);