From 57374b796ba75524952087f5486e9db5df40758b Mon Sep 17 00:00:00 2001 From: Eduardo Quezada Date: Mon, 8 Aug 2022 10:04:18 -0400 Subject: [PATCH] Sync src/battle_controllers.c --- include/battle.h | 4 +- include/battle_controllers.h | 20 +- include/battle_main.h | 2 +- include/cable_club.h | 2 +- include/link.h | 2 +- src/battle_controller_link_opponent.c | 8 +- src/battle_controller_link_partner.c | 8 +- src/battle_controller_oak_old_man.c | 2 +- src/battle_controller_opponent.c | 8 +- src/battle_controller_player.c | 14 +- src/battle_controllers.c | 283 +++++++++++++++----------- src/battle_main.c | 27 +-- src/cable_club.c | 14 +- src/link.c | 2 +- src/trade.c | 12 +- src/trade_scene.c | 4 +- 16 files changed, 234 insertions(+), 178 deletions(-) diff --git a/include/battle.h b/include/battle.h index ec98208a9..db406e4b2 100644 --- a/include/battle.h +++ b/include/battle.h @@ -685,8 +685,8 @@ extern u8 *gBattleAnimBgTileBuffer; extern u8 *gBattleAnimBgTilemapBuffer; extern void (*gBattleMainFunc)(void); extern u8 gMoveSelectionCursor[MAX_BATTLERS_COUNT]; -extern u32 gUnknown_2022B54; -extern u8 gUnknown_2023DDC; +extern u32 gUnusedFirstBattleVar1; +extern u8 gUnusedFirstBattleVar2; extern u8 gBattlerAttacker; extern u8 gEffectBattler; extern u8 gMultiHitCounter; diff --git a/include/battle_controllers.h b/include/battle_controllers.h index b473f5022..b39db340c 100644 --- a/include/battle_controllers.h +++ b/include/battle_controllers.h @@ -174,13 +174,13 @@ enum CONTROLLER_CHOSENMONRETURNVALUE, CONTROLLER_ONERETURNVALUE, CONTROLLER_ONERETURNVALUE_DUPLICATE, - CONTROLLER_37, - CONTROLLER_38, - CONTROLLER_39, - CONTROLLER_40, + CONTROLLER_CLEARUNKVAR, + CONTROLLER_SETUNKVAR, + CONTROLLER_CLEARUNKFLAG, + CONTROLLER_TOGGLEUNKFLAG, CONTROLLER_HITANIMATION, - CONTROLLER_42, - CONTROLLER_EFFECTIVENESSSOUND, + CONTROLLER_CANTSWITCH, + CONTROLLER_PLAYSE, CONTROLLER_PLAYFANFAREORBGM, CONTROLLER_FAINTINGCRY, CONTROLLER_INTROSLIDE, @@ -198,12 +198,12 @@ enum CONTROLLER_CMDS_COUNT }; -extern struct UnusedControllerStruct gUnknown_2022870; +extern struct UnusedControllerStruct gUnusedControllerStruct; // general functions void HandleLinkBattleSetup(void); void SetUpBattleVars(void); -void InitBtlControllers(void); +void InitBattleControllers(void); void TryReceiveLinkBattleData(void); void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data); @@ -221,7 +221,7 @@ void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId); void BtlController_EmitMoveAnimation(u8 bufferId, u16 move, u8 turnOfMove, u16 movePower, s32 dmg, u8 friendship, struct DisableStruct *disableStructPtr); void BtlController_EmitPrintString(u8 bufferId, u16 stringId); void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringId); -void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2); +void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId); void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpNumber, struct ChooseMoveStruct *movePpData); void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1); void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4); @@ -251,7 +251,7 @@ void BtlController_EmitResetActionMoveSelection(u8 bufferId, u8 caseId); void BtlController_EmitEndLinkBattle(u8 bufferId, u8 battleOutcome); // player controller -void PlayerDummy(void); +void BattleControllerDummy(void); void SetControllerToPlayer(void); void PlayerHandleGetRawMonData(void); void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite); diff --git a/include/battle_main.h b/include/battle_main.h index 009e0e562..d5866c57a 100644 --- a/include/battle_main.h +++ b/include/battle_main.h @@ -82,7 +82,7 @@ void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude); void EndBounceEffect(u8 battler, u8 which); void SpriteCB_PlayerThrowInit(struct Sprite *sprite); void UpdatePlayerPosInThrowAnim(struct Sprite *sprite); -void BattleDummy(void); +void BeginBattleIntroDummy(void); void BeginBattleIntro(void); void SwitchInClearSetData(void); void FaintClearSetData(void); diff --git a/include/cable_club.h b/include/cable_club.h index d89e8222c..a9a11c334 100644 --- a/include/cable_club.h +++ b/include/cable_club.h @@ -8,7 +8,7 @@ // Exported RAM declarations // Exported ROM declarations -void Task_WaitForReceivedRemoteLinkPlayers5SecondTimeout(u8 taskId); +void Task_WaitForLinkPlayerConnection(u8 taskId); u8 CreateTask_ReestablishLinkInCableClubRoom(void); void CB2_ReturnFromCableClubBattle(void); bool32 GetSeeingLinkPlayerCardMsg(u8 who); diff --git a/include/link.h b/include/link.h index 47f85bb9d..f195ff56c 100644 --- a/include/link.h +++ b/include/link.h @@ -227,7 +227,7 @@ bool8 IsLinkPlayerDataExchangeComplete(void); u32 GetLinkPlayerTrainerId(u8); void ResetLinkPlayers(void); u8 GetMultiplayerId(void); -u8 bitmask_all_link_players_but_self(void); +u8 BitmaskAllOtherLinkPlayers(void); bool8 SendBlock(u8, const void *, u16); u8 GetBlockReceivedStatus(void); void ResetBlockReceivedFlags(void); diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index 839a230ad..803003848 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -1449,25 +1449,25 @@ static void LinkOpponentHandleOneReturnValue_Duplicate(void) static void LinkOpponentHandleCmd37(void) { - gUnknown_2022870.field_0 = 0; + gUnusedControllerStruct.field_0 = 0; LinkOpponentBufferExecCompleted(); } static void LinkOpponentHandleCmd38(void) { - gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.field_0 = gBattleBufferA[gActiveBattler][1]; LinkOpponentBufferExecCompleted(); } static void LinkOpponentHandleCmd39(void) { - gUnknown_2022870.flag_x80 = 0; + gUnusedControllerStruct.flag_x80 = 0; LinkOpponentBufferExecCompleted(); } static void LinkOpponentHandleCmd40(void) { - gUnknown_2022870.flag_x80 ^= 1; + gUnusedControllerStruct.flag_x80 ^= 1; LinkOpponentBufferExecCompleted(); } diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 7dbfbde65..f8c45c634 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -1362,25 +1362,25 @@ static void LinkPartnerHandleOneReturnValue_Duplicate(void) static void LinkPartnerHandleCmd37(void) { - gUnknown_2022870.field_0 = 0; + gUnusedControllerStruct.field_0 = 0; LinkPartnerBufferExecCompleted(); } static void LinkPartnerHandleCmd38(void) { - gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.field_0 = gBattleBufferA[gActiveBattler][1]; LinkPartnerBufferExecCompleted(); } static void LinkPartnerHandleCmd39(void) { - gUnknown_2022870.flag_x80 = 0; + gUnusedControllerStruct.flag_x80 = 0; LinkPartnerBufferExecCompleted(); } static void LinkPartnerHandleCmd40(void) { - gUnknown_2022870.flag_x80 ^= 1; + gUnusedControllerStruct.flag_x80 ^= 1; LinkPartnerBufferExecCompleted(); } diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index b2c8341ef..a7cfaed6d 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -2094,7 +2094,7 @@ static void OakOldManHandleIntroTrainerBallThrow(void) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; + gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; } else { diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 3aa20e0f3..c82f4eb9f 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1548,25 +1548,25 @@ static void OpponentHandleOneReturnValue_Duplicate(void) static void OpponentHandleCmd37(void) { - gUnknown_2022870.field_0 = 0; + gUnusedControllerStruct.field_0 = 0; OpponentBufferExecCompleted(); } static void OpponentHandleCmd38(void) { - gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.field_0 = gBattleBufferA[gActiveBattler][1]; OpponentBufferExecCompleted(); } static void OpponentHandleCmd39(void) { - gUnknown_2022870.flag_x80 = 0; + gUnusedControllerStruct.flag_x80 = 0; OpponentBufferExecCompleted(); } static void OpponentHandleCmd40(void) { - gUnknown_2022870.flag_x80 ^= 1; + gUnusedControllerStruct.flag_x80 ^= 1; OpponentBufferExecCompleted(); } diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 2ebffdc77..007d81cff 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -173,7 +173,7 @@ static const u8 sTargetIdentities[] = { B_POSITION_PLAYER_LEFT, B_POSITION_PLAYE // not used static const u8 gUnknown_8250984[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 }; -void PlayerDummy(void) +void BattleControllerDummy(void) { } @@ -2523,7 +2523,7 @@ static void PlayerHandleExpUpdate(void) gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_gainedExp = expPointsToGive; gTasks[taskId].tExpTask_battler = gActiveBattler; - gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; + gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; } } @@ -2626,25 +2626,25 @@ static void PlayerHandleOneReturnValue_Duplicate(void) static void PlayerHandleCmd37(void) { - gUnknown_2022870.field_0 = 0; + gUnusedControllerStruct.field_0 = 0; PlayerBufferExecCompleted(); } static void PlayerHandleCmd38(void) { - gUnknown_2022870.field_0 = gBattleBufferA[gActiveBattler][1]; + gUnusedControllerStruct.field_0 = gBattleBufferA[gActiveBattler][1]; PlayerBufferExecCompleted(); } static void PlayerHandleCmd39(void) { - gUnknown_2022870.flag_x80 = 0; + gUnusedControllerStruct.flag_x80 = 0; PlayerBufferExecCompleted(); } static void PlayerHandleCmd40(void) { - gUnknown_2022870.flag_x80 ^= 1; + gUnusedControllerStruct.flag_x80 ^= 1; PlayerBufferExecCompleted(); } @@ -2720,7 +2720,7 @@ static void PlayerHandleIntroTrainerBallThrow(void) if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; gBattleSpritesDataPtr->animationData->introAnimActive = TRUE; - gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; + gBattlerControllerFuncs[gActiveBattler] = BattleControllerDummy; } void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite) diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 205c49362..6b03f25d3 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -1,25 +1,22 @@ #include "global.h" #include "battle.h" -#include "battle_main.h" #include "battle_ai_script_commands.h" #include "battle_anim.h" -#include "battle_util.h" #include "battle_controllers.h" #include "battle_message.h" +#include "cable_club.h" #include "link.h" #include "link_rfu.h" -#include "cable_club.h" #include "party_menu.h" #include "task.h" #include "util.h" #include "constants/abilities.h" -#include "constants/battle.h" static EWRAM_DATA u8 sLinkSendTaskId = 0; static EWRAM_DATA u8 sLinkReceiveTaskId = 0; -static EWRAM_DATA u8 gUnknown_202286E = 0; -EWRAM_DATA struct UnusedControllerStruct gUnknown_2022870 = {0}; -static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {0}; +static EWRAM_DATA u8 sUnused = 0; // Debug? Never read +EWRAM_DATA struct UnusedControllerStruct gUnusedControllerStruct = {}; // Debug? Unused code that writes to it, never read +static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {}; static void CreateTasksForSendRecvLinkBuffers(void); static void InitLinkBtlControllers(void); @@ -36,7 +33,7 @@ void HandleLinkBattleSetup(void) SetWirelessCommType1(); if (!gReceivedRemoteLinkPlayers) OpenLink(); - CreateTask(Task_WaitForReceivedRemoteLinkPlayers5SecondTimeout, 0); + CreateTask(Task_WaitForLinkPlayerConnection, 0); CreateTasksForSendRecvLinkBuffers(); } } @@ -45,24 +42,28 @@ void SetUpBattleVars(void) { s32 i; - gBattleMainFunc = BattleDummy; - for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + gBattleMainFunc = BeginBattleIntroDummy; + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - gBattlerControllerFuncs[i] = PlayerDummy; + gBattlerControllerFuncs[i] = BattleControllerDummy; gBattlerPositions[i] = 0xFF; gActionSelectionCursor[i] = 0; gMoveSelectionCursor[i] = 0; } + HandleLinkBattleSetup(); gBattleControllerExecFlags = 0; ClearBattleAnimationVars(); ClearBattleMonForms(); BattleAI_HandleItemUseBeforeAISetup(); - gUnknown_2022B54 = 0; - gUnknown_2023DDC = 0; + + // Below are never read + gUnusedFirstBattleVar1 = 0; + gUnusedFirstBattleVar2 = 0; } -void InitBtlControllers(void) +void InitBattleControllers(void) { s32 i; @@ -70,10 +71,14 @@ void InitBtlControllers(void) InitLinkBtlControllers(); else InitSinglePlayerBtlControllers(); + SetBattlePartyIds(); + if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - for (i = 0; i < gBattlersCount; ++i) + { + for (i = 0; i < gBattlersCount; i++) BufferBattlePartyCurrentOrderBySide(i, 0); + } } static void InitSinglePlayerBtlControllers(void) @@ -143,55 +148,71 @@ static void InitLinkBtlControllers(void) if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { gBattleMainFunc = BeginBattleIntro; + gBattlerControllerFuncs[0] = SetControllerToPlayer; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; + gBattlerControllerFuncs[1] = SetControllerToLinkOpponent; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; + gBattlersCount = 2; } else { gBattlerControllerFuncs[1] = SetControllerToPlayer; gBattlerPositions[1] = B_POSITION_PLAYER_LEFT; + gBattlerControllerFuncs[0] = SetControllerToLinkOpponent; gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT; + gBattlersCount = 2; } } - else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) { gBattleMainFunc = BeginBattleIntro; + gBattlerControllerFuncs[0] = SetControllerToPlayer; gBattlerPositions[0] = B_POSITION_PLAYER_LEFT; + gBattlerControllerFuncs[1] = SetControllerToLinkOpponent; gBattlerPositions[1] = B_POSITION_OPPONENT_LEFT; + gBattlerControllerFuncs[2] = SetControllerToPlayer; gBattlerPositions[2] = B_POSITION_PLAYER_RIGHT; + gBattlerControllerFuncs[3] = SetControllerToLinkOpponent; gBattlerPositions[3] = B_POSITION_OPPONENT_RIGHT; + gBattlersCount = MAX_BATTLERS_COUNT; } else { gBattlerControllerFuncs[1] = SetControllerToPlayer; gBattlerPositions[1] = B_POSITION_PLAYER_LEFT; + gBattlerControllerFuncs[0] = SetControllerToLinkOpponent; gBattlerPositions[0] = B_POSITION_OPPONENT_LEFT; + gBattlerControllerFuncs[3] = SetControllerToPlayer; gBattlerPositions[3] = B_POSITION_PLAYER_RIGHT; + gBattlerControllerFuncs[2] = SetControllerToLinkOpponent; gBattlerPositions[2] = B_POSITION_OPPONENT_RIGHT; + gBattlersCount = MAX_BATTLERS_COUNT; } } else { multiplayerId = GetMultiplayerId(); + if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) gBattleMainFunc = BeginBattleIntro; - for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { switch (gLinkPlayers[i].id) { @@ -204,6 +225,7 @@ static void InitLinkBtlControllers(void) BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1); break; } + if (i == multiplayerId) { gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer; @@ -223,7 +245,8 @@ static void InitLinkBtlControllers(void) } else { - if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1))) + if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1)) + || ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1))) { gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkPartner; switch (gLinkPlayers[i].id) @@ -259,6 +282,7 @@ static void InitLinkBtlControllers(void) } } } + gBattlersCount = MAX_BATTLERS_COUNT; } } @@ -269,7 +293,7 @@ static void SetBattlePartyIds(void) if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - for (i = 0; i < gBattlersCount; ++i) + for (i = 0; i < gBattlersCount; i++) { for (j = 0; j < PARTY_SIZE; ++j) { @@ -342,13 +366,19 @@ static void PrepareBufferDataTransfer(u8 bufferId, u8 *data, u16 size) { switch (bufferId) { - case 0: - for (i = 0; i < size; ++data, ++i) + case BUFFER_A: + for (i = 0; i < size; i++) + { gBattleBufferA[gActiveBattler][i] = *data; + data++; + } break; - case 1: - for (i = 0; i < size; ++data, ++i) + case BUFFER_B: + for (i = 0; i < size; i++) + { gBattleBufferB[gActiveBattler][i] = *data; + data++; + } break; } } @@ -362,12 +392,14 @@ static void CreateTasksForSendRecvLinkBuffers(void) gTasks[sLinkSendTaskId].data[13] = 0; gTasks[sLinkSendTaskId].data[14] = 0; gTasks[sLinkSendTaskId].data[15] = 0; + sLinkReceiveTaskId = CreateTask(Task_HandleCopyReceivedLinkBuffersData, 0); gTasks[sLinkReceiveTaskId].data[12] = 0; gTasks[sLinkReceiveTaskId].data[13] = 0; gTasks[sLinkReceiveTaskId].data[14] = 0; gTasks[sLinkReceiveTaskId].data[15] = 0; - gUnknown_202286E = 0; + + sUnused = 0; } enum @@ -380,12 +412,13 @@ enum LINK_BUFF_SIZE_HI, LINK_BUFF_ABSENT_BATTLER_FLAGS, LINK_BUFF_EFFECT_BATTLER, - LINK_BUFF_DATA + LINK_BUFF_DATA, }; void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data) { - s32 alignedSize, i; + s32 alignedSize; + s32 i; alignedSize = size - size % 4 + 4; if (gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA + 1 > BATTLE_BUFFER_LINK_SIZE) @@ -401,8 +434,10 @@ void PrepareBufferDataTransferLink(u8 bufferId, u16 size, u8 *data) gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_SIZE_HI] = (alignedSize & 0x0000FF00) >> 8; gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_ABSENT_BATTLER_FLAGS] = gAbsentBattlerFlags; gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_EFFECT_BATTLER] = gEffectBattler; - for (i = 0; i < size; ++i) + + for (i = 0; i < size; i++) gLinkBattleSendBuffer[gTasks[sLinkSendTaskId].data[14] + LINK_BUFF_DATA + i] = data[i]; + gTasks[sLinkSendTaskId].data[14] = gTasks[sLinkSendTaskId].data[14] + alignedSize + LINK_BUFF_DATA; } @@ -415,12 +450,13 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) { case 0: gTasks[taskId].data[10] = 100; - ++gTasks[taskId].data[11]; + gTasks[taskId].data[11]++; break; case 1: - if (!--gTasks[taskId].data[10]) + gTasks[taskId].data[10]--; + if (gTasks[taskId].data[10] == 0) { - ++gTasks[taskId].data[11]; + gTasks[taskId].data[11]++; if (gReceivedRemoteLinkPlayers) gTasks[taskId].data[11] = 3; } @@ -432,18 +468,18 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) if (IsLinkMaster()) { CheckShouldAdvanceLinkState(); - ++gTasks[taskId].data[11]; + gTasks[taskId].data[11]++; } else { - ++gTasks[taskId].data[11]; + gTasks[taskId].data[11]++; } } break; case 3: if (gTasks[taskId].data[15] != gTasks[taskId].data[14]) { - if (!gTasks[taskId].data[13]) + if (gTasks[taskId].data[13] == 0) { if (gTasks[taskId].data[15] > gTasks[taskId].data[14] && gTasks[taskId].data[15] == gTasks[taskId].data[12]) @@ -452,12 +488,12 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) gTasks[taskId].data[15] = 0; } blockSize = (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleSendBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8)) + LINK_BUFF_DATA; - SendBlock(bitmask_all_link_players_but_self(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize); - ++gTasks[taskId].data[11]; + SendBlock(BitmaskAllOtherLinkPlayers(), &gLinkBattleSendBuffer[gTasks[taskId].data[15]], blockSize); + gTasks[taskId].data[11]++; } else { - --gTasks[taskId].data[13]; + gTasks[taskId].data[13]--; break; } } @@ -472,7 +508,8 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) } break; case 5: - if (!--gTasks[taskId].data[13]) + gTasks[taskId].data[13]--; + if (gTasks[taskId].data[13] == 0) { gTasks[taskId].data[13] = 5; gTasks[taskId].data[11] = 3; @@ -487,10 +524,10 @@ void TryReceiveLinkBattleData(void) s32 j; u8 *recvBuffer; - if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211)) + if (gReceivedRemoteLinkPlayers != 0 && (gBattleTypeFlags & BATTLE_TYPE_LINK_IN_BATTLE) && (gLinkPlayers[0].linkType == 0x2211)) { LinkRfu_DestroyIdleTask(); - for (i = 0; i < GetLinkPlayerCount(); ++i) + for (i = 0; i < GetLinkPlayerCount(); i++) { if (GetBlockReceivedStatus() & gBitTable[i]) { @@ -498,18 +535,21 @@ void TryReceiveLinkBattleData(void) recvBuffer = (u8 *)gBlockRecvBuffer[i]; { u8 *dest, *src; - u16 r6 = gBlockRecvBuffer[i][2]; + u16 dataSize = gBlockRecvBuffer[i][2]; - if (gTasks[sLinkReceiveTaskId].data[14] + 9 + r6 > 0x1000) + if (gTasks[sLinkReceiveTaskId].data[14] + 9 + dataSize > 0x1000) { gTasks[sLinkReceiveTaskId].data[12] = gTasks[sLinkReceiveTaskId].data[14]; gTasks[sLinkReceiveTaskId].data[14] = 0; } + dest = &gLinkBattleRecvBuffer[gTasks[sLinkReceiveTaskId].data[14]]; src = recvBuffer; - for (j = 0; j < r6 + 8; ++j) + + for (j = 0; j < dataSize + 8; j++) dest[j] = src[j]; - gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + r6 + 8; + + gTasks[sLinkReceiveTaskId].data[14] = gTasks[sLinkReceiveTaskId].data[14] + dataSize + 8; } } } @@ -532,13 +572,16 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) } battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BATTLER]; blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8); + switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0]) { case 0: if (gBattleControllerExecFlags & gBitTable[battlerId]) return; + memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA], blockSize); MarkBattlerReceivedLinkData(battlerId); + if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) { gBattlerAttacker = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ATTACKER]; @@ -555,6 +598,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId) gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4)); break; } + gTasks[taskId].data[15] = gTasks[taskId].data[15] + blockSize + LINK_BUFF_DATA; } } @@ -568,7 +612,7 @@ void BtlController_EmitGetMonData(u8 bufferId, u8 requestId, u8 monToCheck) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// not used +// Unused static void BtlController_EmitGetRawMonData(u8 bufferId, u8 monId, u8 bytes) { sBattleBuffersTransferData[0] = CONTROLLER_GETRAWMONDATA; @@ -585,12 +629,12 @@ void BtlController_EmitSetMonData(u8 bufferId, u8 requestId, u8 monToCheck, u8 b sBattleBuffersTransferData[0] = CONTROLLER_SETMONDATA; sBattleBuffersTransferData[1] = requestId; sBattleBuffersTransferData[2] = monToCheck; - for (i = 0; i < bytes; ++i) + for (i = 0; i < bytes; i++) sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 3 + bytes); } -// not used +// Unused static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, void *data) { s32 i; @@ -598,7 +642,7 @@ static void BtlController_EmitSetRawMonData(u8 bufferId, u8 monId, u8 bytes, voi sBattleBuffersTransferData[0] = CONTROLLER_SETRAWMONDATA; sBattleBuffersTransferData[1] = monId; sBattleBuffersTransferData[2] = bytes; - for (i = 0; i < bytes; ++i) + for (i = 0; i < bytes; i++) sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, bytes + 3); } @@ -664,7 +708,7 @@ void BtlController_EmitFaintAnimation(u8 bufferId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// not used +// Unused static void BtlController_EmitPaletteFade(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_PALETTEFADE; @@ -674,7 +718,7 @@ static void BtlController_EmitPaletteFade(u8 bufferId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// not used +// Unused static void BtlController_EmitSuccessBallThrowAnim(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_SUCCESSBALLTHROWANIM; @@ -691,14 +735,14 @@ void BtlController_EmitBallThrowAnim(u8 bufferId, u8 caseId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); } -// not used +// Unused static void BtlController_EmitPause(u8 bufferId, u8 toWait, void *data) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_PAUSE; sBattleBuffersTransferData[1] = toWait; - for (i = 0; i < toWait * 3; ++i) + for (i = 0; i < toWait * 3; i++) sBattleBuffersTransferData[2 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, toWait * 3 + 2); } @@ -742,6 +786,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID) sBattleBuffersTransferData[1] = gBattleOutcome; sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; + stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]); stringInfo->currentMove = gCurrentMove; stringInfo->originallyUsedMove = gChosenMove; @@ -752,9 +797,10 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID) stringInfo->hpScale = gBattleStruct->hpScale; stringInfo->itemEffectBattler = gPotentialItemEffectBattler; stringInfo->moveType = gBattleMoves[gCurrentMove].type; - for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) stringInfo->abilities[i] = gBattleMons[i].ability; - for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i) + for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; i++) { stringInfo->textBuffs[0][i] = gBattleTextBuff1[i]; stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; @@ -772,6 +818,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) sBattleBuffersTransferData[1] = CONTROLLER_PRINTSTRINGPLAYERONLY; sBattleBuffersTransferData[2] = stringID; sBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8; + stringInfo = (struct BattleMsgData *)(&sBattleBuffersTransferData[4]); stringInfo->currentMove = gCurrentMove; stringInfo->originallyUsedMove = gChosenMove; @@ -779,9 +826,10 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) stringInfo->lastAbility = gLastUsedAbility; stringInfo->scrActive = gBattleScripting.battler; stringInfo->bakScriptPartyIdx = gBattleStruct->scriptPartyIdx; - for (i = 0; i < MAX_BATTLERS_COUNT; ++i) + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) stringInfo->abilities[i] = gBattleMons[i].ability; - for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i) + for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; i++) { stringInfo->textBuffs[0][i] = gBattleTextBuff1[i]; stringInfo->textBuffs[1][i] = gBattleTextBuff2[i]; @@ -790,16 +838,17 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct BattleMsgData) + 4); } -void BtlController_EmitChooseAction(u8 bufferId, u8 arg1, u16 arg2) +// itemId only relevant for B_ACTION_USE_ITEM +void BtlController_EmitChooseAction(u8 bufferId, u8 action, u16 itemId) { sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEACTION; - sBattleBuffersTransferData[1] = arg1; - sBattleBuffersTransferData[2] = arg2; - sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = action; + sBattleBuffersTransferData[2] = itemId; + sBattleBuffersTransferData[3] = (itemId & 0xFF00) >> 8; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// not used +// Unused static void BtlController_EmitUnknownYesNoBox(u8 bufferId, u32 arg1) // TODO: Does the function name make sense for pokefirered? { sBattleBuffersTransferData[0] = CONTROLLER_UNKNOWNYESNOBOX; @@ -815,35 +864,35 @@ void BtlController_EmitChooseMove(u8 bufferId, bool8 isDoubleBattle, bool8 NoPpN sBattleBuffersTransferData[1] = isDoubleBattle; sBattleBuffersTransferData[2] = NoPpNumber; sBattleBuffersTransferData[3] = 0; - for (i = 0; i < sizeof(*movePpData); ++i) + for (i = 0; i < sizeof(*movePpData); i++) sBattleBuffersTransferData[4 + i] = *((u8 *)(movePpData) + i); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(*movePpData) + 4); } -void BtlController_EmitChooseItem(u8 bufferId, u8 *arg1) +void BtlController_EmitChooseItem(u8 bufferId, u8 *battlePartyOrder) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_OPENBAG; - for (i = 0; i < 3; ++i) - sBattleBuffersTransferData[1 + i] = arg1[i]; + for (i = 0; i < PARTY_SIZE / 2; i++) + sBattleBuffersTransferData[1 + i] = battlePartyOrder[i]; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 arg2, u8 abilityId, u8 *arg4) +void BtlController_EmitChoosePokemon(u8 bufferId, u8 caseId, u8 slotId, u8 abilityId, u8 *data) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_CHOOSEPOKEMON; sBattleBuffersTransferData[1] = caseId; - sBattleBuffersTransferData[2] = arg2; + sBattleBuffersTransferData[2] = slotId; sBattleBuffersTransferData[3] = abilityId; - for (i = 0; i < 3; ++i) - sBattleBuffersTransferData[4 + i] = arg4[i]; + for (i = 0; i < 3; i++) + sBattleBuffersTransferData[4 + i] = data[i]; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 8); // Only 7 bytes were written. } -// not used +// Unused static void BtlController_EmitCmd23(u8 bufferId) { sBattleBuffersTransferData[0] = CONTROLLER_23; @@ -896,7 +945,7 @@ void BtlController_EmitStatusAnimation(u8 bufferId, bool8 status2, u32 status) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 6); } -// not used +// Unused static void BtlController_EmitStatusXor(u8 bufferId, u8 b) { sBattleBuffersTransferData[0] = CONTROLLER_STATUSXOR; @@ -912,12 +961,12 @@ void BtlController_EmitDataTransfer(u8 bufferId, u16 size, void *data) sBattleBuffersTransferData[1] = CONTROLLER_DATATRANSFER; sBattleBuffersTransferData[2] = size; sBattleBuffersTransferData[3] = (size & 0xFF00) >> 8; - for (i = 0; i < size; ++i) + for (i = 0; i < size; i++) sBattleBuffersTransferData[4 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 4); } -// not used +// Unused static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, void *data) { s32 i; @@ -929,7 +978,7 @@ static void BtlController_EmitDMA3Transfer(u8 bufferId, void *dst, u16 size, voi sBattleBuffersTransferData[4] = ((u32)(dst) & 0xFF000000) >> 24; sBattleBuffersTransferData[5] = size; sBattleBuffersTransferData[6] = (size & 0xFF00) >> 8; - for (i = 0; i < size; ++i) + for (i = 0; i < size; i++) sBattleBuffersTransferData[7 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 7); } @@ -945,12 +994,12 @@ static void BtlController_EmitPlayBGM(u8 bufferId, u16 songId, void *data) // Nonsense loop using songId as a size // Would go out of bounds for any song id after SE_DEOXYS_MOVE (253) - for (i = 0; i < songId; ++i) + for (i = 0; i < songId; i++) sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, songId + 3); } -// not used +// Unused static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data) { s32 i; @@ -958,84 +1007,84 @@ static void BtlController_EmitCmd32(u8 bufferId, u16 size, void *data) sBattleBuffersTransferData[0] = CONTROLLER_32; sBattleBuffersTransferData[1] = size; sBattleBuffersTransferData[2] = (size & 0xFF00) >> 8; - for (i = 0; i < size; ++i) + for (i = 0; i < size; i++) sBattleBuffersTransferData[3 + i] = *(u8 *)(data++); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, size + 3); } -void BtlController_EmitTwoReturnValues(u8 bufferId, u8 arg1, u16 arg2) +void BtlController_EmitTwoReturnValues(u8 bufferId, u8 ret8, u16 ret16) { sBattleBuffersTransferData[0] = CONTROLLER_TWORETURNVALUES; - sBattleBuffersTransferData[1] = arg1; - sBattleBuffersTransferData[2] = arg2; - sBattleBuffersTransferData[3] = (arg2 & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = ret8; + sBattleBuffersTransferData[2] = ret16; + sBattleBuffersTransferData[3] = (ret16 & 0xFF00) >> 8; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 b, u8 *c) +void BtlController_EmitChosenMonReturnValue(u8 bufferId, u8 partyId, u8 *battlePartyOrder) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_CHOSENMONRETURNVALUE; - sBattleBuffersTransferData[1] = b; - for (i = 0; i < 3; ++i) - sBattleBuffersTransferData[2 + i] = c[i]; + sBattleBuffersTransferData[1] = partyId; + for (i = 0; i < (int)ARRAY_COUNT(gBattlePartyCurrentOrder); i++) + sBattleBuffersTransferData[2 + i] = battlePartyOrder[i]; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 5); } -void BtlController_EmitOneReturnValue(u8 bufferId, u16 arg1) +void BtlController_EmitOneReturnValue(u8 bufferId, u16 ret) { sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE; - sBattleBuffersTransferData[1] = arg1; - sBattleBuffersTransferData[2] = (arg1 & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = ret; + sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 b) +void BtlController_EmitOneReturnValue_Duplicate(u8 bufferId, u16 ret) { sBattleBuffersTransferData[0] = CONTROLLER_ONERETURNVALUE_DUPLICATE; - sBattleBuffersTransferData[1] = b; - sBattleBuffersTransferData[2] = (b & 0xFF00) >> 8; + sBattleBuffersTransferData[1] = ret; + sBattleBuffersTransferData[2] = (ret & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// not used -static void BtlController_EmitCmd37(u8 bufferId) +// Unused +static void BtlController_EmitClearUnkVar(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_37; - sBattleBuffersTransferData[1] = CONTROLLER_37; - sBattleBuffersTransferData[2] = CONTROLLER_37; - sBattleBuffersTransferData[3] = CONTROLLER_37; + sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKVAR; + sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKVAR; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// not used -static void BtlController_EmitCmd38(u8 bufferId, u8 b) +// Unused +static void BtlController_EmitSetUnkVar(u8 bufferId, u8 b) { - sBattleBuffersTransferData[0] = CONTROLLER_38; + sBattleBuffersTransferData[0] = CONTROLLER_SETUNKVAR; sBattleBuffersTransferData[1] = b; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 2); } -// not used -static void BtlController_EmitCmd39(u8 bufferId) +// Unused +static void BtlController_EmitClearUnkFlag(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_39; - sBattleBuffersTransferData[1] = CONTROLLER_39; - sBattleBuffersTransferData[2] = CONTROLLER_39; - sBattleBuffersTransferData[3] = CONTROLLER_39; + sBattleBuffersTransferData[0] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[1] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[2] = CONTROLLER_CLEARUNKFLAG; + sBattleBuffersTransferData[3] = CONTROLLER_CLEARUNKFLAG; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -// not used -static void BtlController_EmitCmd40(u8 bufferId) +// Unused +static void BtlController_EmitToggleUnkFlag(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_40; - sBattleBuffersTransferData[1] = CONTROLLER_40; - sBattleBuffersTransferData[2] = CONTROLLER_40; - sBattleBuffersTransferData[3] = CONTROLLER_40; + sBattleBuffersTransferData[0] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[1] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[2] = CONTROLLER_TOGGLEUNKFLAG; + sBattleBuffersTransferData[3] = CONTROLLER_TOGGLEUNKFLAG; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } @@ -1050,16 +1099,16 @@ void BtlController_EmitHitAnimation(u8 bufferId) void BtlController_EmitCantSwitch(u8 bufferId) { - sBattleBuffersTransferData[0] = CONTROLLER_42; - sBattleBuffersTransferData[1] = CONTROLLER_42; - sBattleBuffersTransferData[2] = CONTROLLER_42; - sBattleBuffersTransferData[3] = CONTROLLER_42; + sBattleBuffersTransferData[0] = CONTROLLER_CANTSWITCH; + sBattleBuffersTransferData[1] = CONTROLLER_CANTSWITCH; + sBattleBuffersTransferData[2] = CONTROLLER_CANTSWITCH; + sBattleBuffersTransferData[3] = CONTROLLER_CANTSWITCH; PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } void BtlController_EmitPlaySE(u8 bufferId, u16 songId) { - sBattleBuffersTransferData[0] = CONTROLLER_EFFECTIVENESSSOUND; + sBattleBuffersTransferData[0] = CONTROLLER_PLAYSE; sBattleBuffersTransferData[1] = songId; sBattleBuffersTransferData[2] = (songId & 0xFF00) >> 8; sBattleBuffersTransferData[3] = 0; @@ -1108,7 +1157,7 @@ void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* h sBattleBuffersTransferData[1] = flags & ~PARTY_SUMM_SKIP_DRAW_DELAY; // If true, skip player side sBattleBuffersTransferData[2] = (flags & PARTY_SUMM_SKIP_DRAW_DELAY) >> 7; // If true, skip delay after drawing. True during intro sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY; - for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); ++i) + for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); i++) sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus)); PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, sizeof(struct HpAndStatus) * PARTY_SIZE + 4); } diff --git a/src/battle_main.c b/src/battle_main.c index 681230482..d15526438 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -133,7 +133,7 @@ EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0}; static EWRAM_DATA u32 sFlickerArray[25] = {0}; EWRAM_DATA u32 gBattleTypeFlags = 0; EWRAM_DATA u8 gBattleTerrain = 0; -EWRAM_DATA u32 gUnknown_2022B54 = 0; +EWRAM_DATA u32 gUnusedFirstBattleVar1 = 0; EWRAM_DATA struct MultiBattlePokemonTx gMultiPartnerParty[3] = {0}; EWRAM_DATA u8 *gBattleAnimBgTileBuffer = NULL; EWRAM_DATA u8 *gBattleAnimBgTilemapBuffer = NULL; @@ -185,7 +185,7 @@ EWRAM_DATA u8 gMoveResultFlags = 0; EWRAM_DATA u32 gHitMarker = 0; static EWRAM_DATA u8 sUnusedBattlersArray[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT] = {0}; -EWRAM_DATA u8 gUnknown_2023DDC = 0; +EWRAM_DATA u8 gUnusedFirstBattleVar2 = 0; EWRAM_DATA u16 gSideStatuses[2] = {0}; EWRAM_DATA struct SideTimer gSideTimers[2] = {0}; EWRAM_DATA u32 gStatuses3[MAX_BATTLERS_COUNT] = {0}; @@ -974,7 +974,7 @@ static void CB2_HandleStartBattle(void) *(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2; BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); gBattleCommunication[MULTIUSE_STATE] = 2; } if (gWirelessCommType != 0) @@ -1009,7 +1009,7 @@ static void CB2_HandleStartBattle(void) case 3: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(struct Pokemon) * 2); + SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1024,7 +1024,7 @@ static void CB2_HandleStartBattle(void) case 7: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(struct Pokemon) * 2); + SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty + 2, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1039,7 +1039,7 @@ static void CB2_HandleStartBattle(void) case 11: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(struct Pokemon) * 2); + SendBlock(BitmaskAllOtherLinkPlayers(), gPlayerParty + 4, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1058,7 +1058,7 @@ static void CB2_HandleStartBattle(void) } break; case 15: - InitBtlControllers(); + InitBattleControllers(); gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0; @@ -1141,7 +1141,7 @@ static void CB2_PreInitMultiBattle(void) if (gReceivedRemoteLinkPlayers && IsLinkTaskFinished()) { PrepareOwnMultiPartnerBuffer(); - SendBlock(bitmask_all_link_players_but_self(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons)); + SendBlock(BitmaskAllOtherLinkPlayers(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons)); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1230,7 +1230,7 @@ static void CB2_HandleStartMultiBattle(void) *(&gBattleStruct->multiBuffer.linkBattlerHeader.versionSignatureHi) = 2; BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); + SendBlock(BitmaskAllOtherLinkPlayers(), &gBattleStruct->multiBuffer.linkBattlerHeader, sizeof(gBattleStruct->multiBuffer.linkBattlerHeader)); gBattleCommunication[MULTIUSE_STATE]++; } if (gWirelessCommType) @@ -1281,7 +1281,7 @@ static void CB2_HandleStartMultiBattle(void) case 3: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer, sizeof(struct Pokemon) * 2); + SendBlock(BitmaskAllOtherLinkPlayers(), gDecompressionBuffer, sizeof(struct Pokemon) * 2); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1344,7 +1344,7 @@ static void CB2_HandleStartMultiBattle(void) case 7: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon)); + SendBlock(BitmaskAllOtherLinkPlayers(), gDecompressionBuffer + sizeof(struct Pokemon) * 2, sizeof(struct Pokemon)); gBattleCommunication[MULTIUSE_STATE]++; } break; @@ -1417,7 +1417,7 @@ static void CB2_HandleStartMultiBattle(void) } break; case 11: - InitBtlControllers(); + InitBattleControllers(); gBattleCommunication[MULTIUSE_STATE]++; gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0; @@ -2184,8 +2184,9 @@ static void SpriteCB_PlayerThrowUpdate(struct Sprite *sprite) sprite->callback = SpriteCB_Idle; } -void BattleDummy(void) +void BeginBattleIntroDummy(void) { + } void BeginBattleIntro(void) diff --git a/src/cable_club.c b/src/cable_club.c index e4238bb40..54c80b55d 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -532,7 +532,7 @@ static void Task_ReestablishLinkInCableClubRoom_0(u8 taskId) { OpenLink(); ResetLinkPlayers(); - CreateTask(Task_WaitForReceivedRemoteLinkPlayers5SecondTimeout, 80); + CreateTask(Task_WaitForLinkPlayerConnection, 80); } else if (data[0] > 9) gTasks[taskId].func = Task_ReestablishLinkInCableClubRoom_1; @@ -934,20 +934,26 @@ bool32 GetSeeingLinkPlayerCardMsg(u8 who) return TRUE; } -void Task_WaitForReceivedRemoteLinkPlayers5SecondTimeout(u8 taskId) +#define tTimer data[0] + +void Task_WaitForLinkPlayerConnection(u8 taskId) { struct Task *task = &gTasks[taskId]; - task->data[0]++; - if (task->data[0] > 300) + + task->tTimer++; + if (task->tTimer > 300) { CloseLink(); SetMainCallback2(CB2_LinkError); DestroyTask(taskId); } + if (gReceivedRemoteLinkPlayers) DestroyTask(taskId); } +#undef tTimer + static void sub_8081AE4(u8 taskId) { if (!gReceivedRemoteLinkPlayers) diff --git a/src/link.c b/src/link.c index b5167198e..1068a3d85 100644 --- a/src/link.c +++ b/src/link.c @@ -982,7 +982,7 @@ u8 GetMultiplayerId(void) return SIO_MULTI_CNT->id; } -u8 bitmask_all_link_players_but_self(void) +u8 BitmaskAllOtherLinkPlayers(void) { u8 mpId; diff --git a/src/trade.c b/src/trade.c index 392a23061..3828711ef 100644 --- a/src/trade.c +++ b/src/trade.c @@ -767,7 +767,7 @@ static void CB2_ReturnFromLinkTrade2(void) gMain.state++; } if (gWirelessCommType == 0) - CreateTask(Task_WaitForReceivedRemoteLinkPlayers5SecondTimeout, 1); + CreateTask(Task_WaitForLinkPlayerConnection, 1); } else { @@ -1692,7 +1692,7 @@ static void CommunicatePlayerSelectedMonForTrade(void) { sTradeMenuResourcesPtr->linkData[0] = 0xAABB; sTradeMenuResourcesPtr->linkData[1] = sTradeMenuResourcesPtr->tradeMenuCursorPosition; - SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); } else { @@ -1751,7 +1751,7 @@ static void TradeMenuCB_0(void) { for (i = 0; i < 10; i++) sTradeMenuResourcesPtr->linkData[i] = i; - SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); } } @@ -1864,7 +1864,7 @@ static void CommunicateWhetherMonCanBeTraded(void) sTradeMenuResourcesPtr->linkData[0] = 0xBBBB; if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); } break; case 2: @@ -1890,7 +1890,7 @@ static void TradeMenuCB_3(void) if (IsLinkTaskFinished()) { sTradeMenuResourcesPtr->linkData[0] = 0xBBCC; - SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); } sTradeMenuResourcesPtr->tradeMenuCBnum = 100; PutWindowTilemap(17); @@ -2410,7 +2410,7 @@ static void RunScheduledLinkTasks(void) switch (sTradeMenuResourcesPtr->cron[i].kind) { case 0: - SendBlock(bitmask_all_link_players_but_self(), sTradeMenuResourcesPtr->linkData, 20); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeMenuResourcesPtr->linkData, 20); break; case 1: PrintTradeErrorOrStatusMessage(TRADESTATMSG_COMMSTANDBY); diff --git a/src/trade_scene.c b/src/trade_scene.c index c3b36db16..29fd00c2f 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -1093,7 +1093,7 @@ static void HandleLinkDataSend(void) case 1: if (IsLinkTaskFinished()) { - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, 20); sTradeData->scheduleLinkTransfer++; } case 2: @@ -2526,7 +2526,7 @@ static void CB2_WaitAndAckTradeComplete(void) if (mpId == 0 && sTradeData->tradeStatus1 == 1 && sTradeData->tradeStatus2 == 1) { sTradeData->linkData[0] = 0xDCBA; - SendBlock(bitmask_all_link_players_but_self(), sTradeData->linkData, 20); + SendBlock(BitmaskAllOtherLinkPlayers(), sTradeData->linkData, 20); sTradeData->tradeStatus1 = 2; sTradeData->tradeStatus2 = 2; }