Battle controller pret documentation (#7029)
This commit is contained in:
parent
46e09a9e46
commit
d33651bfd0
@ -72,41 +72,63 @@ enum {
|
||||
// (e.g. MarkBattlerForControllerExec) instead of using these macros
|
||||
// directly.
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler) \
|
||||
gBattleControllerExecFlags |= (1u << battler)
|
||||
static inline void MarkBattleControllerActiveOnLocal(u32 battler)
|
||||
{
|
||||
gBattleControllerExecFlags |= (1u << battler);
|
||||
}
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_IDLE_ON_LOCAL(battler) \
|
||||
gBattleControllerExecFlags &= ~(1u << battler)
|
||||
static inline void MarkBattleControllerIdleOnLocal(u32 battler)
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
}
|
||||
|
||||
#define IS_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler) \
|
||||
(gBattleControllerExecFlags & (1u << battler))
|
||||
static inline bool32 IsBattleControllerActiveOnLocal(u32 battler)
|
||||
{
|
||||
return gBattleControllerExecFlags & (1u << battler);
|
||||
}
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_MESSAGE_OUTBOUND_OVER_LINK(battler) \
|
||||
gBattleControllerExecFlags |= ((1u << battler) << (32 - MAX_BATTLERS_COUNT))
|
||||
static inline void MarkBattleControllerMessageOutboundOverLink(u32 battler)
|
||||
{
|
||||
gBattleControllerExecFlags |= ((1u << battler) << (32 - MAX_BATTLERS_COUNT));
|
||||
}
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_MESSAGE_SYNCHRONIZED_OVER_LINK(battler) \
|
||||
gBattleControllerExecFlags &= ~((1 << 28) << (battler))
|
||||
static inline void MarkBattleControllerMessageSynchronizedOverLink(u32 battler)
|
||||
{
|
||||
gBattleControllerExecFlags &= ~((1 << 28) << (battler));
|
||||
}
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
|
||||
gBattleControllerExecFlags |= ((1u << battler) << ((playerId) << 2))
|
||||
static inline bool32 IsBattleControllerMessageSynchronizedOverLink(u32 battler)
|
||||
{
|
||||
return gBattleControllerExecFlags & (1u << (battler + 28));
|
||||
}
|
||||
|
||||
#define MARK_BATTLE_CONTROLLER_IDLE_FOR_PLAYER(battler, playerId) \
|
||||
gBattleControllerExecFlags &= ~((1u << battler) << ((playerId) * 4))
|
||||
static inline void MarkBattleControllerActiveForPlayer(u32 battler, u32 playerId)
|
||||
{
|
||||
gBattleControllerExecFlags |= ((1u << battler) << ((playerId) << 2));
|
||||
}
|
||||
|
||||
#define IS_BATTLE_CONTROLLER_ACTIVE_FOR_PLAYER(battler, playerId) \
|
||||
(gBattleControllerExecFlags & ((1u << battler) << ((playerId) * 4)))
|
||||
static inline void MarkBattleControllerIdleForPlayer(u32 battler, u32 playerId)
|
||||
{
|
||||
gBattleControllerExecFlags &= ~((1u << battler) << ((playerId) * 4));
|
||||
}
|
||||
|
||||
static inline bool32 IsBattleControllerActiveForPlayer(u32 battler, u32 playerId)
|
||||
{
|
||||
return gBattleControllerExecFlags & ((1u << battler) << ((playerId) * 4));
|
||||
}
|
||||
|
||||
// This actually checks if a specific controller is active on any player or if
|
||||
// *any* controller is pending sync over link communications, but the macro name
|
||||
// can only be so specific before it just gets ridiculous.
|
||||
#define IS_BATTLE_CONTROLLER_ACTIVE_OR_PENDING_SYNC_ANYWHERE(battler) \
|
||||
(gBattleControllerExecFlags & ( \
|
||||
(1u << battler) \
|
||||
| (0xF << 28) \
|
||||
| (1u << battler << 4) \
|
||||
| (1u << battler << 8) \
|
||||
| (1u << battler << 12) \
|
||||
))
|
||||
static inline bool32 IsBattleControllerActiveOrPendingSyncAnywhere(u32 battler)
|
||||
{
|
||||
return gBattleControllerExecFlags & (
|
||||
(1u << battler)
|
||||
| (0xF << 28)
|
||||
| (1u << battler << 4)
|
||||
| (1u << battler << 8)
|
||||
| (1u << battler << 12));
|
||||
}
|
||||
|
||||
// Special arguments for Battle Controller functions.
|
||||
|
||||
|
||||
@ -114,7 +114,7 @@ void SetControllerToLinkOpponent(u32 battler)
|
||||
|
||||
static void LinkOpponentBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkOpponentBufferCommands))
|
||||
sLinkOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -320,7 +320,7 @@ static void LinkOpponentBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -113,7 +113,7 @@ void SetControllerToLinkPartner(u32 battler)
|
||||
|
||||
static void LinkPartnerBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sLinkPartnerBufferCommands))
|
||||
sLinkPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -164,7 +164,7 @@ static void LinkPartnerBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -127,7 +127,7 @@ void SetControllerToOpponent(u32 battler)
|
||||
|
||||
static void OpponentBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sOpponentBufferCommands))
|
||||
sOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -364,7 +364,7 @@ static void OpponentBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -182,13 +182,13 @@ static void PlayerBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
static void PlayerBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerBufferCommands))
|
||||
sPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
|
||||
@ -117,7 +117,7 @@ void SetControllerToPlayerPartner(u32 battler)
|
||||
|
||||
static void PlayerPartnerBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sPlayerPartnerBufferCommands))
|
||||
sPlayerPartnerBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -236,7 +236,7 @@ static void PlayerPartnerBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -120,7 +120,7 @@ void SetControllerToRecordedOpponent(u32 battler)
|
||||
|
||||
static void RecordedOpponentBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedOpponentBufferCommands))
|
||||
sRecordedOpponentBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -141,7 +141,7 @@ static void RecordedOpponentBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -117,7 +117,7 @@ void SetControllerToRecordedPlayer(u32 battler)
|
||||
|
||||
static void RecordedPlayerBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sRecordedPlayerBufferCommands))
|
||||
sRecordedPlayerBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -313,7 +313,7 @@ static void RecordedPlayerBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ void SetControllerToSafari(u32 battler)
|
||||
|
||||
static void SafariBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sSafariBufferCommands))
|
||||
sSafariBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -237,7 +237,7 @@ static void SafariBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -125,7 +125,7 @@ void SetControllerToWally(u32 battler)
|
||||
|
||||
static void WallyBufferRunCommand(u32 battler)
|
||||
{
|
||||
if (gBattleControllerExecFlags & (1u << battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
{
|
||||
if (gBattleResources->bufferA[battler][0] < ARRAY_COUNT(sWallyBufferCommands))
|
||||
sWallyBufferCommands[gBattleResources->bufferA[battler][0]](battler);
|
||||
@ -284,7 +284,7 @@ static void WallyBufferExecCompleted(u32 battler)
|
||||
}
|
||||
else
|
||||
{
|
||||
gBattleControllerExecFlags &= ~(1u << battler);
|
||||
MarkBattleControllerIdleOnLocal(battler);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -956,7 +956,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
|
||||
switch (BYTE_TO_RECEIVE(0))
|
||||
{
|
||||
case B_COMM_TO_CONTROLLER:
|
||||
if (IS_BATTLE_CONTROLLER_ACTIVE_ON_LOCAL(battler))
|
||||
if (IsBattleControllerActiveOnLocal(battler))
|
||||
return;
|
||||
|
||||
memcpy(gBattleResources->bufferA[battler], &BYTE_TO_RECEIVE(LINK_BUFF_DATA), blockSize);
|
||||
@ -975,7 +975,7 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
|
||||
break;
|
||||
case B_COMM_CONTROLLER_IS_DONE:
|
||||
playerId = BYTE_TO_RECEIVE(LINK_BUFF_DATA);
|
||||
MARK_BATTLE_CONTROLLER_IDLE_FOR_PLAYER(battler, playerId);
|
||||
MarkBattleControllerIdleForPlayer(battler, playerId);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@ -4210,7 +4210,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT_ACTION_CHOSEN: // Try to perform an action.
|
||||
if (!(gBattleControllerExecFlags & (((1u << battler)) | (0xF << 28) | ((1u << battler) << 4) | ((1u << battler) << 8) | ((1u << battler) << 12))))
|
||||
if (!IsBattleControllerActiveOrPendingSyncAnywhere(battler))
|
||||
{
|
||||
RecordedBattle_SetBattlerAction(battler, gBattleResources->bufferB[battler][1]);
|
||||
gChosenActionByBattler[battler] = gBattleResources->bufferB[battler][1];
|
||||
@ -4414,7 +4414,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT_ACTION_CASE_CHOSEN:
|
||||
if (!(gBattleControllerExecFlags & (((1u << battler)) | (0xF << 28) | ((1u << battler) << 4) | ((1u << battler) << 8) | ((1u << battler) << 12))))
|
||||
if (!IsBattleControllerActiveOrPendingSyncAnywhere(battler))
|
||||
{
|
||||
switch (gChosenActionByBattler[battler])
|
||||
{
|
||||
@ -4544,11 +4544,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT_ACTION_CONFIRMED_STANDBY:
|
||||
if (!(gBattleControllerExecFlags & ((1u << battler)
|
||||
| (0xF << 28)
|
||||
| (1u << (battler + 4))
|
||||
| (1u << (battler + 8))
|
||||
| (1u << (battler + 12)))))
|
||||
if (!IsBattleControllerActiveOrPendingSyncAnywhere(battler))
|
||||
{
|
||||
if (AllAtActionConfirmed())
|
||||
i = TRUE;
|
||||
@ -4570,7 +4566,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT_ACTION_CONFIRMED:
|
||||
if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12)))))
|
||||
if (!IsBattleControllerActiveOrPendingSyncAnywhere(battler))
|
||||
{
|
||||
gBattleCommunication[ACTIONS_CONFIRMED_COUNT]++;
|
||||
}
|
||||
@ -4584,7 +4580,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
{
|
||||
gBattlerAttacker = battler;
|
||||
gBattlescriptCurrInstr = gSelectionBattleScripts[battler];
|
||||
if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12)))))
|
||||
if (!IsBattleControllerActiveOrPendingSyncAnywhere(battler))
|
||||
{
|
||||
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
|
||||
}
|
||||
@ -4592,7 +4588,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT_SET_BEFORE_ACTION:
|
||||
if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12)))))
|
||||
if (!IsBattleControllerActiveOrPendingSyncAnywhere(battler))
|
||||
{
|
||||
gBattleCommunication[battler] = STATE_BEFORE_ACTION_CHOSEN;
|
||||
}
|
||||
@ -4616,7 +4612,7 @@ static void HandleTurnActionSelectionState(void)
|
||||
{
|
||||
gBattlerAttacker = battler;
|
||||
gBattlescriptCurrInstr = gSelectionBattleScripts[battler];
|
||||
if (!(gBattleControllerExecFlags & ((1u << battler) | (0xF << 28) | (1u << (battler + 4)) | (1u << (battler + 8)) | (1u << (battler + 12)))))
|
||||
if (!IsBattleControllerActiveOrPendingSyncAnywhere(battler))
|
||||
{
|
||||
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
|
||||
}
|
||||
|
||||
@ -988,29 +988,29 @@ static void UNUSED MarkAllBattlersForControllerExec(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
gBattleControllerExecFlags |= 1u << (i + 32 - MAX_BATTLERS_COUNT);
|
||||
MarkBattleControllerMessageOutboundOverLink(i);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < gBattlersCount; i++)
|
||||
gBattleControllerExecFlags |= 1u << i;
|
||||
MarkBattleControllerActiveOnLocal(i);
|
||||
}
|
||||
}
|
||||
|
||||
bool32 IsBattlerMarkedForControllerExec(u32 battler)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
return (gBattleControllerExecFlags & (1u << (battler + 28))) != 0;
|
||||
return IsBattleControllerMessageSynchronizedOverLink(battler);
|
||||
else
|
||||
return (gBattleControllerExecFlags & (1u << battler)) != 0;
|
||||
return IsBattleControllerActiveOnLocal(battler);
|
||||
}
|
||||
|
||||
void MarkBattlerForControllerExec(u32 battler)
|
||||
{
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
gBattleControllerExecFlags |= 1u << (battler + 32 - MAX_BATTLERS_COUNT);
|
||||
MarkBattleControllerMessageOutboundOverLink(battler);
|
||||
else
|
||||
gBattleControllerExecFlags |= 1u << battler;
|
||||
MarkBattleControllerActiveOnLocal(battler);
|
||||
}
|
||||
|
||||
void MarkBattlerReceivedLinkData(u32 battler)
|
||||
@ -1018,9 +1018,9 @@ void MarkBattlerReceivedLinkData(u32 battler)
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < GetLinkPlayerCount(); i++)
|
||||
gBattleControllerExecFlags |= 1u << (battler + (i << 2));
|
||||
MarkBattleControllerActiveForPlayer(battler, i);
|
||||
|
||||
gBattleControllerExecFlags &= ~(1u << (28 + battler));
|
||||
MarkBattleControllerMessageSynchronizedOverLink(battler);
|
||||
}
|
||||
|
||||
const u8 *CheckSkyDropState(u32 battler, enum SkyDropState skyDropState)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user