diff options
author | DizzyEggg <jajkodizzy@wp.pl> | 2017-11-13 00:10:34 +0100 |
---|---|---|
committer | DizzyEggg <jajkodizzy@wp.pl> | 2017-11-13 00:10:34 +0100 |
commit | 3b4366828637bcb6bc89f38516bc39d76ae81939 (patch) | |
tree | 0979985926a8af019e6c23ff5f9dcf5ac153093e /src | |
parent | c4674735d20e163fb35cbd87088e6f029a14d5f8 (diff) |
more recorded battle done
Diffstat (limited to 'src')
-rw-r--r-- | src/recorded_battle.c | 115 |
1 files changed, 113 insertions, 2 deletions
diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 882690d26..dfff37e90 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -7,6 +7,7 @@ #include "event_data.h" #include "link.h" #include "string_util.h" +#include "palette.h" #define BANK_RECORD_SIZE 664 @@ -42,11 +43,18 @@ EWRAM_DATA struct Pokemon sSavedPlayerParty[PARTY_SIZE] = {0}; EWRAM_DATA struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0}; EWRAM_DATA u16 gUnknown_0203CC70[8] = {0}; EWRAM_DATA struct PlayerInfo sRecordedBattle_Players[BATTLE_BANKS_COUNT] = {0}; - -extern u8 gUnknown_0203CCD0; +EWRAM_DATA u8 gUnknown_0203CCD0 = 0; +EWRAM_DATA u8 gUnknown_0203CCD1[8] = {0}; +EWRAM_DATA u8 gUnknown_0203CCD9 = 0; +EWRAM_DATA u8 gUnknown_0203CCDA = 0; +EWRAM_DATA u16 gUnknown_0203CCDC[6] = {0}; +EWRAM_DATA u8 gUnknown_0203CCE8 = 0; extern u32 sub_81A513C(void); +// this file's functions +static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2); + void sub_8184DA4(u8 arg0) { s32 i, j; @@ -130,3 +138,106 @@ void sub_8184E58(void) sRecordedBattle_Players[0].name[i] = gSaveBlock2Ptr->playerName[i]; } } + +void RecordedBattle_SetBankAction(u8 bank, u8 action) +{ + if (sRecordedBytesNo[bank] < BANK_RECORD_SIZE && gUnknown_0203C7AC != 2) + { + sBattleRecords[bank][sRecordedBytesNo[bank]++] = action; + } +} + +void RecordedBattle_ClearBankAction(u8 bank, u8 bytesToClear) +{ + s32 i; + + for (i = 0; i < bytesToClear; i++) + { + sRecordedBytesNo[bank]--; + sBattleRecords[bank][sRecordedBytesNo[bank]] |= 0xFF; + if (sRecordedBytesNo[bank] == 0) + break; + } +} + +u8 RecordedBattle_ReadBankAction(u8 bank) +{ + // trying to read past array or invalid action byte, battle is over + if (sRecordedBytesNo[bank] >= BANK_RECORD_SIZE || sBattleRecords[bank][sRecordedBytesNo[bank]] == 0xFF) + { + gScriptResult = gBattleOutcome = BATTLE_PLAYER_TELEPORTED; // hah + ResetPaletteFadeControl(); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + SetMainCallback2(CB2_QuitRecordedBattle); + return 0xFF; + } + else + { + return sBattleRecords[bank][sRecordedBytesNo[bank]++]; + } +} + +u8 sub_81850D0(void) +{ + return gUnknown_0203C7AC; +} + +u8 sub_81850DC(u8 *arg0) +{ + u8 i, j; + u8 ret = 0; + + for (i = 0; i < BATTLE_BANKS_COUNT; i++) + { + if (sRecordedBytesNo[i] != gUnknown_0203C79C[i]) + { + arg0[ret++] = i; + arg0[ret++] = sRecordedBytesNo[i] - gUnknown_0203C79C[i]; + + for (j = 0; j < sRecordedBytesNo[i] - gUnknown_0203C79C[i]; j++) + { + arg0[ret++] = sBattleRecords[i][gUnknown_0203C79C[i] + j]; + } + + gUnknown_0203C79C[i] = sRecordedBytesNo[i]; + } + } + + return ret; +} + +void sub_81851A8(u8 *arg0) +{ + s32 i; + u8 var1 = 2; + u8 var2; + + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + return; + + for (i = 0; i < GetLinkPlayerCount(); i++) + { + if ((gLinkPlayers[i].version & 0xFF) != VERSION_EMERALD) + return; + } + + if (!(gBattleTypeFlags & BATTLE_TYPE_WILD)) + { + for (var2 = *arg0; var2 != 0;) + { + u8 unkVar = sub_8185278(arg0, &var1, &var2); + u8 unkVar2 = sub_8185278(arg0, &var1, &var2); + + for (i = 0; i < unkVar2; i++) + { + sBattleRecords[unkVar][gUnknown_0203C7A4[unkVar]++] = sub_8185278(arg0, &var1, &var2); + } + } + } +} + +static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2) +{ + (*arg2)--; + return arg0[(*arg1)++]; +} |