diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-02-11 19:22:06 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-02-11 19:22:06 -0500 |
commit | ea347199a21f7a6c01a395e507db872ac1781e79 (patch) | |
tree | 625ec0a6469b40573d165ceee0855e969af45929 /src/recorded_battle.c | |
parent | f39053ee3023b02139784f88d346b3b57853c307 (diff) | |
parent | 14a76793e596d612efd273169c4172922c270f13 (diff) |
Merge branch 'master' into link
Diffstat (limited to 'src/recorded_battle.c')
-rw-r--r-- | src/recorded_battle.c | 150 |
1 files changed, 71 insertions, 79 deletions
diff --git a/src/recorded_battle.c b/src/recorded_battle.c index db8e2816d..4ace5b3e5 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -13,23 +13,15 @@ #include "util.h" #include "task.h" #include "text.h" +#include "battle_setup.h" -#define BANK_RECORD_SIZE 664 +#define BATTLER_RECORD_SIZE 664 #define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \ | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \ | BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \ | BATTLE_TYPE_RECORDED | BATTLE_TYPE_x4000000 | BATTLE_TYPE_SECRET_BASE \ | BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA)) -extern u32 gBattleTypeFlags; -extern u16 gTrainerBattleOpponent_A; -extern u16 gTrainerBattleOpponent_B; -extern u16 gPartnerTrainerId; -extern u8 gActiveBank; -extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[BATTLE_BANKS_COUNT]; -extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT]; -extern u16 gChosenMovesByBanks[BATTLE_BANKS_COUNT]; extern u8 gUnknown_03001278; extern u8 gUnknown_03001279; @@ -38,7 +30,7 @@ struct PlayerInfo u32 trainerId; u8 name[PLAYER_NAME_LENGTH]; u8 gender; - u16 bank; + u16 battlerId; u16 language; }; @@ -52,13 +44,13 @@ struct RecordedBattleSave { struct Pokemon playerParty[PARTY_SIZE]; struct Pokemon opponentParty[PARTY_SIZE]; - u8 playersName[BATTLE_BANKS_COUNT][PLAYER_NAME_LENGTH]; - u8 playersGender[BATTLE_BANKS_COUNT]; - u32 playersTrainerId[BATTLE_BANKS_COUNT]; - u8 playersLanguage[BATTLE_BANKS_COUNT]; + u8 playersName[MAX_BATTLERS_COUNT][PLAYER_NAME_LENGTH]; + u8 playersGender[MAX_BATTLERS_COUNT]; + u32 playersTrainerId[MAX_BATTLERS_COUNT]; + u8 playersLanguage[MAX_BATTLERS_COUNT]; u32 rngSeed; u32 battleFlags; - u8 playersBank[BATTLE_BANKS_COUNT]; + u8 playersBattlers[MAX_BATTLERS_COUNT]; u16 opponentA; u16 opponentB; u16 partnerId; @@ -75,14 +67,14 @@ struct RecordedBattleSave u16 field_50E[6]; u8 field_51A; u8 field_51B; - u8 battleRecord[BATTLE_BANKS_COUNT][BANK_RECORD_SIZE]; + u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u32 checksum; }; EWRAM_DATA u32 gRecordedBattleRngSeed = 0; EWRAM_DATA u32 gBattlePalaceMoveSelectionRngValue = 0; -EWRAM_DATA static u8 sBattleRecords[BATTLE_BANKS_COUNT][BANK_RECORD_SIZE] = {0}; -EWRAM_DATA static u16 sRecordedBytesNo[BATTLE_BANKS_COUNT] = {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; @@ -99,7 +91,7 @@ EWRAM_DATA static u32 sRecordedBattle_AI_Scripts = 0; EWRAM_DATA static struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0}; EWRAM_DATA static u16 sRecordedBattle_PlayerMonMoves[2][4] = {0}; -EWRAM_DATA static struct PlayerInfo sRecordedBattle_Players[BATTLE_BANKS_COUNT] = {0}; +EWRAM_DATA static struct PlayerInfo sRecordedBattle_Players[MAX_BATTLERS_COUNT] = {0}; EWRAM_DATA static u8 sUnknown_0203CCD0 = 0; EWRAM_DATA static u8 sUnknown_0203CCD1[8] = {0}; EWRAM_DATA static u8 sUnknown_0203CCD9 = 0; @@ -123,7 +115,7 @@ void sub_8184DA4(u8 arg0) sUnknown_0203C7AC = arg0; sUnknown_0203CCD0 = 0; - for (i = 0; i < BATTLE_BANKS_COUNT; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { sRecordedBytesNo[i] = 0; sUnknown_0203C79C[i] = 0; @@ -131,7 +123,7 @@ void sub_8184DA4(u8 arg0) if (arg0 == 1) { - for (j = 0; j < BANK_RECORD_SIZE; j++) + for (j = 0; j < BATTLER_RECORD_SIZE; j++) { sBattleRecords[i][j] |= 0xFF; } @@ -164,11 +156,11 @@ void sub_8184E58(void) gUnknown_0203C7B4 = GetMultiplayerId(); linkPlayersCount = GetLinkPlayerCount(); - for (i = 0; i < BATTLE_BANKS_COUNT; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { sRecordedBattle_Players[i].trainerId = gLinkPlayers[i].trainerId; sRecordedBattle_Players[i].gender = gLinkPlayers[i].gender; - sRecordedBattle_Players[i].bank = gLinkPlayers[i].lp_field_18; + sRecordedBattle_Players[i].battlerId = gLinkPlayers[i].lp_field_18; sRecordedBattle_Players[i].language = gLinkPlayers[i].language; if (i < linkPlayersCount) @@ -192,7 +184,7 @@ void sub_8184E58(void) | (gSaveBlock2Ptr->playerTrainerId[3] << 24); sRecordedBattle_Players[0].gender = gSaveBlock2Ptr->playerGender; - sRecordedBattle_Players[0].bank = 0; + sRecordedBattle_Players[0].battlerId = 0; sRecordedBattle_Players[0].language = gGameLanguage; for (i = 0; i < PLAYER_NAME_LENGTH; i++) @@ -200,33 +192,33 @@ void sub_8184E58(void) } } -void RecordedBattle_SetBankAction(u8 bank, u8 action) +void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action) { - if (sRecordedBytesNo[bank] < BANK_RECORD_SIZE && sUnknown_0203C7AC != 2) + if (sRecordedBytesNo[battlerId] < BATTLER_RECORD_SIZE && sUnknown_0203C7AC != 2) { - sBattleRecords[bank][sRecordedBytesNo[bank]++] = action; + sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++] = action; } } -void RecordedBattle_ClearBankAction(u8 bank, u8 bytesToClear) +void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear) { s32 i; for (i = 0; i < bytesToClear; i++) { - sRecordedBytesNo[bank]--; - sBattleRecords[bank][sRecordedBytesNo[bank]] |= 0xFF; - if (sRecordedBytesNo[bank] == 0) + sRecordedBytesNo[battlerId]--; + sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] |= 0xFF; + if (sRecordedBytesNo[battlerId] == 0) break; } } -u8 RecordedBattle_ReadBankAction(u8 bank) +u8 RecordedBattle_GetBattlerAction(u8 battlerId) { // trying to read past array or invalid action byte, battle is over - if (sRecordedBytesNo[bank] >= BANK_RECORD_SIZE || sBattleRecords[bank][sRecordedBytesNo[bank]] == 0xFF) + if (sRecordedBytesNo[battlerId] >= BATTLER_RECORD_SIZE || sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == 0xFF) { - gSpecialVar_Result = gBattleOutcome = BATTLE_PLAYER_TELEPORTED; // hah + gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah ResetPaletteFadeControl(); BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); SetMainCallback2(CB2_QuitRecordedBattle); @@ -234,7 +226,7 @@ u8 RecordedBattle_ReadBankAction(u8 bank) } else { - return sBattleRecords[bank][sRecordedBytesNo[bank]++]; + return sBattleRecords[battlerId][sRecordedBytesNo[battlerId]++]; } } @@ -248,7 +240,7 @@ u8 sub_81850DC(u8 *arg0) u8 i, j; u8 ret = 0; - for (i = 0; i < BATTLE_BANKS_COUNT; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { if (sRecordedBytesNo[i] != sUnknown_0203C79C[i]) { @@ -350,7 +342,7 @@ u32 MoveRecordedBattleToSaveData(void) battleSave->opponentParty[i] = sSavedOpponentParty[i]; } - for (i = 0; i < BATTLE_BANKS_COUNT; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { for (j = 0; j < PLAYER_NAME_LENGTH; j++) { @@ -358,7 +350,7 @@ u32 MoveRecordedBattleToSaveData(void) } battleSave->playersGender[i] = sRecordedBattle_Players[i].gender; battleSave->playersLanguage[i] = sRecordedBattle_Players[i].language; - battleSave->playersBank[i] = sRecordedBattle_Players[i].bank; + battleSave->playersBattlers[i] = sRecordedBattle_Players[i].battlerId; battleSave->playersTrainerId[i] = sRecordedBattle_Players[i].trainerId; } @@ -375,16 +367,16 @@ u32 MoveRecordedBattleToSaveData(void) } else if (sRecordedBattle_BattleFlags & BATTLE_TYPE_MULTI) { - switch (sRecordedBattle_Players[0].bank) + switch (sRecordedBattle_Players[0].battlerId) { case 0: case 2: - if (!(sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1)) + if (!(sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1)) battleSave->battleFlags |= BATTLE_TYPE_x80000000; break; case 1: case 3: - if ((sRecordedBattle_Players[gUnknown_0203C7B4].bank & 1)) + if ((sRecordedBattle_Players[gUnknown_0203C7B4].battlerId & 1)) battleSave->battleFlags |= BATTLE_TYPE_x80000000; break; } @@ -1339,7 +1331,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) gEnemyParty[i] = src->opponentParty[i]; } - for (i = 0; i < BATTLE_BANKS_COUNT; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { for (var = FALSE, j = 0; j < PLAYER_NAME_LENGTH; j++) { @@ -1349,7 +1341,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) } gLinkPlayers[i].gender = src->playersGender[i]; gLinkPlayers[i].language = src->playersLanguage[i]; - gLinkPlayers[i].lp_field_18 = src->playersBank[i]; + gLinkPlayers[i].lp_field_18 = src->playersBattlers[i]; gLinkPlayers[i].trainerId = src->playersTrainerId[i]; if (var) @@ -1386,9 +1378,9 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) gSaveBlock2Ptr->frontierChosenLvl = src->field_4FC; - for (i = 0; i < BATTLE_BANKS_COUNT; i++) + for (i = 0; i < MAX_BATTLERS_COUNT; i++) { - for (j = 0; j < BANK_RECORD_SIZE; j++) + for (j = 0; j < BATTLER_RECORD_SIZE; j++) { sBattleRecords[i][j] = src->battleRecord[i][j]; } @@ -1456,13 +1448,13 @@ static void RecordedBattle_RestoreSavedParties(void) } } -u8 GetActiveBankLinkPlayerGender(void) +u8 GetActiveBattlerLinkPlayerGender(void) { s32 i; for (i = 0; i < MAX_LINK_PLAYERS; i++) { - if (gLinkPlayers[i].lp_field_18 == gActiveBank) + if (gLinkPlayers[i].lp_field_18 == gActiveBattler) break; } @@ -1497,11 +1489,11 @@ u8 GetTextSpeedInRecordedBattle(void) return sRecordedBattle_TextSpeed; } -void RecordedBattle_CopyBankMoves(void) +void RecordedBattle_CopyBattlerMoves(void) { s32 i; - if (GetBankSide(gActiveBank) == SIDE_OPPONENT) + if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT) return; if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) return; @@ -1510,7 +1502,7 @@ void RecordedBattle_CopyBankMoves(void) for (i = 0; i < 4; i++) { - sRecordedBattle_PlayerMonMoves[gActiveBank / 2][i] = gBattleMons[gActiveBank].moves[i]; + sRecordedBattle_PlayerMonMoves[gActiveBattler / 2][i] = gBattleMons[gActiveBattler].moves[i]; } } @@ -1518,32 +1510,32 @@ void RecordedBattle_CopyBankMoves(void) void sub_818603C(u8 arg0) { - s32 bank, j, k; + s32 battlerId, j, k; if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) return; - for (bank = 0; bank < gNoOfAllBanks; bank++) + for (battlerId = 0; battlerId < gBattlersCount; battlerId++) { - if (GetBankSide(bank) != SIDE_OPPONENT) // player's side only + if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) // player's side only { if (arg0 == 1) { for (j = 0; j < 4; j++) { - if (gBattleMons[bank].moves[j] != sRecordedBattle_PlayerMonMoves[bank / 2][j]) + if (gBattleMons[battlerId].moves[j] != sRecordedBattle_PlayerMonMoves[battlerId / 2][j]) break; } if (j != 4) // player's mon's move has been changed { - RecordedBattle_SetBankAction(bank, ACTION_MOVE_CHANGE); + RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE); for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { - if (gBattleMons[bank].moves[j] == sRecordedBattle_PlayerMonMoves[bank / 2][k]) + if (gBattleMons[battlerId].moves[j] == sRecordedBattle_PlayerMonMoves[battlerId / 2][k]) { - RecordedBattle_SetBankAction(bank, k); + RecordedBattle_SetBattlerAction(battlerId, k); break; } } @@ -1552,7 +1544,7 @@ void sub_818603C(u8 arg0) } else { - if (sBattleRecords[bank][sRecordedBytesNo[bank]] == ACTION_MOVE_CHANGE) + if (sBattleRecords[battlerId][sRecordedBytesNo[battlerId]] == ACTION_MOVE_CHANGE) { u8 ppBonuses[4]; u8 array1[4]; @@ -1561,58 +1553,58 @@ void sub_818603C(u8 arg0) u8 array3[8]; u8 var; - RecordedBattle_ReadBankAction(bank); + RecordedBattle_GetBattlerAction(battlerId); for (j = 0; j < 4; j++) { - ppBonuses[j] = ((gBattleMons[bank].ppBonuses & ((3 << (j << 1)))) >> (j << 1)); + ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & ((3 << (j << 1)))) >> (j << 1)); } for (j = 0; j < 4; j++) { - array1[j] = RecordedBattle_ReadBankAction(bank); - movePp.moves[j] = gBattleMons[bank].moves[array1[j]]; - movePp.pp[j] = gBattleMons[bank].pp[array1[j]]; + array1[j] = RecordedBattle_GetBattlerAction(battlerId); + movePp.moves[j] = gBattleMons[battlerId].moves[array1[j]]; + movePp.pp[j] = gBattleMons[battlerId].pp[array1[j]]; array3[j] = ppBonuses[array1[j]]; - array2[j] = (gDisableStructs[bank].unk18_b & gBitTable[j]) >> j; + array2[j] = (gDisableStructs[battlerId].unk18_b & gBitTable[j]) >> j; } for (j = 0; j < 4; j++) { - gBattleMons[bank].moves[j] = movePp.moves[j]; - gBattleMons[bank].pp[j] = movePp.pp[j]; + gBattleMons[battlerId].moves[j] = movePp.moves[j]; + gBattleMons[battlerId].pp[j] = movePp.pp[j]; } - gBattleMons[bank].ppBonuses = 0; - gDisableStructs[bank].unk18_b = 0; + gBattleMons[battlerId].ppBonuses = 0; + gDisableStructs[battlerId].unk18_b = 0; for (j = 0; j < 4; j++) { - gBattleMons[bank].ppBonuses |= (array3[j]) << (j << 1); - gDisableStructs[bank].unk18_b |= (array2[j]) << (j); + gBattleMons[battlerId].ppBonuses |= (array3[j]) << (j << 1); + gDisableStructs[battlerId].unk18_b |= (array2[j]) << (j); } - if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED)) + if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)) { for (j = 0; j < 4; j++) { - ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1)); + ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1)); } for (j = 0; j < 4; j++) { - movePp.moves[j] = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_MOVE1 + array1[j], NULL); - movePp.pp[j] = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP1 + array1[j], NULL); + movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + array1[j], NULL); + movePp.pp[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + array1[j], NULL); array3[j] = ppBonuses[array1[j]]; } for (j = 0; j < 4; j++) { - SetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_MOVE1 + j, &movePp.moves[j]); - SetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP1 + j, &movePp.pp[j]); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + j, &movePp.moves[j]); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP1 + j, &movePp.pp[j]); } var = 0; for (j = 0; j < 4; j++) { var |= (array3[j]) << (j << 1); } - SetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_PP_BONUSES, &var); + SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &var); } - gChosenMovesByBanks[bank] = gBattleMons[bank].moves[*(gBattleStruct->chosenMovePositions + bank)]; + gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)]; } } } |