From af3984bee467fe7b7669defc10bf35eac4ec2704 Mon Sep 17 00:00:00 2001 From: PhallenTree <168426989+PhallenTree@users.noreply.github.com> Date: Mon, 10 Mar 2025 16:01:02 +0000 Subject: [PATCH] Fixes gimmick icon flying off the screen (#6401) --- src/battle_gimmick.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c index 728ff361a9..dfbbe0e7dc 100644 --- a/src/battle_gimmick.c +++ b/src/battle_gimmick.c @@ -204,6 +204,7 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) { s32 xSlide, xPriority, xOptimal; s32 yDiff; + s32 xHealthbox = gSprites[gHealthboxSpriteIds[sprite->tBattler]].x; if (IsDoubleBattle()) { @@ -222,25 +223,29 @@ static void SpriteCb_GimmickTrigger(struct Sprite *sprite) if (sprite->tHide) { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + if (sprite->x < xHealthbox - xSlide) sprite->x++; - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + if (sprite->x >= xHealthbox - xPriority) sprite->oam.priority = 2; else sprite->oam.priority = 1; sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff; sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff; - if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide) + if (sprite->x == xHealthbox - xSlide) DestroyGimmickTriggerSprite(); } else { - if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal) + // Edge case: in doubles, if selecting move and next mon's action too fast, the second battler's gimmick icon uses the x from the first battler's gimmick icon + if (sprite->y != gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff) + sprite->x = xHealthbox - xSlide; + + if (sprite->x > xHealthbox - xOptimal) sprite->x--; - if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority) + if (sprite->x >= xHealthbox - xPriority) sprite->oam.priority = 2; else sprite->oam.priority = 1;