summaryrefslogtreecommitdiff
path: root/src/recorded_battle.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/recorded_battle.c')
-rw-r--r--src/recorded_battle.c148
1 files changed, 76 insertions, 72 deletions
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index 5a0579f70..e29792766 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -55,7 +55,7 @@ struct RecordedBattleSave
u16 opponentA;
u16 opponentB;
u16 partnerId;
- u16 field_4FA;
+ u16 multiplayerId;
u8 lvlMode;
u8 frontierFacility;
u8 frontierBrainSymbol;
@@ -75,16 +75,16 @@ struct RecordedBattleSave
EWRAM_DATA u32 gRecordedBattleRngSeed = 0;
EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0;
EWRAM_DATA static u8 sBattleRecords[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE] = {0};
-EWRAM_DATA static u16 sRecordedBytesNo[MAX_BATTLERS_COUNT] = {0};
-EWRAM_DATA static u16 sUnknown_0203C79C[4] = {0};
-EWRAM_DATA static u16 sUnknown_0203C7A4[4] = {0};
-EWRAM_DATA static u8 sUnknown_0203C7AC = 0;
+EWRAM_DATA static u16 sBattlerRecordSizes[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA static u16 sBattlerPrevRecordSizes[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA static u16 sBattlerSavedRecordSizes[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA static u8 sRecordMode = 0;
EWRAM_DATA static u8 sLvlMode = 0;
EWRAM_DATA static u8 sFrontierFacility = 0;
EWRAM_DATA static u8 sFrontierBrainSymbol = 0;
EWRAM_DATA static MainCallback sCallback2_AfterRecordedBattle = NULL;
-EWRAM_DATA u8 gUnknown_0203C7B4 = 0;
-EWRAM_DATA static u8 sUnknown_0203C7B5 = 0;
+EWRAM_DATA u8 gRecordedBattleMultiplayerId = 0;
+EWRAM_DATA static u8 sFrontierPassFlag = 0;
EWRAM_DATA static u8 sBattleScene = 0;
EWRAM_DATA static u8 sTextSpeed = 0;
EWRAM_DATA static u32 sBattleFlags = 0;
@@ -93,7 +93,7 @@ EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0};
EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0};
EWRAM_DATA static u16 sPlayerMonMoves[2][MAX_MON_MOVES] = {0};
EWRAM_DATA static struct PlayerInfo sPlayers[MAX_BATTLERS_COUNT] = {0};
-EWRAM_DATA static u8 sUnknown_0203CCD0 = 0;
+EWRAM_DATA static bool8 sUnknown_0203CCD0 = 0;
EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0};
EWRAM_DATA static u8 sRecordMixFriendClass = 0;
EWRAM_DATA static u8 sApprenticeId = 0;
@@ -103,26 +103,25 @@ EWRAM_DATA static u8 sBattleOutcome = 0;
static u8 sRecordMixFriendLanguage;
static u8 sApprenticeLanguage;
-// this file's functions
-static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2);
-static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst);
+static u8 GetNextRecordedDataByte(u8 *, u8 *, u8 *);
+static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *);
static void RecordedBattle_RestoreSavedParties(void);
static void CB2_RecordedBattle(void);
-void sub_8184DA4(u8 arg0)
+void RecordedBattle_Init(u8 mode)
{
s32 i, j;
- sUnknown_0203C7AC = arg0;
- sUnknown_0203CCD0 = 0;
+ sRecordMode = mode;
+ sUnknown_0203CCD0 = FALSE;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- sRecordedBytesNo[i] = 0;
- sUnknown_0203C79C[i] = 0;
- sUnknown_0203C7A4[i] = 0;
+ sBattlerRecordSizes[i] = 0;
+ sBattlerPrevRecordSizes[i] = 0;
+ sBattlerSavedRecordSizes[i] = 0;
- if (arg0 == 1)
+ if (mode == B_RECORD_MODE_RECORDING)
{
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
{
@@ -138,13 +137,13 @@ void sub_8184E58(void)
{
s32 i, j;
- if (sUnknown_0203C7AC == 1)
+ if (sRecordMode == B_RECORD_MODE_RECORDING)
{
gRecordedBattleRngSeed = gRngValue;
sFrontierFacility = VarGet(VAR_FRONTIER_FACILITY);
sFrontierBrainSymbol = GetFronterBrainSymbol();
}
- else if (sUnknown_0203C7AC == 2)
+ else if (sRecordMode == B_RECORD_MODE_PLAYBACK)
{
gRngValue = gRecordedBattleRngSeed;
}
@@ -154,7 +153,7 @@ void sub_8184E58(void)
u8 linkPlayersCount;
u8 text[30];
- gUnknown_0203C7B4 = GetMultiplayerId();
+ gRecordedBattleMultiplayerId = GetMultiplayerId();
linkPlayersCount = GetLinkPlayerCount();
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
@@ -195,9 +194,9 @@ void sub_8184E58(void)
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action)
{
- if (sRecordedBytesNo[battlerId] < BATTLER_RECORD_SIZE && sUnknown_0203C7AC != 2)
+ if (sBattlerRecordSizes[battlerId] < BATTLER_RECORD_SIZE && sRecordMode != B_RECORD_MODE_PLAYBACK)
{
- sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++] = action;
+ sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]++] = action;
}
}
@@ -207,9 +206,9 @@ void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
for (i = 0; i < bytesToClear; i++)
{
- sRecordedBytesNo[battlerId]--;
- sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] = 0xFF;
- if (sRecordedBytesNo[battlerId] == 0)
+ sBattlerRecordSizes[battlerId]--;
+ sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] = 0xFF;
+ if (sBattlerRecordSizes[battlerId] == 0)
break;
}
}
@@ -217,54 +216,55 @@ void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
u8 RecordedBattle_GetBattlerAction(u8 battlerId)
{
// Trying to read past array or invalid action byte, battle is over.
- if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF)
+ if (sBattlerRecordSizes[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] == 0xFF)
{
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
ResetPaletteFadeControl();
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
SetMainCallback2(CB2_QuitRecordedBattle);
return 0xFF;
}
else
{
- return sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++];
+ return sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]++];
}
}
-u8 sub_81850D0(void)
+// Unused
+static u8 GetRecordedBattleMode(void)
{
- return sUnknown_0203C7AC;
+ return sRecordMode;
}
-u8 sub_81850DC(u8 *arg0)
+u8 RecordedBattle_BufferNewBattlerData(u8 *dst)
{
u8 i, j;
- u8 ret = 0;
+ u8 idx = 0;
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
- if (sRecordedBytesNo[i] != sUnknown_0203C79C[i])
+ if (sBattlerRecordSizes[i] != sBattlerPrevRecordSizes[i])
{
- arg0[ret++] = i;
- arg0[ret++] = sRecordedBytesNo[i] - sUnknown_0203C79C[i];
+ dst[idx++] = i;
+ dst[idx++] = sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i];
- for (j = 0; j < sRecordedBytesNo[i] - sUnknown_0203C79C[i]; j++)
+ for (j = 0; j < sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i]; j++)
{
- arg0[ret++] = sBattleRecords[i][sUnknown_0203C79C[i] + j];
+ dst[idx++] = sBattleRecords[i][sBattlerPrevRecordSizes[i] + j];
}
- sUnknown_0203C79C[i] = sRecordedBytesNo[i];
+ sBattlerPrevRecordSizes[i] = sBattlerRecordSizes[i];
}
}
- return ret;
+ return idx;
}
-void sub_81851A8(u8 *arg0)
+void RecordedBattle_RecordAllBattlerData(u8 *src)
{
s32 i;
- u8 var1 = 2;
- u8 var2;
+ u8 idx = 2;
+ u8 size;
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
return;
@@ -277,23 +277,23 @@ void sub_81851A8(u8 *arg0)
if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER))
{
- for (var2 = *arg0; var2 != 0;)
+ for (size = *src; size != 0;)
{
- u8 unkVar = sub_8185278(arg0, &var1, &var2);
- u8 unkVar2 = sub_8185278(arg0, &var1, &var2);
+ u8 battlerId = GetNextRecordedDataByte(src, &idx, &size);
+ u8 numActions = GetNextRecordedDataByte(src, &idx, &size);
- for (i = 0; i < unkVar2; i++)
+ for (i = 0; i < numActions; i++)
{
- sBattleRecords[unkVar][sUnknown_0203C7A4[unkVar]++] = sub_8185278(arg0, &var1, &var2);
+ sBattleRecords[battlerId][sBattlerSavedRecordSizes[battlerId]++] = GetNextRecordedDataByte(src, &idx, &size);
}
}
}
}
-static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2)
+static u8 GetNextRecordedDataByte(u8 *data, u8 *idx, u8 *size)
{
- (*arg2)--;
- return arg0[(*arg1)++];
+ (*size)--;
+ return data[(*idx)++];
}
bool32 CanCopyRecordedBattleSaveData(void)
@@ -362,11 +362,14 @@ bool32 MoveRecordedBattleToSaveData(void)
if (sBattleFlags & BATTLE_TYPE_LINK)
{
- battleSave->battleFlags = (sBattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20)) | BATTLE_TYPE_x2000000;
+ battleSave->battleFlags = (sBattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_LINK_IN_BATTLE)) | BATTLE_TYPE_RECORDED_LINK;
+ // BATTLE_TYPE_RECORDED_IS_MASTER set indicates battle will play
+ // out from player's perspective (i.e. player with back to camera)
+ // Otherwise player will appear on "opponent" side
if (sBattleFlags & BATTLE_TYPE_IS_MASTER)
{
- battleSave->battleFlags |= BATTLE_TYPE_x80000000;
+ battleSave->battleFlags |= BATTLE_TYPE_RECORDED_IS_MASTER;
}
else if (sBattleFlags & BATTLE_TYPE_MULTI)
{
@@ -374,13 +377,13 @@ bool32 MoveRecordedBattleToSaveData(void)
{
case 0:
case 2:
- if (!(sPlayers[gUnknown_0203C7B4].battlerId & 1))
- battleSave->battleFlags |= BATTLE_TYPE_x80000000;
+ if (!(sPlayers[gRecordedBattleMultiplayerId].battlerId & 1))
+ battleSave->battleFlags |= BATTLE_TYPE_RECORDED_IS_MASTER;
break;
case 1:
case 3:
- if ((sPlayers[gUnknown_0203C7B4].battlerId & 1))
- battleSave->battleFlags |= BATTLE_TYPE_x80000000;
+ if ((sPlayers[gRecordedBattleMultiplayerId].battlerId & 1))
+ battleSave->battleFlags |= BATTLE_TYPE_RECORDED_IS_MASTER;
break;
}
}
@@ -393,7 +396,7 @@ bool32 MoveRecordedBattleToSaveData(void)
battleSave->opponentA = gTrainerBattleOpponent_A;
battleSave->opponentB = gTrainerBattleOpponent_B;
battleSave->partnerId = gPartnerTrainerId;
- battleSave->field_4FA = gUnknown_0203C7B4;
+ battleSave->multiplayerId = gRecordedBattleMultiplayerId;
battleSave->lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
battleSave->frontierFacility = sFrontierFacility;
battleSave->frontierBrainSymbol = sFrontierBrainSymbol;
@@ -573,7 +576,7 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src)
gTrainerBattleOpponent_A = src->opponentA;
gTrainerBattleOpponent_B = src->opponentB;
gPartnerTrainerId = src->partnerId;
- gUnknown_0203C7B4 = src->field_4FA;
+ gRecordedBattleMultiplayerId = src->multiplayerId;
sLvlMode = gSaveBlock2Ptr->frontier.lvlMode;
sFrontierFacility = src->frontierFacility;
sFrontierBrainSymbol = src->frontierBrainSymbol;
@@ -684,19 +687,20 @@ u8 GetActiveBattlerLinkPlayerGender(void)
return 0;
}
-void sub_8185F84(void)
+void RecordedBattle_ClearFrontierPassFlag(void)
{
- sUnknown_0203C7B5 = 0;
+ sFrontierPassFlag = 0;
}
-void sub_8185F90(u16 arg0)
+// Set sFrontierPassFlag to received state of FLAG_SYS_FRONTIER_PASS
+void RecordedBattle_SetFrontierPassFlagFromHword(u16 arg0)
{
- sUnknown_0203C7B5 |= (arg0 & 0x8000) >> 0xF;
+ sFrontierPassFlag |= (arg0 & 0x8000) >> 15;
}
-u8 sub_8185FAC(void)
+u8 RecordedBattle_GetFrontierPassFlag(void)
{
- return sUnknown_0203C7B5;
+ return sFrontierPassFlag;
}
u8 GetBattleSceneInRecordedBattle(void)
@@ -715,9 +719,9 @@ void RecordedBattle_CopyBattlerMoves(void)
if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
return;
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
return;
- if (sUnknown_0203C7AC == 2)
+ if (sRecordMode == B_RECORD_MODE_PLAYBACK)
return;
for (i = 0; i < MAX_MON_MOVES; i++)
@@ -732,7 +736,7 @@ void sub_818603C(u8 arg0)
{
s32 battlerId, j, k;
- if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_RECORDED_LINK))
return;
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
@@ -764,7 +768,7 @@ void sub_818603C(u8 arg0)
}
else
{
- if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE)
+ if (sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]] == ACTION_MOVE_CHANGE)
{
u8 ppBonuses[MAX_MON_MOVES];
u8 array1[MAX_MON_MOVES];
@@ -838,15 +842,15 @@ u32 GetAiScriptsInRecordedBattle(void)
void sub_8186444(void)
{
- sUnknown_0203CCD0 = 1;
+ sUnknown_0203CCD0 = TRUE;
}
bool8 sub_8186450(void)
{
- return (sUnknown_0203CCD0 == 0);
+ return (sUnknown_0203CCD0 == FALSE);
}
-void sub_8186468(u8 *dst)
+void GetRecordedBattleRecordMixFriendName(u8 *dst)
{
s32 i;