diff --git a/include/battle_controllers.h b/include/battle_controllers.h index 39d2932e770c..a91afd006ee8 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -425,4 +425,6 @@ bool32 SwitchIn_HandleSoundAndEndUtil(u32 battler); bool32 SwitchIn_ShowHealthboxUtil(u32 battler); bool32 SwitchIn_TryShinyAnimUtil(u32 battler); +void FreeShinyStars(void); + #endif // GUARD_BATTLE_CONTROLLERS_H diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index a039a5b52219..fd4444de1201 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -167,8 +167,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } else { @@ -180,8 +179,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) if (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) { - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } } diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index f6fae5ae576c..8dc1d24c2cb5 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -176,8 +176,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } else { @@ -191,8 +190,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) if (!gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim) { - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } else { @@ -322,8 +320,7 @@ static void TryShinyAnimAfterMonAnim(u32 battler) { gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); OpponentBufferExecCompleted(battler); } } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 019ac2eafe07..ba9708837f86 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -1261,8 +1261,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); HandleLowHpMusicChange(GetBattlerMon(battler), battler); @@ -1371,8 +1370,7 @@ static void SwitchIn_CleanShinyAnimShowSubstitute(u32 battler) // Reset shiny anim (even if it didn't occur) gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); // Check if Substitute should be shown if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) @@ -1891,8 +1889,7 @@ static void TryShinyAnimAfterMonAnim(u32 battler) { gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); PlayerBufferExecCompleted(battler); } } diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c index 944cf6e0724c..043fff4abeea 100644 --- a/src/battle_controller_recorded_opponent.c +++ b/src/battle_controller_recorded_opponent.c @@ -187,8 +187,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); } gBattleSpritesDataPtr->healthBoxesData[battler].introEndDelay = 3; diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c index a3032db1a8e4..77dcad5d41a9 100644 --- a/src/battle_controller_recorded_player.c +++ b/src/battle_controller_recorded_player.c @@ -164,8 +164,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); HandleLowHpMusicChange(GetBattlerMon(battler), battler); if (IsDoubleBattle()) diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 6cba0fc3e75d..9482f34b65da 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -262,8 +262,7 @@ static void Intro_WaitForShinyAnimAndHealthbox(u32 battler) gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[BATTLE_PARTNER(battler)].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); HandleLowHpMusicChange(GetBattlerMon(battler), battler); diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 76e60b224978..672998c335bd 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -3226,8 +3226,7 @@ bool32 TryShinyAnimAfterMonAnimUtil(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); return TRUE; } @@ -3276,8 +3275,7 @@ bool32 SwitchIn_ShowHealthboxUtil(u32 battler) gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = FALSE; gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = FALSE; - FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); - FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + FreeShinyStars(); if (side == B_SIDE_PLAYER) { @@ -3313,3 +3311,14 @@ bool32 SwitchIn_TryShinyAnimUtil(u32 battler) return TRUE; } + +void FreeShinyStars(void) +{ + for (u32 battler = 0; battler < MAX_BATTLERS_COUNT; battler++) + { + if (gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim) + return; + } + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); +}