Untangle InitBtlControllers functions (#6748)
This commit is contained in:
parent
b094b70dc5
commit
cf7f15faac
@ -1,6 +1,8 @@
|
||||
#ifndef GUARD_BATTLE_CONTROLLERS_H
|
||||
#define GUARD_BATTLE_CONTROLLERS_H
|
||||
|
||||
typedef void (*BattleControllerFunc)(u32 battler);
|
||||
|
||||
enum {
|
||||
REQUEST_ALL_BATTLE,
|
||||
REQUEST_SPECIES_BATTLE,
|
||||
|
||||
@ -36,8 +36,7 @@ COMMON_DATA u8 gBattleControllerData[MAX_BATTLERS_COUNT] = {0}; // Used by the b
|
||||
COMMON_DATA void (*gBattlerControllerEndFuncs[MAX_BATTLERS_COUNT])(u32 battler) = {0}; // Controller's buffer complete function for each battler
|
||||
|
||||
static void CreateTasksForSendRecvLinkBuffers(void);
|
||||
static void InitLinkBtlControllers(void);
|
||||
static void InitSinglePlayerBtlControllers(void);
|
||||
static void InitBtlControllersInternal(void);
|
||||
static void SetBattlePartyIds(void);
|
||||
static void Task_HandleSendLinkBuffersData(u8 taskId);
|
||||
static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId);
|
||||
@ -102,10 +101,7 @@ void InitBattleControllers(void)
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
|
||||
RecordedBattle_SaveParties();
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
InitLinkBtlControllers();
|
||||
else
|
||||
InitSinglePlayerBtlControllers();
|
||||
InitBtlControllersInternal();
|
||||
|
||||
SetBattlePartyIds();
|
||||
|
||||
@ -122,492 +118,188 @@ void InitBattleControllers(void)
|
||||
*((u8 *)(&gBattleStruct->tv) + i) = 0;
|
||||
}
|
||||
|
||||
static void InitSinglePlayerBtlControllers(void)
|
||||
static void InitBtlControllersInternal(void)
|
||||
{
|
||||
s32 i;
|
||||
bool32 isLink = (gBattleTypeFlags & BATTLE_TYPE_LINK);
|
||||
bool32 isDouble = IsDoubleBattle();
|
||||
bool32 isMaster = (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER);
|
||||
bool32 isRecorded = (gBattleTypeFlags & BATTLE_TYPE_RECORDED);
|
||||
bool32 isRecordedMaster = (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER);
|
||||
bool32 isRecordedLink = (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK);
|
||||
bool32 isMulti = (gBattleTypeFlags & BATTLE_TYPE_MULTI);
|
||||
bool32 isInGamePartner = (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER);
|
||||
bool32 isAIvsAI = IsAiVsAiBattle();
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
|
||||
{
|
||||
if (!isLink || isMaster)
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
|
||||
BufferBattlePartyCurrentOrderBySide(0, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(1, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(2, 1);
|
||||
BufferBattlePartyCurrentOrderBySide(3, 1);
|
||||
|
||||
gBattlerPartyIndexes[0] = 0;
|
||||
gBattlerPartyIndexes[1] = 0;
|
||||
if (BATTLE_TWO_VS_ONE_OPPONENT || WILD_DOUBLE_BATTLE)
|
||||
{
|
||||
gBattlerPartyIndexes[2] = 3;
|
||||
gBattlerPartyIndexes[3] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerPartyIndexes[2] = 3;
|
||||
gBattlerPartyIndexes[3] = 3;
|
||||
}
|
||||
}
|
||||
else if (!IsDoubleBattle())
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToSafari;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToWally;
|
||||
else if (IsAiVsAiBattle())
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
if (!isDouble)
|
||||
gBattlersCount = 2;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_IS_MASTER)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
}
|
||||
else // see how the banks are switched
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
if (IsAiVsAiBattle())
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
if (IsAiVsAiBattle())
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
|
||||
if ((gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
|
||||
|| !isMulti
|
||||
|| (!isLink && !isRecorded)
|
||||
|| (isLink && !isDouble))
|
||||
{
|
||||
bool32 isPlayerPrimary;
|
||||
if (isLink)
|
||||
isPlayerPrimary = (isMaster || (isDouble && isMulti));
|
||||
else if (!isRecorded)
|
||||
isPlayerPrimary = TRUE;
|
||||
else if (isDouble)
|
||||
isPlayerPrimary = (isInGamePartner || isMulti || isMaster);
|
||||
else
|
||||
isPlayerPrimary = (!isRecordedLink || isRecordedMaster);
|
||||
|
||||
if (isPlayerPrimary)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT;
|
||||
}
|
||||
|
||||
if (isLink)
|
||||
{
|
||||
if (isDouble && isMulti && !isMaster)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_0]] = SetControllerToLinkPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_0]] = SetControllerToPlayer;
|
||||
|
||||
if (!isDouble || !isMulti || !isMaster)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
|
||||
BufferBattlePartyCurrentOrderBySide(0, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(1, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(2, 1);
|
||||
BufferBattlePartyCurrentOrderBySide(3, 1);
|
||||
|
||||
gBattlerPartyIndexes[0] = 0;
|
||||
gBattlerPartyIndexes[1] = 0;
|
||||
gBattlerPartyIndexes[2] = 3;
|
||||
gBattlerPartyIndexes[3] = 3;
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||
{
|
||||
u8 multiplayerId;
|
||||
|
||||
for (multiplayerId = gRecordedBattleMultiplayerId, i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
switch (gLinkPlayers[i].id)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == multiplayerId)
|
||||
{
|
||||
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedPlayer;
|
||||
switch (gLinkPlayers[i].id)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1))
|
||||
|| ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
|
||||
{
|
||||
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedPlayer;
|
||||
switch (gLinkPlayers[i].id)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToRecordedOpponent;
|
||||
switch (gLinkPlayers[i].id)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_1]] = SetControllerToLinkOpponent;
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_2]] = SetControllerToPlayer;
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_3]] = SetControllerToLinkOpponent;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToRecordedPlayer;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED_LINK)
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToRecordedOpponent;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
}
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_1]] = SetControllerToOpponent;
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_2]] = SetControllerToLinkPartner;
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_3]] = SetControllerToOpponent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void InitLinkBtlControllers(void)
|
||||
{
|
||||
s32 i;
|
||||
u8 multiplayerId;
|
||||
|
||||
if (!IsDoubleBattle())
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlersCount = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
// Player 1
|
||||
if (isRecorded)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_0]] = SetControllerToRecordedPlayer;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_0]] = SetControllerToSafari;
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_0]] = SetControllerToWally;
|
||||
else if (isAIvsAI)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_0]] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_0]] = SetControllerToPlayer;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
// Opponent 1
|
||||
bool32 isOpponent1Recorded;
|
||||
if (isDouble)
|
||||
isOpponent1Recorded = (!isInGamePartner && isRecorded && !isMulti && isRecordedLink);
|
||||
else
|
||||
isOpponent1Recorded = isRecorded && isRecordedLink;
|
||||
|
||||
gBattlersCount = 2;
|
||||
if (isOpponent1Recorded)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_1]] = SetControllerToRecordedOpponent;
|
||||
else
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_1]] = SetControllerToOpponent;
|
||||
|
||||
// Player 2
|
||||
if (isInGamePartner)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_2]] = SetControllerToPlayerPartner;
|
||||
else if (isRecorded)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_2]] = SetControllerToRecordedPlayer;
|
||||
else if (isAIvsAI)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_2]] = SetControllerToPlayerPartner;
|
||||
else
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_2]] = SetControllerToPlayer;
|
||||
|
||||
// Opponent 2
|
||||
if (isInGamePartner || !isRecorded || isMulti || !isRecordedLink)
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_3]] = SetControllerToOpponent;
|
||||
else
|
||||
gBattlerControllerFuncs[gBattlerPositions[B_BATTLER_3]] = SetControllerToRecordedOpponent;
|
||||
}
|
||||
}
|
||||
else if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && IsDoubleBattle())
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
bool32 bufferPartyOrders;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
if (!isLink)
|
||||
bufferPartyOrders = (isInGamePartner || (isRecorded && isMulti));
|
||||
else
|
||||
bufferPartyOrders = (isDouble && isMulti);
|
||||
|
||||
if (bufferPartyOrders)
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_PLAYER_LEFT;
|
||||
BufferBattlePartyCurrentOrderBySide(0, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(1, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(2, 1);
|
||||
BufferBattlePartyCurrentOrderBySide(3, 1);
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
gBattlerPartyIndexes[0] = 0;
|
||||
gBattlerPartyIndexes[1] = 0;
|
||||
gBattlerPartyIndexes[2] = 3;
|
||||
if (!isLink && isInGamePartner && (BATTLE_TWO_VS_ONE_OPPONENT || WILD_DOUBLE_BATTLE))
|
||||
gBattlerPartyIndexes[3] = 1;
|
||||
else
|
||||
gBattlerPartyIndexes[3] = 3;
|
||||
}
|
||||
}
|
||||
else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
|
||||
{
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToLinkPartner;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[B_BATTLER_0] = SetControllerToLinkPartner;
|
||||
gBattlerPositions[B_BATTLER_0] = B_POSITION_PLAYER_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_1] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_1] = B_POSITION_OPPONENT_LEFT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_2] = SetControllerToPlayer;
|
||||
gBattlerPositions[B_BATTLER_2] = B_POSITION_PLAYER_RIGHT;
|
||||
|
||||
gBattlerControllerFuncs[B_BATTLER_3] = SetControllerToLinkOpponent;
|
||||
gBattlerPositions[B_BATTLER_3] = B_POSITION_OPPONENT_RIGHT;
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
|
||||
BufferBattlePartyCurrentOrderBySide(0, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(1, 0);
|
||||
BufferBattlePartyCurrentOrderBySide(2, 1);
|
||||
BufferBattlePartyCurrentOrderBySide(3, 1);
|
||||
gBattlerPartyIndexes[0] = 0;
|
||||
gBattlerPartyIndexes[1] = 0;
|
||||
gBattlerPartyIndexes[2] = 3;
|
||||
gBattlerPartyIndexes[3] = 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
multiplayerId = GetMultiplayerId();
|
||||
u8 multiplayerId = isLink ? GetMultiplayerId() : gRecordedBattleMultiplayerId;
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)
|
||||
gBattleMainFunc = BeginBattleIntro;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
u32 linkPositionLeft, linkPositionRight;
|
||||
BattleControllerFunc linkBtlControllerFunc;
|
||||
|
||||
if (i == multiplayerId)
|
||||
{
|
||||
linkPositionLeft = B_POSITION_PLAYER_LEFT;
|
||||
linkPositionRight = B_POSITION_PLAYER_RIGHT;
|
||||
linkBtlControllerFunc = isLink ? SetControllerToPlayer : SetControllerToRecordedPlayer;
|
||||
}
|
||||
else if ((!(gLinkPlayers[i].id & 1) && !(gLinkPlayers[multiplayerId].id & 1))
|
||||
|| ((gLinkPlayers[i].id & 1) && (gLinkPlayers[multiplayerId].id & 1)))
|
||||
{
|
||||
linkPositionLeft = B_POSITION_PLAYER_LEFT;
|
||||
linkPositionRight = B_POSITION_PLAYER_RIGHT;
|
||||
linkBtlControllerFunc = isLink ? SetControllerToLinkPartner : SetControllerToRecordedPlayer;
|
||||
}
|
||||
else
|
||||
{
|
||||
linkPositionLeft = B_POSITION_OPPONENT_LEFT;
|
||||
linkPositionRight = B_POSITION_OPPONENT_RIGHT;
|
||||
linkBtlControllerFunc = isLink ? SetControllerToLinkOpponent : SetControllerToRecordedOpponent;
|
||||
}
|
||||
gBattlerControllerFuncs[gLinkPlayers[i].id] = linkBtlControllerFunc;
|
||||
switch (gLinkPlayers[i].id)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 0);
|
||||
gBattlerPositions[gLinkPlayers[i].id] = linkPositionLeft;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
BufferBattlePartyCurrentOrderBySide(gLinkPlayers[i].id, 1);
|
||||
gBattlerPositions[gLinkPlayers[i].id] = linkPositionRight;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == multiplayerId)
|
||||
{
|
||||
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToPlayer;
|
||||
switch (gLinkPlayers[i].id)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
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)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_LEFT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_PLAYER_RIGHT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattlerControllerFuncs[gLinkPlayers[i].id] = SetControllerToLinkOpponent;
|
||||
switch (gLinkPlayers[i].id)
|
||||
{
|
||||
case 0:
|
||||
case 3:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_LEFT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 0;
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
gBattlerPositions[gLinkPlayers[i].id] = B_POSITION_OPPONENT_RIGHT;
|
||||
gBattlerPartyIndexes[gLinkPlayers[i].id] = 3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gBattlersCount = MAX_BATTLERS_COUNT;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user