Sync src/battle_controllers.c

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