Sub_14488, sub_3CD8: goto considered harmful... (#173)
Some checks are pending
CI / build (push) Waiting to run

* Sub_14488: goto considered harmful...

* cleanup gotos from sub_3CD8
This commit is contained in:
Retnuhytnuob 2025-09-03 07:23:23 -05:00 committed by GitHub
parent ea18f2f141
commit 25b605371e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 68 additions and 86 deletions

View File

@ -599,10 +599,9 @@ void sub_14074(u16 arg0, struct Vector32 *arg1, u16 arg2)
}
}
// TODO: Hopefully we can match this properly without "goto" usage in the future...
u16 sub_14488(struct Vector16* arg0, struct Vector16 arg1) {
struct Vector16 r8;
struct Vector16 r8;
u32 toggleShiftMode;
s16 (*spC)(struct Vector16*, u16*);
u16 sp0_return;
@ -616,96 +615,84 @@ u16 sub_14488(struct Vector16* arg0, struct Vector16 arg1) {
arg1.x = -arg1.x;
}
if (arg1.y < 0)
if (arg1.y < 0)
{
r8.y = -1;
arg1.y = -arg1.y ;
}
if (arg1.x > arg1.y)
if (arg1.x > arg1.y)
toggleShiftMode = 0;
else
else
toggleShiftMode = 1;
gCurrentPinballGame->unk22 = 0;
gCurrentPinballGame->unk23 = 0;
spC = BoardCollisionFuncts_086ACE0C[gMain.selectedField];
do{
goto Lab_144;
Lab_AE:
do
{
if(spC(arg0, &sp0_return) != 0)
{
gCurrentPinballGame->unk22 = 0;
if (sub_1467C(arg0, &sp0_return) != 0 ||
(gCurrentPinballGame->unk5F2 != 0 && sub_14740(arg0, &sp0_return) != 0))
goto Lab_1E0;
goto Lab_E6;
}
Lab_E6:
{
if (!(arg1.x > 0 || arg1.y > 0))
goto Lab_1E0;
if (toggleShiftMode == 0)
{
arg0->x = r8.x + arg0->x;
arg1.x--;
if (arg1.y >0)
toggleShiftMode = 1;
}
else
{
arg0->y = arg0->y + r8.y;
arg1.y--;
if (arg1.x > 0)
toggleShiftMode = 0;
}
}
Lab_144:
{
if(spC(arg0, &sp0_return) == 0)
{
goto Lab_AE;
}
else if (gCurrentPinballGame->unk22 == 1)
if (gCurrentPinballGame->unk22 == 1)
{
if (gCurrentPinballGame->unk23 == 3)
{
u16 j;
u16 sp2_testRes;
struct Vector16 sp4_testPos;
for(j=0; j < 4; j++)
{
sp4_testPos.x = arg0->x + gUnknown_086ACE60[j].x;
sp4_testPos.y = arg0->y + gUnknown_086ACE60[j].y;
spC(&sp4_testPos, &sp2_testRes);
if (gCurrentPinballGame->unk22 == 1 && gCurrentPinballGame->unk23 == 0)
{
Lab_9C:
arg0->x = sp4_testPos.x;
arg0->y = sp4_testPos.y;
sp0_return = sp2_testRes;
break;
}
}
}
}
goto Lab_E6;
}
else {
break;
}
}
else
{
gCurrentPinballGame->unk22 = 0;
if (sub_1467C(arg0, &sp0_return) != 0 ||
(gCurrentPinballGame->unk5F2 != 0 && sub_14740(arg0, &sp0_return) != 0))
break;
}
if (!(arg1.x > 0 || arg1.y > 0))
break;
if (toggleShiftMode == 0)
{
arg0->x = r8.x + arg0->x;
arg1.x--;
if (arg1.y >0)
toggleShiftMode = 1;
}
else
{
arg0->y = arg0->y + r8.y;
arg1.y--;
if (arg1.x > 0)
toggleShiftMode = 0;
}
} while(1);
Lab_1E0:
return sp0_return;
}

View File

@ -644,48 +644,43 @@ s16 sub_3CD8(void)
s32 i;
s32 j;
if (!(JOY_NEW(A_BUTTON)))
if ((JOY_NEW(A_BUTTON)))
{
// TODO I can buy goto end being the actual label, but there is no way they wrote this segment like this
goto fakematch;
}
if (gUnknown_0202A564 == 0)
{
gUnknown_0202A564 = -1;
gUnknown_0202ADE8 = -1;
gUnknown_0202A58C = 1;
fakematch:
if (gUnknown_0202A564 == 0) {
goto end;
if (gUnknown_0202A564 == 0)
{
gUnknown_0202A564 = -1;
gUnknown_0202ADE8 = -1;
gUnknown_0202A58C = 1;
}
}
if (gUnknown_02019C20 == 0)
if (gUnknown_0202A564 != 0)
{
if (gUnknown_0201A4D0[0][0] == 0xFEDC)
if (gUnknown_02019C20 == 0)
{
gUnknown_0202BEEC = gUnknown_0201A4D0[1][0];
gUnknown_02019C20 = -1;
}
else if (gUnknown_0201A4D0[0][1] == 0xFEDC)
{
gUnknown_0202BEEC = gUnknown_0201A4D0[1][1];
gUnknown_02019C20 = -1;
}
}
else
{
for (i = 0; i < 2; i++)
{
if (gUnknown_0201A4D0[0][i] == 0xDFDF)
if (gUnknown_0201A4D0[0][0] == 0xFEDC)
{
return -1;
gUnknown_0202BEEC = gUnknown_0201A4D0[1][0];
gUnknown_02019C20 = -1;
}
else if (gUnknown_0201A4D0[0][1] == 0xFEDC)
{
gUnknown_0202BEEC = gUnknown_0201A4D0[1][1];
gUnknown_02019C20 = -1;
}
}
else
{
for (i = 0; i < 2; i++)
{
if (gUnknown_0201A4D0[0][i] == 0xDFDF)
{
return -1;
}
}
}
}
end:
for (i = 0; i < 2; i++)
{
for (j = 0; j < 8; j++)