From b499063f4ade1a9aae93bda86292634347460e64 Mon Sep 17 00:00:00 2001 From: idefix02 <237103031+idefix02@users.noreply.github.com> Date: Thu, 24 Sep 2026 21:11:27 +0200 Subject: [PATCH 1/4] Rework sub_800F838 --- src/game/sa3/stage/player.c | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/game/sa3/stage/player.c b/src/game/sa3/stage/player.c index 4517921d..40701575 100644 --- a/src/game/sa3/stage/player.c +++ b/src/game/sa3/stage/player.c @@ -9351,10 +9351,7 @@ void Player_800F7C0(Player *p) void sub_800F838(Player *p) { PlayerUnk148 *temp_r4; - s16 temp_r1_2; s32 temp_r1; - u16 temp_r0; - u16 temp_r2; u32 var_r6; u8 var_r7; @@ -9375,29 +9372,20 @@ void sub_800F838(Player *p) if (++temp_r4->a.unk0 > 0x01E0) { temp_r4->a.unk0--; } - goto block_15; - } - temp_r1_2 = (s16)temp_r4->a.unk0; - if ((s32)temp_r1_2 <= 0x77) { + } else if (temp_r4->a.unk0 <= 0x77) { temp_r4->a.unk2 = (s16)var_r6; SetPlayerCallback(p, Player_80108FC); - goto block_15; - } - if ((s32)temp_r1_2 <= 0xEF) { + } else if (temp_r4->a.unk0 <= 0xEF) { temp_r4->a.unk2 = 0x3C; var_r7 = 2; - goto block_16; - } - if ((s32)temp_r1_2 <= 0x167) { + } else if (temp_r4->a.unk0 <= 0x167) { temp_r4->a.unk2 = 0x78; var_r7 = 3; - goto block_16; + } else { + temp_r4->a.unk2 = 0xF0; + var_r7 = 4; } - temp_r4->a.unk2 = 0xF0; - var_r7 = 4; -block_15: if (var_r7 != 0) { - block_16: p->unk26 = var_r7; SetPlayerCallback(p, Player_8010AA0); } From e4459fef3179f146efb6d016b4457d60b7bef9f0 Mon Sep 17 00:00:00 2001 From: idefix02 <237103031+idefix02@users.noreply.github.com> Date: Thu, 24 Sep 2026 21:12:38 +0200 Subject: [PATCH 2/4] Get rid of gotos in sub_801310C --- src/game/sa3/stage/player.c | 48 ++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/src/game/sa3/stage/player.c b/src/game/sa3/stage/player.c index 40701575..9be466b2 100644 --- a/src/game/sa3/stage/player.c +++ b/src/game/sa3/stage/player.c @@ -12545,7 +12545,6 @@ void sub_801310C(s16 playerIndex) s->anim = ANIM_CREAM_IDLE + CHAR_ANIM_SPIN_NEUTRAL; s->variant = 1; s->frameFlags = SPRITE_FLAG(ROT_SCALE, 2); - goto block_15; break; case TAILS: if ((u32)gStageData.gameMode < 6) { @@ -12556,31 +12555,32 @@ void sub_801310C(s16 playerIndex) s->anim = ANIM_TAILS_IDLE + CHAR_ANIM_SPIN_NEUTRAL; s->variant = 1; s->frameFlags = SPRITE_FLAG(ROT_SCALE, 3); - block_15: - s->frameFlags |= MOVESTATE_1000; - s->frameFlags |= (MOVESTATE_40000 | MOVESTATE_COLLIDING_ENT); - s->x = I(p->qWorldX); - s->y = I(p->qWorldY); - if (gStageData.playerIndex == playerIndex) { - prio = 16; - } else { - prio = 17 + playerIndex; - } - s->oamFlags = SPRITE_OAM_ORDER(prio); - s->qAnimDelay = 0; - s->prevVariant = 0xFF; - s->animSpeed = SPRITE_ANIM_SPEED(1.0); - s->palId = (s8)playerIndex; - s->hitboxes[0].index = -1; - s->hitboxes[1].index = -1; - - temp_r3->tf.rotation = 0; - temp_r3->tf.qScaleX = Q(1); - temp_r3->tf.qScaleY = Q(1); - temp_r3->tf.x = 0; - temp_r3->tf.y = 0; break; + default: + return; } + s->frameFlags |= MOVESTATE_1000; + s->frameFlags |= (MOVESTATE_40000 | MOVESTATE_COLLIDING_ENT); + s->x = I(p->qWorldX); + s->y = I(p->qWorldY); + if (gStageData.playerIndex == playerIndex) { + prio = 16; + } else { + prio = 17 + playerIndex; + } + s->oamFlags = SPRITE_OAM_ORDER(prio); + s->qAnimDelay = 0; + s->prevVariant = 0xFF; + s->animSpeed = SPRITE_ANIM_SPEED(1.0); + s->palId = (s8)playerIndex; + s->hitboxes[0].index = -1; + s->hitboxes[1].index = -1; + + temp_r3->tf.rotation = 0; + temp_r3->tf.qScaleX = Q(1); + temp_r3->tf.qScaleY = Q(1); + temp_r3->tf.x = 0; + temp_r3->tf.y = 0; } extern const u16 gUnknown_080CE7E2[][2]; From 89afd49c8bbdd02eb90fdabc3b15a897c5a4264c Mon Sep 17 00:00:00 2001 From: idefix02 <237103031+idefix02@users.noreply.github.com> Date: Thu, 24 Sep 2026 21:30:14 +0200 Subject: [PATCH 3/4] Get rid of gotos in sub_801CB68 --- src/game/sa3/stage/player.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/game/sa3/stage/player.c b/src/game/sa3/stage/player.c index 9be466b2..082231ef 100644 --- a/src/game/sa3/stage/player.c +++ b/src/game/sa3/stage/player.c @@ -19949,14 +19949,12 @@ void sub_801CB68(Player *p) case 1: p->charFlags.anim0 = 0xF0; - goto def; break; case 2: sub_801DEE4(p); - break; + return; case 3: p->charFlags.anim0 = 0xF1; - goto def; break; case 4: p->moveState = (p->moveState | MOVESTATE_IN_AIR) & 0xFFFBFFFF; @@ -19965,13 +19963,10 @@ void sub_801CB68(Player *p) p->qSpeedAirY = 0; p->charFlags.anim0 = 0x18; Player_800DAF4(p); - break; - default: - def: - if (!sub_8015064(p)) { - sub_8017004(p); - } - break; + return; + } + if (!sub_8015064(p)) { + sub_8017004(p); } } From 6cff1abebad51d8728f712f4a3fb6933fabdba4c Mon Sep 17 00:00:00 2001 From: idefix02 <237103031+idefix02@users.noreply.github.com> Date: Fri, 25 Sep 2026 17:52:58 +0200 Subject: [PATCH 4/4] Address feedback on PR #27 --- src/game/sa3/stage/player.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/game/sa3/stage/player.c b/src/game/sa3/stage/player.c index 082231ef..f699cbff 100644 --- a/src/game/sa3/stage/player.c +++ b/src/game/sa3/stage/player.c @@ -9372,13 +9372,13 @@ void sub_800F838(Player *p) if (++temp_r4->a.unk0 > 0x01E0) { temp_r4->a.unk0--; } - } else if (temp_r4->a.unk0 <= 0x77) { + } else if (temp_r4->a.unk0 < 0x78) { temp_r4->a.unk2 = (s16)var_r6; SetPlayerCallback(p, Player_80108FC); - } else if (temp_r4->a.unk0 <= 0xEF) { + } else if (temp_r4->a.unk0 < 0xF0) { temp_r4->a.unk2 = 0x3C; var_r7 = 2; - } else if (temp_r4->a.unk0 <= 0x167) { + } else if (temp_r4->a.unk0 < 0x168) { temp_r4->a.unk2 = 0x78; var_r7 = 3; } else {