diff options
Diffstat (limited to 'src/recorded_battle.c')
-rw-r--r-- | src/recorded_battle.c | 148 |
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; |