Start misc battle documentation
This commit is contained in:
+31
-51
@@ -65,7 +65,7 @@ struct RecordedBattleSave
|
||||
u8 recordMixFriendName[PLAYER_NAME_LENGTH + 1];
|
||||
u8 recordMixFriendClass;
|
||||
u8 apprenticeId;
|
||||
u16 easyChatSpeech[6];
|
||||
u16 easyChatSpeech[EASY_CHAT_BATTLE_WORDS_COUNT];
|
||||
u8 recordMixFriendLanguage;
|
||||
u8 apprenticeLanguage;
|
||||
u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE];
|
||||
@@ -93,11 +93,11 @@ 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 bool8 sUnknown_0203CCD0 = 0;
|
||||
EWRAM_DATA static bool8 sIsPlaybackFinished = 0;
|
||||
EWRAM_DATA static u8 sRecordMixFriendName[PLAYER_NAME_LENGTH + 1] = {0};
|
||||
EWRAM_DATA static u8 sRecordMixFriendClass = 0;
|
||||
EWRAM_DATA static u8 sApprenticeId = 0;
|
||||
EWRAM_DATA static u16 sEasyChatSpeech[6] = {0};
|
||||
EWRAM_DATA static u16 sEasyChatSpeech[EASY_CHAT_BATTLE_WORDS_COUNT] = {0};
|
||||
EWRAM_DATA static u8 sBattleOutcome = 0;
|
||||
|
||||
static u8 sRecordMixFriendLanguage;
|
||||
@@ -113,7 +113,7 @@ void RecordedBattle_Init(u8 mode)
|
||||
s32 i, j;
|
||||
|
||||
sRecordMode = mode;
|
||||
sUnknown_0203CCD0 = FALSE;
|
||||
sIsPlaybackFinished = FALSE;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
@@ -124,16 +124,14 @@ void RecordedBattle_Init(u8 mode)
|
||||
if (mode == B_RECORD_MODE_RECORDING)
|
||||
{
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] = 0xFF;
|
||||
}
|
||||
sBattleFlags = gBattleTypeFlags;
|
||||
sAI_Scripts = gBattleResources->ai->aiFlags;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8184E58(void)
|
||||
void RecordedBattle_SetTrainerInfo(void)
|
||||
{
|
||||
s32 i, j;
|
||||
|
||||
@@ -150,6 +148,7 @@ void sub_8184E58(void)
|
||||
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
// Link recorded battle, record info for all trainers
|
||||
u8 linkPlayersCount;
|
||||
u8 text[30];
|
||||
|
||||
@@ -163,6 +162,7 @@ void sub_8184E58(void)
|
||||
sPlayers[i].battlerId = gLinkPlayers[i].id;
|
||||
sPlayers[i].language = gLinkPlayers[i].language;
|
||||
|
||||
// Record names
|
||||
if (i < linkPlayersCount)
|
||||
{
|
||||
StringCopy(text, gLinkPlayers[i].name);
|
||||
@@ -178,10 +178,11 @@ void sub_8184E58(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Local battle, just record own info
|
||||
sPlayers[0].trainerId = (gSaveBlock2Ptr->playerTrainerId[0])
|
||||
| (gSaveBlock2Ptr->playerTrainerId[1] << 8)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[2] << 16)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||
| (gSaveBlock2Ptr->playerTrainerId[1] << 8)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[2] << 16)
|
||||
| (gSaveBlock2Ptr->playerTrainerId[3] << 24);
|
||||
|
||||
sPlayers[0].gender = gSaveBlock2Ptr->playerGender;
|
||||
sPlayers[0].battlerId = 0;
|
||||
@@ -195,9 +196,7 @@ void sub_8184E58(void)
|
||||
void RecordedBattle_SetBattlerAction(u8 battlerId, u8 action)
|
||||
{
|
||||
if (sBattlerRecordSizes[battlerId] < BATTLER_RECORD_SIZE && sRecordMode != B_RECORD_MODE_PLAYBACK)
|
||||
{
|
||||
sBattleRecords[battlerId][sBattlerRecordSizes[battlerId]++] = action;
|
||||
}
|
||||
}
|
||||
|
||||
void RecordedBattle_ClearBattlerAction(u8 battlerId, u8 bytesToClear)
|
||||
@@ -220,7 +219,7 @@ u8 RecordedBattle_GetBattlerAction(u8 battlerId)
|
||||
{
|
||||
gSpecialVar_Result = gBattleOutcome = B_OUTCOME_PLAYER_TELEPORTED; // hah
|
||||
ResetPaletteFadeControl();
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
|
||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 16, RGB_BLACK);
|
||||
SetMainCallback2(CB2_QuitRecordedBattle);
|
||||
return 0xFF;
|
||||
}
|
||||
@@ -249,9 +248,7 @@ u8 RecordedBattle_BufferNewBattlerData(u8 *dst)
|
||||
dst[idx++] = sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i];
|
||||
|
||||
for (j = 0; j < sBattlerRecordSizes[i] - sBattlerPrevRecordSizes[i]; j++)
|
||||
{
|
||||
dst[idx++] = sBattleRecords[i][sBattlerPrevRecordSizes[i] + j];
|
||||
}
|
||||
|
||||
sBattlerPrevRecordSizes[i] = sBattlerRecordSizes[i];
|
||||
}
|
||||
@@ -283,9 +280,7 @@ void RecordedBattle_RecordAllBattlerData(u8 *src)
|
||||
u8 numActions = GetNextRecordedDataByte(src, &idx, &size);
|
||||
|
||||
for (i = 0; i < numActions; i++)
|
||||
{
|
||||
sBattleRecords[battlerId][sBattlerSavedRecordSizes[battlerId]++] = GetNextRecordedDataByte(src, &idx, &size);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -318,7 +313,7 @@ static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save)
|
||||
|
||||
static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection)
|
||||
{
|
||||
memset(saveSection, 0, 0x1000);
|
||||
memset(saveSection, 0, SECTOR_SIZE);
|
||||
memcpy(saveSection, battleSave, sizeof(*battleSave));
|
||||
|
||||
saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4);
|
||||
@@ -338,7 +333,7 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
|
||||
saveAttempts = 0;
|
||||
battleSave = AllocZeroed(sizeof(struct RecordedBattleSave));
|
||||
savSection = AllocZeroed(0x1000);
|
||||
savSection = AllocZeroed(SECTOR_SIZE);
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
@@ -349,9 +344,7 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
|
||||
{
|
||||
battleSave->playersName[i][j] = sPlayers[i].name[j];
|
||||
}
|
||||
battleSave->playersGender[i] = sPlayers[i].gender;
|
||||
battleSave->playersLanguage[i] = sPlayers[i].language;
|
||||
battleSave->playersBattlers[i] = sPlayers[i].battlerId;
|
||||
@@ -471,12 +464,8 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
}
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
battleSave->battleRecord[i][j] = sBattleRecords[i][j];
|
||||
}
|
||||
}
|
||||
|
||||
while (1)
|
||||
{
|
||||
@@ -585,29 +574,21 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src)
|
||||
sAI_Scripts = src->AI_scripts;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
{
|
||||
sRecordMixFriendName[i] = src->recordMixFriendName[i];
|
||||
}
|
||||
|
||||
sRecordMixFriendClass = src->recordMixFriendClass;
|
||||
sApprenticeId = src->apprenticeId;
|
||||
sRecordMixFriendLanguage = src->recordMixFriendLanguage;
|
||||
sApprenticeLanguage = src->apprenticeLanguage;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
sEasyChatSpeech[i] = src->easyChatSpeech[i];
|
||||
}
|
||||
|
||||
gSaveBlock2Ptr->frontier.lvlMode = src->lvlMode;
|
||||
|
||||
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||
{
|
||||
for (j = 0; j < BATTLER_RECORD_SIZE; j++)
|
||||
{
|
||||
sBattleRecords[i][j] = src->battleRecord[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PlayRecordedBattle(void (*CB2_After)(void))
|
||||
@@ -741,17 +722,20 @@ void sub_818603C(u8 arg0)
|
||||
|
||||
for (battlerId = 0; battlerId < gBattlersCount; battlerId++)
|
||||
{
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT) // player's side only
|
||||
// Player's side only
|
||||
if (GetBattlerSide(battlerId) != B_SIDE_OPPONENT)
|
||||
{
|
||||
if (arg0 == 1)
|
||||
{
|
||||
// Check if any of the battler's moves have changed
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
if (gBattleMons[battlerId].moves[j] != sPlayerMonMoves[battlerId / 2][j])
|
||||
break;
|
||||
}
|
||||
if (j != MAX_MON_MOVES) // player's mon's move has been changed
|
||||
if (j != MAX_MON_MOVES)
|
||||
{
|
||||
// At least one of the moves has been changed
|
||||
RecordedBattle_SetBattlerAction(battlerId, ACTION_MOVE_CHANGE);
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
@@ -779,9 +763,8 @@ void sub_818603C(u8 arg0)
|
||||
|
||||
RecordedBattle_GetBattlerAction(battlerId);
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
ppBonuses[j] = ((gBattleMons[battlerId].ppBonuses & (3 << (j << 1))) >> (j << 1));
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
array1[j] = RecordedBattle_GetBattlerAction(battlerId);
|
||||
@@ -806,9 +789,8 @@ void sub_818603C(u8 arg0)
|
||||
if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED))
|
||||
{
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
ppBonuses[j] = ((GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, NULL) & ((3 << (j << 1)))) >> (j << 1));
|
||||
}
|
||||
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
movePp.moves[j] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + array1[j], NULL);
|
||||
@@ -822,12 +804,10 @@ void sub_818603C(u8 arg0)
|
||||
}
|
||||
var = 0;
|
||||
for (j = 0; j < MAX_MON_MOVES; j++)
|
||||
{
|
||||
var |= (array3[j]) << (j << 1);
|
||||
}
|
||||
|
||||
SetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PP_BONUSES, &var);
|
||||
}
|
||||
|
||||
gChosenMoveByBattler[battlerId] = gBattleMons[battlerId].moves[*(gBattleStruct->chosenMovePositions + battlerId)];
|
||||
}
|
||||
}
|
||||
@@ -840,24 +820,24 @@ u32 GetAiScriptsInRecordedBattle(void)
|
||||
return sAI_Scripts;
|
||||
}
|
||||
|
||||
void sub_8186444(void)
|
||||
// Used to determine when the player is allowed to press B to end a recorded battle's playback
|
||||
void RecordedBattle_SetPlaybackFinished(void)
|
||||
{
|
||||
sUnknown_0203CCD0 = TRUE;
|
||||
sIsPlaybackFinished = TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8186450(void)
|
||||
bool8 RecordedBattle_CanStopPlayback(void)
|
||||
{
|
||||
return (sUnknown_0203CCD0 == FALSE);
|
||||
return (sIsPlaybackFinished == FALSE);
|
||||
}
|
||||
|
||||
void GetRecordedBattleRecordMixFriendName(u8 *dst)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
dst[i] = sRecordMixFriendName[i];
|
||||
|
||||
dst[7] = EOS;
|
||||
dst[PLAYER_NAME_LENGTH] = EOS;
|
||||
ConvertInternationalString(dst, sRecordMixFriendLanguage);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user