From af899c9679ee137f477c702d913b9fcbb131ded3 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 6 Aug 2023 00:44:22 +0200 Subject: [PATCH] stuff --- src/battle_controller_wally.c | 1 - src/battle_controllers.c | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 8b3252dc9c..37aaf93fb7 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -262,7 +262,6 @@ static void Intro_TryShinyAnimShowHealthbox(void) gBattleSpritesDataPtr->animationData->introAnimActive = FALSE; gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; } - } static void Intro_WaitForShinyAnimAndHealthbox(void) diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 5a4e564779..4d6367f9e7 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -2578,6 +2578,50 @@ void BtlController_HandleSpriteInvisibility(void) BattleControllerComplete(gActiveBattler); } +void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite) +{ + u8 battlerId = sprite->sBattlerId; + + // Free player trainer sprite + FreeSpriteOamMatrix(sprite); + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum)); + DestroySprite(sprite); + + // Load mon sprite + BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); +} + +void BtlController_HandleIntroTrainerBallThrow(u32 battlerId, u16 const u32 *trainerPal, TaskFunc *introTask) +{ + u8 paletteNum; + u8 taskId; + + SetSpritePrimaryCoordsFromSecondaryCoords(&gSprites[gBattlerSpriteIds[battler]]); + + gSprites[gBattlerSpriteIds[battler]].data[0] = 50; + gSprites[gBattlerSpriteIds[battler]].data[2] = -40; + gSprites[gBattlerSpriteIds[battler]].data[4] = gSprites[gBattlerSpriteIds[battler]].y; + gSprites[gBattlerSpriteIds[battler]].callback = StartAnimLinearTranslation; + gSprites[gBattlerSpriteIds[battler]].sBattlerId = battler; + + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[battler]], SpriteCB_FreePlayerSpriteLoadMonSprite); + StartSpriteAnim(&gSprites[gBattlerSpriteIds[battler]], 1); + + paletteNum = AllocSpritePalette(0xD6F8); + LoadCompressedPalette(trainerPal, OBJ_PLTT_ID(paletteNum), PLTT_SIZE_4BPP); + gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = paletteNum; + + taskId = CreateTask(Task_StartSendOutAnim, 5); + gTasks[taskId].tBattlerId = battler; + + if (gBattleSpritesDataPtr->healthBoxesData[battler].partyStatusSummaryShown) + gTasks[gBattlerStatusSummaryTaskId[battler]].func = introTask; + + gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; + gBattlerControllerFuncs[battler] = BattleControllerDummy; +} + void BtlController_HandleDrawPartyStatusSummary(u32 battler, u32 side, bool32 considerDelay) { if (gBattleResources->bufferA[battler][1] != 0 && GetBattlerSide(battler) == B_SIDE_PLAYER)