From da483e8b2b0ef15374d6071a98215bf7dc2e4796 Mon Sep 17 00:00:00 2001 From: cawtds <38510667+cawtds@users.noreply.github.com> Date: Mon, 6 Jan 2025 23:35:27 +0100 Subject: [PATCH] sync battle controller link partner --- src/battle_controller_link_partner.c | 174 ++++++++++++++++----------- 1 file changed, 106 insertions(+), 68 deletions(-) diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 48b81e918..bec93f474 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -1,27 +1,45 @@ #include "global.h" -#include "gflib.h" -#include "data.h" -#include "link.h" -#include "pokeball.h" -#include "task.h" -#include "util.h" #include "battle.h" +#include "battle_ai_main.h" #include "battle_anim.h" #include "battle_controllers.h" #include "battle_interface.h" #include "battle_message.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "bg.h" +#include "data.h" +#include "link.h" +#include "main.h" +#include "m4a.h" +#include "palette.h" +#include "pokeball.h" +#include "pokemon.h" +#include "recorded_battle.h" +#include "reshow_battle_screen.h" +#include "sound.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "util.h" +#include "window.h" #include "constants/battle_anim.h" #include "constants/songs.h" -#include "constants/sound.h" +#include "constants/trainers.h" +#include "recorded_battle.h" +#include "random.h" static void LinkPartnerHandleLoadMonSprite(u32 battler); static void LinkPartnerHandleSwitchInAnim(u32 battler); static void LinkPartnerHandleDrawTrainerPic(u32 battler); static void LinkPartnerHandleTrainerSlideBack(u32 battler); +static void LinkPartnerHandleMoveAnimation(u32 battler); +static void LinkPartnerHandlePrintString(u32 battler); static void LinkPartnerHandleHealthBarUpdate(u32 battler); static void LinkPartnerHandleIntroTrainerBallThrow(u32 battler); static void LinkPartnerHandleDrawPartyStatusSummary(u32 battler); static void LinkPartnerHandleBattleAnimation(u32 battler); +static void LinkPartnerHandleLinkStandbyMsg(u32 battler); static void LinkPartnerHandleEndLinkBattle(u32 battler); static void LinkPartnerBufferRunCommand(u32 battler); @@ -30,64 +48,64 @@ static void SwitchIn_WaitAndEnd(u32 battler); static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) = { - [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, // done - [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, // done - [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, // done - [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, // done - [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite, // done - [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim, // done - [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, // done - [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic, // done - [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, // done - [CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack, // done - [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, // done - [CONTROLLER_PALETTEFADE] = BtlController_Empty, // done - [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, // done - [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, // done - [CONTROLLER_PAUSE] = BtlController_Empty, // done - [CONTROLLER_MOVEANIMATION] = BtlController_HandleMoveAnimation, // done - [CONTROLLER_PRINTSTRING] = BtlController_HandlePrintString, // done - [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, // done - [CONTROLLER_CHOOSEACTION] = BtlController_Empty, // done - [CONTROLLER_YESNOBOX] = BtlController_Empty, // done - [CONTROLLER_CHOOSEMOVE] = BtlController_Empty, // done - [CONTROLLER_OPENBAG] = BtlController_Empty, // done - [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, // done - [CONTROLLER_23] = BtlController_Empty, // done - [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate, // done - [CONTROLLER_EXPUPDATE] = BtlController_Empty, // done - [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, // done - [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, // done - [CONTROLLER_STATUSXOR] = BtlController_Empty, // done - [CONTROLLER_DATATRANSFER] = BtlController_Empty, // done - [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, // done - [CONTROLLER_PLAYBGM] = BtlController_Empty, // done - [CONTROLLER_32] = BtlController_Empty, // done - [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, // done - [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, // done - [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, // done - [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, // done - [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, // done - [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, // done - [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, // done - [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, // done - [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, // done - [CONTROLLER_CANTSWITCH] = BtlController_Empty, // done - [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, // done - [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, // done - [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, // done - [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, // done - [CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow, // done - [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary, // done - [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, // done - [CONTROLLER_ENDBOUNCE] = BtlController_Empty, // done - [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, // done - [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation, // done - [CONTROLLER_LINKSTANDBYMSG] = BtlController_Empty, // done - [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, // done - [CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle, // done + [CONTROLLER_GETMONDATA] = BtlController_HandleGetMonData, + [CONTROLLER_GETRAWMONDATA] = BtlController_Empty, + [CONTROLLER_SETMONDATA] = BtlController_HandleSetMonData, + [CONTROLLER_SETRAWMONDATA] = BtlController_HandleSetRawMonData, + [CONTROLLER_LOADMONSPRITE] = LinkPartnerHandleLoadMonSprite, + [CONTROLLER_SWITCHINANIM] = LinkPartnerHandleSwitchInAnim, + [CONTROLLER_RETURNMONTOBALL] = BtlController_HandleReturnMonToBall, + [CONTROLLER_DRAWTRAINERPIC] = LinkPartnerHandleDrawTrainerPic, + [CONTROLLER_TRAINERSLIDE] = BtlController_Empty, + [CONTROLLER_TRAINERSLIDEBACK] = LinkPartnerHandleTrainerSlideBack, + [CONTROLLER_FAINTANIMATION] = BtlController_HandleFaintAnimation, + [CONTROLLER_PALETTEFADE] = BtlController_Empty, + [CONTROLLER_SUCCESSBALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_BALLTHROWANIM] = BtlController_Empty, + [CONTROLLER_PAUSE] = BtlController_Empty, + [CONTROLLER_MOVEANIMATION] = LinkPartnerHandleMoveAnimation, + [CONTROLLER_PRINTSTRING] = LinkPartnerHandlePrintString, + [CONTROLLER_PRINTSTRINGPLAYERONLY] = BtlController_Empty, + [CONTROLLER_CHOOSEACTION] = BtlController_Empty, + [CONTROLLER_YESNOBOX] = BtlController_Empty, + [CONTROLLER_CHOOSEMOVE] = BtlController_Empty, + [CONTROLLER_OPENBAG] = BtlController_Empty, + [CONTROLLER_CHOOSEPOKEMON] = BtlController_Empty, + [CONTROLLER_23] = BtlController_Empty, + [CONTROLLER_HEALTHBARUPDATE] = LinkPartnerHandleHealthBarUpdate, + [CONTROLLER_EXPUPDATE] = BtlController_Empty, + [CONTROLLER_STATUSICONUPDATE] = BtlController_HandleStatusIconUpdate, + [CONTROLLER_STATUSANIMATION] = BtlController_HandleStatusAnimation, + [CONTROLLER_STATUSXOR] = BtlController_Empty, + [CONTROLLER_DATATRANSFER] = BtlController_Empty, + [CONTROLLER_DMA3TRANSFER] = BtlController_Empty, + [CONTROLLER_PLAYBGM] = BtlController_Empty, + [CONTROLLER_32] = BtlController_Empty, + [CONTROLLER_TWORETURNVALUES] = BtlController_Empty, + [CONTROLLER_CHOSENMONRETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE] = BtlController_Empty, + [CONTROLLER_ONERETURNVALUE_DUPLICATE] = BtlController_Empty, + [CONTROLLER_CLEARUNKVAR] = BtlController_HandleClearUnkVar, + [CONTROLLER_SETUNKVAR] = BtlController_HandleSetUnkVar, + [CONTROLLER_CLEARUNKFLAG] = BtlController_HandleClearUnkFlag, + [CONTROLLER_TOGGLEUNKFLAG] = BtlController_HandleToggleUnkFlag, + [CONTROLLER_HITANIMATION] = BtlController_HandleHitAnimation, + [CONTROLLER_CANTSWITCH] = BtlController_Empty, + [CONTROLLER_PLAYSE] = BtlController_HandlePlaySE, + [CONTROLLER_PLAYFANFAREORBGM] = BtlController_HandlePlayFanfareOrBGM, + [CONTROLLER_FAINTINGCRY] = BtlController_HandleFaintingCry, + [CONTROLLER_INTROSLIDE] = BtlController_HandleIntroSlide, + [CONTROLLER_INTROTRAINERBALLTHROW] = LinkPartnerHandleIntroTrainerBallThrow, + [CONTROLLER_DRAWPARTYSTATUSSUMMARY] = LinkPartnerHandleDrawPartyStatusSummary, + [CONTROLLER_HIDEPARTYSTATUSSUMMARY] = BtlController_HandleHidePartyStatusSummary, + [CONTROLLER_ENDBOUNCE] = BtlController_Empty, + [CONTROLLER_SPRITEINVISIBILITY] = BtlController_HandleSpriteInvisibility, + [CONTROLLER_BATTLEANIMATION] = LinkPartnerHandleBattleAnimation, + [CONTROLLER_LINKSTANDBYMSG] = LinkPartnerHandleLinkStandbyMsg, + [CONTROLLER_RESETACTIONMOVESELECTION] = BtlController_Empty, + [CONTROLLER_ENDLINKBATTLE] = LinkPartnerHandleEndLinkBattle, [CONTROLLER_DEBUGMENU] = BtlController_Empty, - [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop // done + [CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop }; void SetControllerToLinkPartner(u32 battler) @@ -98,7 +116,7 @@ void SetControllerToLinkPartner(u32 battler) static void LinkPartnerBufferRunCommand(u32 battler) { - if (gBattleControllerExecFlags & gBitTable[battler]) + if (gBattleControllerExecFlags & (1u << battler)) { if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands)) sLinkPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler); @@ -117,6 +135,7 @@ static void SwitchIn_ShowSubstitute(u32 battler) { if (gSprites[gHealthboxSpriteIds[battler]].callback == SpriteCallbackDummy) { + CopyBattleSpriteInvisibility(battler); if (gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) InitAndLaunchSpecialAnimation(battler, battler, battler, B_ANIM_MON_TO_SUBSTITUTE); @@ -126,7 +145,8 @@ static void SwitchIn_ShowSubstitute(u32 battler) static void SwitchIn_WaitAndEnd(u32 battler) { - if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive) + if (!gBattleSpritesDataPtr->healthBoxesData[battler].specialAnimActive + && gSprites[gBattlerSpriteIds[battler]].callback == SpriteCallbackDummy) { LinkPartnerBufferExecCompleted(battler); } @@ -148,7 +168,7 @@ static void SwitchIn_ShowHealthbox(u32 battler) UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &gPlayerParty[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL); StartHealthboxSlideIn(battler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[battler]); - CopyBattleSpriteInvisibility(battler); + gBattlerControllerFuncs[battler] = SwitchIn_ShowSubstitute; } } @@ -181,7 +201,7 @@ static void LinkPartnerBufferExecCompleted(u32 battler) } else { - gBattleControllerExecFlags &= ~gBitTable[battler]; + gBattleControllerExecFlags &= ~(1u << battler); } } @@ -223,6 +243,16 @@ static void LinkPartnerHandleTrainerSlideBack(u32 battler) BtlController_HandleTrainerSlideBack(battler, 35, FALSE); } +static void LinkPartnerHandleMoveAnimation(u32 battler) +{ + BtlController_HandleMoveAnimation(battler); +} + +static void LinkPartnerHandlePrintString(u32 battler) +{ + BtlController_HandlePrintString(battler); +} + static void LinkPartnerHandleHealthBarUpdate(u32 battler) { BtlController_HandleHealthBarUpdate(battler, FALSE); @@ -246,9 +276,17 @@ static void LinkPartnerHandleBattleAnimation(u32 battler) BtlController_HandleBattleAnimation(battler, FALSE); } +static void LinkPartnerHandleLinkStandbyMsg(u32 battler) +{ + // RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][2]); + LinkPartnerBufferExecCompleted(battler); +} + static void LinkPartnerHandleEndLinkBattle(u32 battler) { + // RecordedBattle_RecordAllBattlerData(&gBattleResources->bufferA[battler][4]); gBattleOutcome = gBattleResources->bufferA[battler][1]; + // gSaveBlock2Ptr->frontier.disableRecordBattle = gBattleResources->bufferA[battler][2]; FadeOutMapMusic(5); BeginFastPaletteFade(3); LinkPartnerBufferExecCompleted(battler);