From 826d0ea2abe1ef505fb6b2b9b78e36c5c7a76c0e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 27 Oct 2018 15:44:29 +0200 Subject: Begin frontier records --- src/battle_frontier_2.c | 378 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 src/battle_frontier_2.c (limited to 'src') diff --git a/src/battle_frontier_2.c b/src/battle_frontier_2.c new file mode 100644 index 000000000..9e8d20033 --- /dev/null +++ b/src/battle_frontier_2.c @@ -0,0 +1,378 @@ +#include "global.h" +#include "event_data.h" +#include "battle_setup.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" +#include "field_specials.h" +#include "battle.h" +#include "script_pokemon_util_80F87D8.h" +#include "main.h" +#include "window.h" +#include "menu.h" +#include "text.h" +#include "battle_records.h" +#include "international_string_util.h" +#include "string_util.h" +#include "constants/battle_frontier.h" + +extern u8 gUnknown_0203CEF8[]; + +extern void (* const gUnknown_08611C18[])(void); +extern const u16 gUnknown_08611BFC[][2]; + +extern void sub_81B8558(void); + +// This file's functions. +u8 sub_81A3B30(u8 facility); + +void sub_81A1780(void) +{ + gUnknown_08611C18[gSpecialVar_0x8004](); +} + +void sub_81A17A0(void) +{ + VarSet(VAR_TEMP_0, 0xFF); + switch (gSaveBlock2Ptr->frontier.field_CA8) + { + case 0: + break; + case 1: + sub_813A878(0); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + case 4: + sub_813A878(0); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + case 3: + sub_813A878(1); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + case 2: + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + } +} + +void sub_81A1830(void) +{ + u8 facility = VarGet(VAR_FRONTIER_FACILITY); + u8 currSymbol = sub_81A3B30(facility); + if (currSymbol == 2) + currSymbol = 1; + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA8; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.lvlMode; + break; + case 2: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.curChallengeBattleNum; + break; + case 3: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_a; + break; + case 5: + gSpecialVar_Result = gBattleOutcome; + gBattleOutcome = 0; + break; + case 6: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_b; + break; + case 7: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D00 & gUnknown_08611BFC[facility][currSymbol]; + break; + } +} + +void sub_81A1968(void) +{ + s32 i; + u8 facility = VarGet(VAR_FRONTIER_FACILITY); + u8 currSymbol = sub_81A3B30(facility); + if (currSymbol == 2) + currSymbol = 1; + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8006; + break; + case 1: + gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_0x8006; + break; + case 2: + gSaveBlock2Ptr->frontier.curChallengeBattleNum = gSpecialVar_0x8006; + break; + case 3: + gSaveBlock2Ptr->frontier.field_CA9_a = gSpecialVar_0x8006; + break; + case 4: + for (i = 0; i < 4; i++) + gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gUnknown_0203CEF8[i]; + break; + case 6: + gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006; + break; + case 7: + gSaveBlock2Ptr->frontier.field_D00 |= gUnknown_08611BFC[facility][currSymbol]; + break; + } +} + +void sub_81A1AD4(void) +{ + s32 i; + + sub_81B8558(); + for (i = 0; i < gSpecialVar_0x8005; i++) + gUnknown_0203CEF8[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i]; + ReducePlayerPartyToThree(); +} + +void sub_81A1B1C(void) +{ + DoSoftReset(); +} + +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; + +void sub_81A1B28(void) +{ + gFacilityTrainers = gBattleFrontierTrainers; +} + +void sub_81A1B38(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; + if (monId < PARTY_SIZE) + gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1] = gPlayerParty[i]; + } +} + +void PutTowerResultsWindow(u8); +void sub_81A2134(u8); +void sub_81A2460(u8); +void sub_81A2698(void); +void sub_81A2C94(u8); +void sub_81A2968(void); +void sub_81A2F38(void); +void sub_81A2FF8(void); + +void sub_81A1B98(void) +{ + if (gSpecialVar_0x8006 > 3) + gSpecialVar_0x8006 = 0; + switch (gSpecialVar_0x8005) + { + case 0: + PutTowerResultsWindow(gSpecialVar_0x8006); + break; + case 1: + sub_81A2134(gSpecialVar_0x8006); + break; + case 2: + sub_81A2460(gSpecialVar_0x8006); + break; + case 5: + sub_81A2698(); + break; + case 4: + sub_81A2C94(gSpecialVar_0x8006); + break; + case 3: + sub_81A2968(); + break; + case 6: + sub_81A2F38(); + break; + case 7: + sub_81A2FF8(); + break; + } +} + +bool8 sub_81A1C24(u32 flags) +{ + if (gSaveBlock2Ptr->frontier.field_CDC & flags) + return TRUE; + else + return FALSE; +} + +void sub_81A1C4C(const u8 *str, s32 y) +{ + s32 x = GetStringCenterAlignXOffset(1, str, 0xE0); + y = (y * 8) + 1; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, y, TEXT_SPEED_FF, NULL); +} + +void PrintHyphens(s32 y) +{ + s32 i; + u8 text[37]; + + for (i = 0; i < 36; i++) + text[i] = CHAR_HYPHEN; + text[i] = EOS; + + y = (y * 8) + 1; + AddTextPrinterParameterized(gRecordsWindowId, 1, text, 4, y, TEXT_SPEED_FF, NULL); +} + +extern const u8 gText_WinStreak[]; +extern const u8 gText_Record[]; +extern const u8 gText_Current[]; +extern const u8 gText_Prev[]; +extern const u8 gText_SingleBattleRoomResults[]; +extern const u8 gText_DoubleBattleRoomResults[]; +extern const u8 gText_MultiBattleRoomResults[]; +extern const u8 gText_LinkMultiBattleRoomResults[]; +extern const u8 gText_Lv502[]; +extern const u8 gText_OpenLv[]; +extern const u8 gText_ClearStreak[]; + +void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_WinStreak); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.field_CF0[battleMode][lvlMode]; + TowerPrintStreak(gText_Record, num, x1, x2, y); +} + +u16 TowerGetStreak(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = TowerGetStreak(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(2); + else + isCurrent = sub_81A1C24(1); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x8000); + else + isCurrent = sub_81A1C24(0x4000); + break; + case FRONTIER_MODE_MULTIS: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x20000); + else + isCurrent = sub_81A1C24(0x10000); + break; + case FRONTIER_MODE_LINK_MULTIS: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x80000); + else + isCurrent = sub_81A1C24(0x40000); + break; + } + + if (isCurrent == TRUE) + TowerPrintStreak(gText_Current, winStreak, x1, x2, y); + else + TowerPrintStreak(gText_Prev, winStreak, x1, x2, y); +} + +extern const struct WindowTemplate gUnknown_08611C74; + +void PutTowerResultsWindow(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_SingleBattleRoomResults); + else if (battleMode == FRONTIER_MODE_DOUBLES) + StringExpandPlaceholders(gStringVar4, gText_DoubleBattleRoomResults); + else if (battleMode == FRONTIER_MODE_MULTIS) + StringExpandPlaceholders(gStringVar4, gText_MultiBattleRoomResults); + else + StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults); + + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 132, 49); + TowerPrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 132, 65); + TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 97); + TowerPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +u16 sub_81A1FD8(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void sub_81A2008(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, str2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +void sub_81A2094(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = sub_81A1FD8(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(8); + else + isCurrent = sub_81A1C24(4); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x200000); + else + isCurrent = sub_81A1C24(0x100000); + break; + } + + if (isCurrent == TRUE) + sub_81A2008(gText_Current, gText_ClearStreak, winStreak, x1, x2, y); + else + sub_81A2008(gText_Prev, gText_ClearStreak, winStreak, x1, x2, y); +} -- cgit v1.2.3 From 269d7c251022ccbd68f1e4b93cf4d8f4c3424c6e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 27 Oct 2018 17:39:05 +0200 Subject: up to factory --- src/battle_dome.c | 18 +-- src/battle_frontier_2.c | 380 ++++++++++++++++++++++++++++++++++++++++++++---- src/battle_tower.c | 18 +-- 3 files changed, 367 insertions(+), 49 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 00bf9646b..c54abd68c 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2408,7 +2408,7 @@ static void sub_818E9CC(void) gSaveBlock2Ptr->frontier.field_CA9_a = 0; gSaveBlock2Ptr->frontier.field_CA9_b = 0; if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode])) - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0; saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); gTrainerBattleOpponent_A = 0; @@ -2422,7 +2422,7 @@ static void sub_818EA84(void) switch (gSpecialVar_0x8005) { case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; break; case 1: gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0); @@ -2490,7 +2490,7 @@ static void sub_818ED28(void) switch (gSpecialVar_0x8005) { case 0: - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = gSpecialVar_0x8006; + gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; break; case 1: if (gSpecialVar_0x8006) @@ -3481,13 +3481,13 @@ static void sub_819033C(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] < 999) - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]++; - if (gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode] < 999) - gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode]++; + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 999) + gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++; + if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 999) + gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++; - if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode]) - gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode]) + gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; } static void ShowDomeOpponentInfo(void) diff --git a/src/battle_frontier_2.c b/src/battle_frontier_2.c index 9e8d20033..6b276106c 100644 --- a/src/battle_frontier_2.c +++ b/src/battle_frontier_2.c @@ -20,11 +20,21 @@ extern u8 gUnknown_0203CEF8[]; extern void (* const gUnknown_08611C18[])(void); extern const u16 gUnknown_08611BFC[][2]; +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; +extern const struct WindowTemplate gUnknown_08611C74; extern void sub_81B8558(void); // This file's functions. u8 sub_81A3B30(u8 facility); +void ShowTowerResultsWindow(u8); +void ShowDomeResultsWindow(u8); +void ShowPalaceResultsWindow(u8); +void ShowPikeResultsWindow(void); +void sub_81A2C94(u8); +void ShowArenaResultsWindow(void); +void sub_81A2F38(void); +void sub_81A2FF8(void); void sub_81A1780(void) { @@ -140,8 +150,6 @@ void sub_81A1B1C(void) DoSoftReset(); } -extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; - void sub_81A1B28(void) { gFacilityTrainers = gBattleFrontierTrainers; @@ -159,15 +167,6 @@ void sub_81A1B38(void) } } -void PutTowerResultsWindow(u8); -void sub_81A2134(u8); -void sub_81A2460(u8); -void sub_81A2698(void); -void sub_81A2C94(u8); -void sub_81A2968(void); -void sub_81A2F38(void); -void sub_81A2FF8(void); - void sub_81A1B98(void) { if (gSpecialVar_0x8006 > 3) @@ -175,22 +174,22 @@ void sub_81A1B98(void) switch (gSpecialVar_0x8005) { case 0: - PutTowerResultsWindow(gSpecialVar_0x8006); + ShowTowerResultsWindow(gSpecialVar_0x8006); break; case 1: - sub_81A2134(gSpecialVar_0x8006); + ShowDomeResultsWindow(gSpecialVar_0x8006); break; case 2: - sub_81A2460(gSpecialVar_0x8006); + ShowPalaceResultsWindow(gSpecialVar_0x8006); break; case 5: - sub_81A2698(); + ShowPikeResultsWindow(); break; case 4: sub_81A2C94(gSpecialVar_0x8006); break; case 3: - sub_81A2968(); + ShowArenaResultsWindow(); break; case 6: sub_81A2F38(); @@ -232,6 +231,7 @@ void PrintHyphens(s32 y) extern const u8 gText_WinStreak[]; extern const u8 gText_Record[]; extern const u8 gText_Current[]; +extern const u8 gText_RoomsCleared[]; extern const u8 gText_Prev[]; extern const u8 gText_SingleBattleRoomResults[]; extern const u8 gText_DoubleBattleRoomResults[]; @@ -239,8 +239,23 @@ extern const u8 gText_MultiBattleRoomResults[]; extern const u8 gText_LinkMultiBattleRoomResults[]; extern const u8 gText_Lv502[]; extern const u8 gText_OpenLv[]; +extern const u8 gText_RentalSwap[]; extern const u8 gText_ClearStreak[]; - +extern const u8 gText_Total[]; +extern const u8 gText_Championships[]; +extern const u8 gText_SingleBattleTourneyResults[]; +extern const u8 gText_DoubleBattleTourneyResults[]; +extern const u8 gText_SingleBattleHallResults[]; +extern const u8 gText_DoubleBattleHallResults[]; +extern const u8 gText_BattleChoiceResults[]; +extern const u8 gText_TimesCleared[]; +extern const u8 gText_KOsInARow[]; +extern const u8 gText_SetKOTourneyResults[]; +extern const u8 gText_TimesVar1[]; +extern const u8 gText_BattleSwapSingleResults[]; +extern const u8 gText_BattleSwapDoubleResults[]; + +// Battle Tower. void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); @@ -253,13 +268,13 @@ void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) { - u16 num = gSaveBlock2Ptr->frontier.field_CF0[battleMode][lvlMode]; + u16 num = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode]; TowerPrintStreak(gText_Record, num, x1, x2, y); } -u16 TowerGetStreak(u8 battleMode, u8 lvlMode) +u16 TowerGetWinStreak(u8 battleMode, u8 lvlMode) { - u16 winStreak = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode]; + u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; if (winStreak > 9999) return 9999; else @@ -269,7 +284,7 @@ u16 TowerGetStreak(u8 battleMode, u8 lvlMode) void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) { bool8 isCurrent; - u16 winStreak = TowerGetStreak(battleMode, lvlMode); + u16 winStreak = TowerGetWinStreak(battleMode, lvlMode); switch (battleMode) { default: @@ -305,9 +320,7 @@ void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y TowerPrintStreak(gText_Prev, winStreak, x1, x2, y); } -extern const struct WindowTemplate gUnknown_08611C74; - -void PutTowerResultsWindow(u8 battleMode) +void ShowTowerResultsWindow(u8 battleMode) { gRecordsWindowId = AddWindow(&gUnknown_08611C74); NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); @@ -333,16 +346,17 @@ void PutTowerResultsWindow(u8 battleMode) CopyWindowToVram(gRecordsWindowId, 3); } -u16 sub_81A1FD8(u8 battleMode, u8 lvlMode) +// Battle Dome. +u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode) { - u16 winStreak = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; + u16 winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; if (winStreak > 9999) return 9999; else return winStreak; } -void sub_81A2008(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) +void PrintTwoStrings(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); @@ -350,10 +364,10 @@ void sub_81A2008(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); } -void sub_81A2094(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) { bool8 isCurrent; - u16 winStreak = sub_81A1FD8(battleMode, lvlMode); + u16 winStreak = DomeGetWinStreak(battleMode, lvlMode); switch (battleMode) { default: @@ -372,7 +386,311 @@ void sub_81A2094(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) } if (isCurrent == TRUE) - sub_81A2008(gText_Current, gText_ClearStreak, winStreak, x1, x2, y); + PrintTwoStrings(gText_Current, gText_ClearStreak, winStreak, x1, x2, y); + else + PrintTwoStrings(gText_Prev, gText_ClearStreak, winStreak, x1, x2, y); +} + +void ShowDomeResultsWindow(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_SingleBattleTourneyResults); + else + StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults); + + sub_81A1C4C(gStringVar4, 0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 64, 121, 33); + PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_50], 64, 121, 49); + PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_50], 64, 112, 65); + DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 64, 121, 97); + PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_OPEN], 64, 121, 113); + PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_OPEN], 64, 112, 129); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Palace. +void PalacePrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_WinStreak); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]; + PalacePrintStreak(gText_Record, num, x1, x2, y); +} + +u16 PalaceGetWinStreak(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = PalaceGetWinStreak(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x20); + else + isCurrent = sub_81A1C24(0x10); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x800000); + else + isCurrent = sub_81A1C24(0x400000); + } + + if (isCurrent == TRUE) + PalacePrintStreak(gText_Current, winStreak, x1, x2, y); else - sub_81A2008(gText_Prev, gText_ClearStreak, winStreak, x1, x2, y); + PalacePrintStreak(gText_Prev, winStreak, x1, x2, y); } + +void ShowPalaceResultsWindow(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_SingleBattleHallResults); + else + StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults); + + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 131, 49); + PalacePrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 131, 65); + PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 97); + PalacePrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Pike. +u16 PikeGetWinStreak(u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void PikePrintCleared(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, str2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = PikeGetWinStreak(lvlMode); + + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x800); + else + isCurrent = sub_81A1C24(0x400); + + if (isCurrent == TRUE) + PrintTwoStrings(gText_Current, gText_RoomsCleared, winStreak, x1, x2, y); + else + PrintTwoStrings(gText_Prev, gText_RoomsCleared, winStreak, x1, x2, y); +} + +void ShowPikeResultsWindow(void) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults); + sub_81A1C4C(gStringVar4, 0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + PikePrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 114, 33); + PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_50], 64, 114, 49); + PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_50], 64, 114, 65); + PikePrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 114, 97); + PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_OPEN], 64, 114, 113); + PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_OPEN], 64, 114, 129); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Arena. +void ArenaPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_KOsInARow); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode]; + ArenaPrintStreak(gText_Record, num, x1, x2, y); +} + +u16 ArenaGetWinStreak(u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = ArenaGetWinStreak(lvlMode); + + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x80); + else + isCurrent = sub_81A1C24(0x40); + + if (isCurrent == TRUE) + ArenaPrintStreak(gText_Current, winStreak, x1, x2, y); + else + ArenaPrintStreak(gText_Prev, winStreak, x1, x2, y); +} + +void ShowArenaResultsWindow(void) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + PrintHyphens(10); + StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults); + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 72, 126, 49); + ArenaPrintRecordStreak(FRONTIER_LVL_50, 72, 126, 65); + ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 72, 126, 97); + ArenaPrintRecordStreak(FRONTIER_LVL_OPEN, 72, 126, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Factory. +void sub_81A2A28(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num1 > 9999) + num1 = 9999; + ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_WinStreak); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + + ConvertIntToDecimalStringN(gStringVar1, num2, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_TimesVar1); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x3, y, TEXT_SPEED_FF, NULL); +} + +void sub_81A2B04(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) +{ + u16 num1 = gSaveBlock2Ptr->frontier.field_DEA[battleMode][lvlMode]; + u16 num2 = gSaveBlock2Ptr->frontier.field_DFA[battleMode][lvlMode]; + sub_81A2A28(gText_Record, num1, num2, x1, x2, x3, y); +} + +u16 sub_81A2B70(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.field_DE2[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +u16 sub_81A2BA0(u8 battleMode, u8 lvlMode) +{ + u16 rents = gSaveBlock2Ptr->frontier.field_DF2[battleMode][lvlMode]; + if (rents > 9999) + return 9999; + else + return rents; +} + +void sub_81A2BD0(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) +{ + bool8 isCurrent; + u16 winStreak = sub_81A2B70(battleMode, lvlMode); + u16 rents = sub_81A2BA0(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x200); + else + isCurrent = sub_81A1C24(0x100); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x2000000); + else + isCurrent = sub_81A1C24(0x1000000); + break; + } + + if (isCurrent == TRUE) + sub_81A2A28(gText_Current, winStreak, rents, x1, x2, x3, y); + else + sub_81A2A28(gText_Prev, winStreak, rents, x1, x2, x3, y); +} + +void sub_81A2C94(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_BattleSwapSingleResults); + else + StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults); + + sub_81A1C4C(gStringVar4, 0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + sub_81A2BD0(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49); + sub_81A2B04(battleMode, FRONTIER_LVL_50, 8, 64, 158, 65); + sub_81A2BD0(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 113); + sub_81A2B04(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 129); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + diff --git a/src/battle_tower.c b/src/battle_tower.c index 4b63c2875..4199129b2 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -220,7 +220,7 @@ static void sub_8161F94(void) gSaveBlock2Ptr->frontier.field_CA9_b = 0; sub_81A3ACC(); if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode])) - gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0; ValidateBattleTowerRecordChecksums(); saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); @@ -258,7 +258,7 @@ static void sub_81620F4(void) case 0: break; case 1: - gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; + gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; break; case 2: if (gSpecialVar_0x8006) @@ -1179,7 +1179,7 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId) { u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; // Unused variable. u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u8 challengeNum = gSaveBlock2Ptr->frontier.winStreaks[battleMode][0] / 7; + u8 challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][0] / 7; if (gSaveBlock2Ptr->frontier.curChallengeBattleNum < 6) fixedIV = sub_81A6CA8(challengeNum, 0); else @@ -1480,8 +1480,8 @@ static void SaveCurrentWinStreak(void) u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u16 winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); - if (gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] < winStreak) - gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] = winStreak; + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < winStreak) + gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = winStreak; } static void sub_8163EE4(void) @@ -1535,7 +1535,7 @@ static void SaveBattleTowerProgress(void) { u16 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] / 7); + s32 challengeNum = (signed)(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7); if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0)) sub_8163EE4(); @@ -1625,7 +1625,7 @@ static void sub_81642A0(void) eventObjTemplates = gSaveBlock1Ptr->eventObjectTemplates; lvlMode = gSaveBlock2Ptr->frontier.lvlMode; battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - challengeNum = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; species1 = GetMonData(&gPlayerParty[0], MON_DATA_SPECIES, NULL); species2 = GetMonData(&gPlayerParty[1], MON_DATA_SPECIES, NULL); level = SetFacilityPtrsGetLevel(); @@ -1911,7 +1911,7 @@ static void sub_8164B74(void) case 0: if (battleMode == FRONTIER_MODE_LINK_MULTIS) { - challengeNum = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode] / 7; + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; if (sub_800A520()) { SendBlock(bitmask_all_link_players_but_self(), &challengeNum, sizeof(challengeNum)); @@ -2069,7 +2069,7 @@ static void ClearBattleTowerRecord(struct EmeraldBattleTowerRecord *record) u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode) { - u16 winStreak = gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode]; + u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; if (winStreak > 9999) return 9999; -- cgit v1.2.3 From e85051712361063b04aa7a35ff5c25aed068cab9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 27 Oct 2018 21:01:35 +0200 Subject: more battle frontier 2 --- src/battle_dome.c | 108 +++++------ src/battle_frontier_2.c | 494 ++++++++++++++++++++++++++++++++++++++++++++---- src/battle_message.c | 8 +- src/battle_tower.c | 17 +- src/overworld.c | 2 +- src/tv.c | 6 +- 6 files changed, 533 insertions(+), 102 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index c54abd68c..4a12d64a3 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -3,6 +3,7 @@ #include "battle.h" #include "battle_setup.h" #include "battle_tower.h" +#include "battle_frontier_2.h" #include "battle_message.h" #include "event_data.h" #include "overworld.h" @@ -56,12 +57,11 @@ struct UnkStruct_860DD10 }; extern void sub_81B8558(void); -extern u32 sub_81A39C4(void); extern u16 sub_81A5060(u8 monId, u8 moveSlotId); extern u8 sub_81A50F0(u8, u8); extern u8 sub_81A50B0(u8); extern void sub_81A4C30(void); -extern bool8 sub_81A3610(void); +extern u8 sub_81A3610(void); extern u16 sub_81A4FF0(u8); extern void ReducePlayerPartyToThree(void); @@ -2575,7 +2575,7 @@ static void InitDomeTrainers(void) for (i = 0; i < 3; i++) { - gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL); + gSaveBlock2Ptr->frontier.domeMonIds[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL); for (j = 0; j < 4; j++) gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_MOVE1 + j, NULL); for (j = 0; j < 6; j++) @@ -2590,7 +2590,7 @@ static void InitDomeTrainers(void) { do { - trainerId = sub_8162548(sub_81A39C4(), 0); + trainerId = sub_8162548(GetCurrentFacilityWinStreak(), 0); for (j = 1; j < i; j++) { if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) @@ -2603,7 +2603,7 @@ static void InitDomeTrainers(void) { do { - trainerId = sub_8162548(sub_81A39C4() + 1, 0); + trainerId = sub_8162548(GetCurrentFacilityWinStreak() + 1, 0); for (j = 1; j < i; j++) { if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) @@ -2621,7 +2621,7 @@ static void InitDomeTrainers(void) monTournamentId = RandomizeFacilityTrainerMonId(trainerId); for (k = 0; k < j; k++) { - s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; + s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonIds[i][k]; if (checkingMonId == monTournamentId || species[0] == gFacilityTrainerMons[monTournamentId].species || species[1] == gFacilityTrainerMons[monTournamentId].species @@ -2630,7 +2630,7 @@ static void InitDomeTrainers(void) } } while (k != j); - gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; + gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monTournamentId; species[j] = gFacilityTrainerMons[monTournamentId].species; } @@ -2671,10 +2671,10 @@ static void InitDomeTrainers(void) ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); for (j = 0; j < 3; j++) { - CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, + CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species, monLevel, ivs, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].evSpread, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].nature, statValues); statSums[i] += statValues[STAT_ATK]; @@ -2683,8 +2683,8 @@ static void InitDomeTrainers(void) statSums[i] += statValues[STAT_SPDEF]; statSums[i] += statValues[STAT_SPEED]; statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type1]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type2]; } for (monTypesCount = 0, j = 0; j < 32; j++) @@ -2737,7 +2737,7 @@ static void InitDomeTrainers(void) } for (i = 0; i < 3; i++) - gSaveBlock2Ptr->frontier.domeMonId[j][i] = sub_81A4FF0(i); + gSaveBlock2Ptr->frontier.domeMonIds[j][i] = sub_81A4FF0(i); } Free(statSums); @@ -2799,7 +2799,7 @@ static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray) SWAP(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId, temp); for (i = 0; i < 3; i++) - SWAP(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i], temp); + SWAP(gSaveBlock2Ptr->frontier.domeMonIds[id1][i], gSaveBlock2Ptr->frontier.domeMonIds[id2][i], temp); } static void sub_818F9B0(void) @@ -2829,24 +2829,24 @@ static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentM u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. u8 level = SetFacilityPtrsGetLevel(); CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].species, level, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].nature, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].nature, fixedIv, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].evSpread, otId); + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].evSpread, otId); happiness = 0xFF; for (i = 0; i < 4; i++) { SetMonMoveSlot(&gEnemyParty[monPartyId], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i], i); - if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION) + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].moves[i], i); + if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION) happiness = 0; } SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &happiness); SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, - &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].itemTableId]); + &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][tournamentMonId]].itemTableId]); } static void CreateDomeTrainerMons(u16 tournamentTrainerId) @@ -2922,7 +2922,7 @@ static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) } else { - array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][i]].moves[moveId], GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); } } @@ -2950,7 +2950,7 @@ static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) } else { - array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentTrainerId][i]].moves[moveId], GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); } } @@ -4756,7 +4756,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) { if (trainerId == TRAINER_PLAYER) { - sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i], SpriteCb_MonIcon, x | sInfoTrainerMonX[i], y + sInfoTrainerMonY[i], @@ -4765,7 +4765,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i], SpriteCb_MonIcon, x | sInfoTrainerMonX[i], y + sInfoTrainerMonY[i], @@ -4774,7 +4774,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) } else { - sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].species, SpriteCb_MonIcon, x | sInfoTrainerMonX[i], y + sInfoTrainerMonY[i], @@ -4837,11 +4837,11 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) { textPrinter.currentY = gUnknown_0860D346[i]; if (trainerId == TRAINER_PLAYER) - textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; + textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]]; else if (trainerId == TRAINER_FRONTIER_BRAIN) - textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; + textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]]; else - textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species]; + textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].species]; textPrinter.windowId = 1 + i + windowId; if (i == 1) @@ -4879,7 +4879,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) else if (trainerId == TRAINER_PLAYER) allocatedArray[k] += sMovePointsForDomeTrainers[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; else - allocatedArray[k] += sMovePointsForDomeTrainers[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k]; + allocatedArray[k] += sMovePointsForDomeTrainers[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].moves[j]][k]; } } } @@ -4952,7 +4952,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) { for (i = 0; i < 3; i++) { - s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; + s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].evSpread; for (k = 0, j = 0; j < 6; j++) { allocatedArray[j] = 0; @@ -4961,7 +4961,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) evBits >>= 1; } k = MAX_TOTAL_EVS / k; - evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; + evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].evSpread; for (j = 0; j < 6; j++) { if (evBits & 1) @@ -4972,7 +4972,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) allocatedArray[6] += allocatedArray[0]; for (j = 0; j < 5; j++) { - nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].nature; + nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[trainerTournamentId][i]].nature; if (gNatureStatTable[nature][j] > 0) { allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; @@ -5210,7 +5210,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { if (trainerIds[0] == TRAINER_PLAYER) { - sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i], SpriteCb_MonIcon, x | sFirstTrainerMonX[i], y + sFirstTrainerMonY[i], @@ -5219,7 +5219,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) } else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) { - sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i], SpriteCb_MonIcon, x | sFirstTrainerMonX[i], y + sFirstTrainerMonY[i], @@ -5228,7 +5228,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) } else { - sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i]].species, + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[0]][i]].species, SpriteCb_MonIcon, x | sFirstTrainerMonX[i], y + sFirstTrainerMonY[i], @@ -5250,7 +5250,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { if (trainerIds[1] == TRAINER_PLAYER) { - sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], + sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i], SpriteCb_MonIcon, x | sSecondTrainerMonX[i], y + sSecondTrainerMonY[i], @@ -5259,7 +5259,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) } else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) { - sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], + sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i], SpriteCb_MonIcon, x | sSecondTrainerMonX[i], y + sSecondTrainerMonY[i], @@ -5268,7 +5268,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) } else { - sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i]].species, + sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentIds[1]][i]].species, SpriteCb_MonIcon, x | sSecondTrainerMonX[i], y + sSecondTrainerMonY[i], @@ -5566,7 +5566,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN) moveIds[i * 4 + j] = sub_81A5060(i, j); else - moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[winnerTournamentId][i]].moves[j]; + moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[winnerTournamentId][i]].moves[j]; movePower = gBattleMoves[moveIds[i * 4 + j]].power; if (movePower == 0) @@ -5584,9 +5584,9 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun do { var = Random32(); - } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].nature != GetNatureFromPersonality(var)); + } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[loserTournamentId][k]].nature != GetNatureFromPersonality(var)); - targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].species; + targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[loserTournamentId][k]].species; if (var & 1) targetAbility = gBaseStats[targetSpecies].ability2; else @@ -6193,7 +6193,7 @@ static void sub_8194F58(void) monTournamentId = RandomizeFacilityTrainerMonId(trainerId); for (k = 0; k < j; k++) { - s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; + s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonIds[i][k]; if (checkingMonId == monTournamentId || species[0] == gFacilityTrainerMons[monTournamentId].species || species[1] == gFacilityTrainerMons[monTournamentId].species @@ -6202,7 +6202,7 @@ static void sub_8194F58(void) } } while (k != j); - gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; + gSaveBlock2Ptr->frontier.domeMonIds[i][j] = monTournamentId; species[j] = gFacilityTrainerMons[monTournamentId].species; } gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; @@ -6218,10 +6218,10 @@ static void sub_8194F58(void) ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); for (j = 0; j < 3; j++) { - CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, + CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species, monLevel, ivs, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].evSpread, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].nature, statValues); statSums[i] += statValues[STAT_ATK]; @@ -6230,8 +6230,8 @@ static void sub_8194F58(void) statSums[i] += statValues[STAT_SPDEF]; statSums[i] += statValues[STAT_SPEED]; statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type1]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[i][j]].species].type2]; } // Because GF hates temporary vars, trainerId acts like monTypesCount here. @@ -6347,11 +6347,11 @@ static void DecideRoundWinners(u8 roundId) { for (monId2 = 0; monId2 < 3; monId2++) { - points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId2]].species, 2); + points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId1]].moves[moveSlot], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId2]].species, 2); } } - species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].species; + species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId1]].species; points1 += ( gBaseStats[species].baseHP + gBaseStats[species].baseAttack + gBaseStats[species].baseDefense @@ -6370,11 +6370,11 @@ static void DecideRoundWinners(u8 roundId) { for (monId2 = 0; monId2 < 3; monId2++) { - points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId2]].species, 2); + points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId1]].moves[moveSlot], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId1][monId2]].species, 2); } } - species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].species; + species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[tournamentId2][monId1]].species; points2 += ( gBaseStats[species].baseHP + gBaseStats[species].baseAttack + gBaseStats[species].baseDefense diff --git a/src/battle_frontier_2.c b/src/battle_frontier_2.c index 6b276106c..693a1180f 100644 --- a/src/battle_frontier_2.c +++ b/src/battle_frontier_2.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_frontier_2.h" #include "event_data.h" #include "battle_setup.h" #include "overworld.h" @@ -14,7 +15,13 @@ #include "battle_records.h" #include "international_string_util.h" #include "string_util.h" +#include "new_game.h" +#include "link.h" +#include "tv.h" +#include "apprentice.h" +#include "recorded_battle.h" #include "constants/battle_frontier.h" +#include "constants/trainers.h" extern u8 gUnknown_0203CEF8[]; @@ -22,6 +29,7 @@ extern void (* const gUnknown_08611C18[])(void); extern const u16 gUnknown_08611BFC[][2]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; extern const struct WindowTemplate gUnknown_08611C74; +extern const struct WindowTemplate gUnknown_08611C7C; extern void sub_81B8558(void); @@ -31,10 +39,12 @@ void ShowTowerResultsWindow(u8); void ShowDomeResultsWindow(u8); void ShowPalaceResultsWindow(u8); void ShowPikeResultsWindow(void); -void sub_81A2C94(u8); +void ShowFactoryResultsWindow(u8); void ShowArenaResultsWindow(void); -void sub_81A2F38(void); -void sub_81A2FF8(void); +void ShowPyramidResultsWindow(void); +void ShowLinkContestResultsWindow(void); +u8 sub_81A3610(void); +void sub_81A51A8(u8); void sub_81A1780(void) { @@ -173,29 +183,29 @@ void sub_81A1B98(void) gSpecialVar_0x8006 = 0; switch (gSpecialVar_0x8005) { - case 0: + case FRONTIER_FACILITY_TOWER: ShowTowerResultsWindow(gSpecialVar_0x8006); break; - case 1: + case FRONTIER_FACILITY_DOME: ShowDomeResultsWindow(gSpecialVar_0x8006); break; - case 2: + case FRONTIER_FACILITY_PALACE: ShowPalaceResultsWindow(gSpecialVar_0x8006); break; - case 5: + case FRONTIER_FACILITY_PIKE: ShowPikeResultsWindow(); break; - case 4: - sub_81A2C94(gSpecialVar_0x8006); + case FRONTIER_FACILITY_FACTORY: + ShowFactoryResultsWindow(gSpecialVar_0x8006); break; - case 3: + case FRONTIER_FACILITY_ARENA: ShowArenaResultsWindow(); break; - case 6: - sub_81A2F38(); + case FRONTIER_FACILITY_PYRAMID: + ShowPyramidResultsWindow(); break; case 7: - sub_81A2FF8(); + ShowLinkContestResultsWindow(); break; } } @@ -254,6 +264,18 @@ extern const u8 gText_SetKOTourneyResults[]; extern const u8 gText_TimesVar1[]; extern const u8 gText_BattleSwapSingleResults[]; extern const u8 gText_BattleSwapDoubleResults[]; +extern const u8 gText_FloorsCleared[]; +extern const u8 gText_BattleQuestResults[]; +extern const u8 gText_LinkContestResults[]; +extern const u8 gText_4th[]; +extern const u8 gText_3rd[]; +extern const u8 gText_2nd[]; +extern const u8 gText_1st[]; +extern const u8 gText_Cool[]; +extern const u8 gText_Beauty[]; +extern const u8 gText_Cute[]; +extern const u8 gText_Smart[]; +extern const u8 gText_Tough[]; // Battle Tower. void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) @@ -604,7 +626,7 @@ void ShowArenaResultsWindow(void) } // Battle Factory. -void sub_81A2A28(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) +void FactoryPrintStreak(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) { AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); if (num1 > 9999) @@ -618,36 +640,36 @@ void sub_81A2A28(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x3, y, TEXT_SPEED_FF, NULL); } -void sub_81A2B04(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) +void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) { - u16 num1 = gSaveBlock2Ptr->frontier.field_DEA[battleMode][lvlMode]; - u16 num2 = gSaveBlock2Ptr->frontier.field_DFA[battleMode][lvlMode]; - sub_81A2A28(gText_Record, num1, num2, x1, x2, x3, y); + u16 num1 = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode]; + u16 num2 = gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode]; + FactoryPrintStreak(gText_Record, num1, num2, x1, x2, x3, y); } -u16 sub_81A2B70(u8 battleMode, u8 lvlMode) +u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode) { - u16 winStreak = gSaveBlock2Ptr->frontier.field_DE2[battleMode][lvlMode]; + u16 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; if (winStreak > 9999) return 9999; else return winStreak; } -u16 sub_81A2BA0(u8 battleMode, u8 lvlMode) +u16 FactoryGetRentsCount(u8 battleMode, u8 lvlMode) { - u16 rents = gSaveBlock2Ptr->frontier.field_DF2[battleMode][lvlMode]; + u16 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; if (rents > 9999) return 9999; else return rents; } -void sub_81A2BD0(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) +void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) { bool8 isCurrent; - u16 winStreak = sub_81A2B70(battleMode, lvlMode); - u16 rents = sub_81A2BA0(battleMode, lvlMode); + u16 winStreak = FactoryGetWinStreak(battleMode, lvlMode); + u16 rents = FactoryGetRentsCount(battleMode, lvlMode); switch (battleMode) { default: @@ -666,12 +688,12 @@ void sub_81A2BD0(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) } if (isCurrent == TRUE) - sub_81A2A28(gText_Current, winStreak, rents, x1, x2, x3, y); + FactoryPrintStreak(gText_Current, winStreak, rents, x1, x2, x3, y); else - sub_81A2A28(gText_Prev, winStreak, rents, x1, x2, x3, y); + FactoryPrintStreak(gText_Prev, winStreak, rents, x1, x2, x3, y); } -void sub_81A2C94(u8 battleMode) +void ShowFactoryResultsWindow(u8 battleMode) { gRecordsWindowId = AddWindow(&gUnknown_08611C74); NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); @@ -686,11 +708,419 @@ void sub_81A2C94(u8 battleMode) AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); - sub_81A2BD0(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49); - sub_81A2B04(battleMode, FRONTIER_LVL_50, 8, 64, 158, 65); - sub_81A2BD0(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 113); - sub_81A2B04(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 129); + FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49); + FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 65); + FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 113); + FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 129); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Pyramid. +void PyramidPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_FloorsCleared); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode]; + PyramidPrintStreak(gText_Record, num, x1, x2, y); +} + +u16 PyramidGetWinStreak(u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = PyramidGetWinStreak(lvlMode); + + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x2000); + else + isCurrent = sub_81A1C24(0x1000); + + if (isCurrent == TRUE) + PyramidPrintStreak(gText_Current, winStreak, x1, x2, y); + else + PyramidPrintStreak(gText_Prev, winStreak, x1, x2, y); +} + +void ShowPyramidResultsWindow(void) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults); + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 111, 49); + PyramidPrintRecordStreak(FRONTIER_LVL_50, 64, 111, 65); + PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 111, 97); + PyramidPrintRecordStreak(FRONTIER_LVL_OPEN, 64, 111, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Link contest. Why is it in this file? +void ShowLinkContestResultsWindow(void) +{ + const u8 *str; + s32 i, j; + s32 x; + + gRecordsWindowId = AddWindow(&gUnknown_08611C7C); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + + StringExpandPlaceholders(gStringVar4, gText_LinkContestResults); + x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, TEXT_SPEED_FF, NULL); + + str = gText_1st; + x = GetStringRightAlignXOffset(1, str, 0x26) + 50; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + str = gText_2nd; + x = GetStringRightAlignXOffset(1, str, 0x26) + 88; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + str = gText_3rd; + x = GetStringRightAlignXOffset(1, str, 0x26) + 126; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + str = gText_4th; + x = GetStringRightAlignXOffset(1, str, 0x26) + 164; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + x = 6; + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cool, x, 41, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Beauty, x, 57, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cute, x, 73, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Smart, x, 89, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Tough, x, 105, TEXT_SPEED_FF, NULL); + + for (i = 0; i < 5; i++) + { + for (j = 0; j < 4; j++) + { + ConvertIntToDecimalStringN(gStringVar4, gSaveBlock2Ptr->contestLinkResults[i][j], STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, (j * 38) + 64, (i * 16) + 41, TEXT_SPEED_FF, NULL); + } + } + PutWindowTilemap(gRecordsWindowId); CopyWindowToVram(gRecordsWindowId, 3); } +void sub_81A31FC(void) +{ + u8 text[32]; + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + if (battleMode == FRONTIER_MODE_LINK_MULTIS) + { + StringCopy(text, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name); + StripExtCtrlCodes(text); + StringCopy(gSaveBlock2Ptr->frontier.field_EE1[lvlMode], text); + WriteUnalignedWord(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); + } + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + switch (battleMode) + { + case FRONTIER_MODE_SINGLES: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1); + break; + case FRONTIER_MODE_DOUBLES: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2); + break; + case FRONTIER_MODE_MULTIS: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3); + break; + case FRONTIER_MODE_LINK_MULTIS: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4); + break; + } + } + } + break; + case FRONTIER_FACILITY_DOME: + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + if (battleMode == FRONTIER_MODE_SINGLES) + sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5); + else + sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6); + } + } + break; + case FRONTIER_FACILITY_PALACE: + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + if (battleMode == FRONTIER_MODE_SINGLES) + sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11); + else + sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12); + } + } + break; + case FRONTIER_FACILITY_ARENA: + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode]) + { + gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1 + && sub_80EE818()) + { + sub_80EE8C8(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10); + } + } + break; + case FRONTIER_FACILITY_FACTORY: + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + if (battleMode == FRONTIER_MODE_SINGLES) + sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7); + else + sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8); + } + } + break; + case FRONTIER_FACILITY_PIKE: + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode]) + { + gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1 + && sub_80EE818()) + { + sub_80EE8C8(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9); + } + } + break; + case FRONTIER_FACILITY_PYRAMID: + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode]) + { + gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1 + && sub_80EE818()) + { + sub_80EE8C8(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13); + } + } + break; + } +} + +void sub_81A35EC(void) +{ + VarGet(VAR_FRONTIER_FACILITY); // Unused return value. + gSpecialVar_Result = sub_81A3610(); +} + +extern const u8 gUnknown_08611550[][4]; + +u8 sub_81A3610(void) +{ + s32 ret = 0; + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u16 val = GetCurrentFacilityWinStreak(); + s32 r5 = val + gUnknown_08611550[facility][3]; + s32 symbolsCount; + + if (battleMode != FRONTIER_MODE_SINGLES) + return 0; + + symbolsCount = sub_81A3B30(facility); + switch (symbolsCount) + { + case 0: + case 1: + if (r5 == gUnknown_08611550[facility][symbolsCount]) + ret = symbolsCount + 1; + break; + case 2: + default: + if (r5 == gUnknown_08611550[facility][0]) + ret = 3; + else if (r5 == gUnknown_08611550[facility][1]) + ret = 4; + else if (r5 > gUnknown_08611550[facility][1] && (r5 - gUnknown_08611550[facility][1]) % gUnknown_08611550[facility][2] == 0) + ret = 4; + break; + } + + return ret; +} + +void CopyFrontierTrainerText(u8 whichText, u16 trainerId) +{ + switch (whichText) + { + case FRONTIER_BEFORE_TEXT: + if (trainerId == TRAINER_EREADER) + FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.greeting); + else if (trainerId == TRAINER_FRONTIER_BRAIN) + sub_81A51A8(0); + else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) + FrontierSpeechToString(gFacilityTrainers[trainerId].speechBefore); + else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) + FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].greeting); + else + CopyFriendsApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE); + break; + case FRONTIER_PLAYER_LOST_TEXT: + if (trainerId == TRAINER_EREADER) + { + FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerLost); + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + sub_81A51A8(0); + } + else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) + { + FrontierSpeechToString(gFacilityTrainers[trainerId].speechWin); + } + else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + FrontierSpeechToString(sub_81864E0()); + else + FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechWon); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + FrontierSpeechToString(sub_81864E0()); + else + FrontierSpeechToString(gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords); + } + break; + case FRONTIER_PLAYER_WON_TEXT: + if (trainerId == TRAINER_EREADER) + { + FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerWon); + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + sub_81A51A8(1); + } + else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) + { + FrontierSpeechToString(gFacilityTrainers[trainerId].speechLose); + } + else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + FrontierSpeechToString(sub_81864E0()); + else + FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechLost); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + { + trainerId = sub_81864A8(); + FrontierSpeechToString(gApprentices[trainerId].easyChatWords); + } + else + { + trainerId = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id; + FrontierSpeechToString(gApprentices[trainerId].easyChatWords); + } + } + break; + } +} + +void sub_81A3908(void) +{ + s32 battleMode, lvlMode; + + gSaveBlock2Ptr->frontier.field_CDC = 0; + for (battleMode = 0; battleMode < 4; battleMode++) + { + for (lvlMode = 0; lvlMode < 2; lvlMode++) + { + gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0; + if (battleMode < FRONTIER_MODE_MULTIS) + { + gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0; + } + if (battleMode == FRONTIER_MODE_SINGLES) + { + gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0; + gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0; + gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] = 0; + } + } + } + if (gSaveBlock2Ptr->frontier.field_CA8 != 0) + gSaveBlock2Ptr->frontier.field_CA8 = 1; +} + +u32 GetCurrentFacilityWinStreak(void) +{ + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + return gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_DOME: + return gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_PALACE: + return gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_ARENA: + return gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; + case FRONTIER_FACILITY_FACTORY: + return gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_PIKE: + return gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + case FRONTIER_FACILITY_PYRAMID: + return gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; + default: + return 0; + } +} diff --git a/src/battle_message.c b/src/battle_message.c index 99ab8bbd6..147d0295f 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -2579,7 +2579,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) case B_TXT_TRAINER1_LOSE_TEXT: // trainerA lose text if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_LOSE_TEXT, gTrainerBattleOpponent_A); + CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, gTrainerBattleOpponent_A); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) @@ -2595,7 +2595,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) case B_TXT_TRAINER1_WIN_TEXT: // trainerA win text if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_WIN_TEXT, gTrainerBattleOpponent_A); + CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, gTrainerBattleOpponent_A); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) @@ -2676,7 +2676,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) case B_TXT_TRAINER2_LOSE_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_LOSE_TEXT, gTrainerBattleOpponent_B); + CopyFrontierTrainerText(FRONTIER_PLAYER_WON_TEXT, gTrainerBattleOpponent_B); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) @@ -2692,7 +2692,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) case B_TXT_TRAINER2_WIN_TEXT: if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER) { - CopyFrontierTrainerText(FRONTIER_WIN_TEXT, gTrainerBattleOpponent_B); + CopyFrontierTrainerText(FRONTIER_PLAYER_LOST_TEXT, gTrainerBattleOpponent_B); toCpy = gStringVar4; } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_HILL) diff --git a/src/battle_tower.c b/src/battle_tower.c index 4199129b2..0f6e18169 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -33,7 +33,6 @@ extern u16 gUnknown_03006298[]; extern void sub_81A3ACC(void); extern void CreateFrontierBrainPokemon(void); extern void sub_81A6CD0(void); -extern u16 sub_81A39C4(void); extern void SetFrontierBrainTrainerGfxId(void); extern u8 GetFrontierBrainTrainerPicIndex(void); extern u8 GetFrontierBrainTrainerClass(void); @@ -364,7 +363,8 @@ static void ChooseNextBattleTowerTrainer(void) { u16 id; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u32 r5 = sub_81A39C4() / 7; + u16 winStreak = GetCurrentFacilityWinStreak(); + u32 challengeNum = winStreak / 7; SetFacilityPtrsGetLevel(); if (battleMode == FRONTIER_MODE_MULTIS || battleMode == FRONTIER_MODE_LINK_MULTIS) @@ -385,7 +385,7 @@ static void ChooseNextBattleTowerTrainer(void) s32 i; while (1) { - id = sub_8162548(r5, gSaveBlock2Ptr->frontier.curChallengeBattleNum); + id = sub_8162548(challengeNum, gSaveBlock2Ptr->frontier.curChallengeBattleNum); // Ensure trainer wasn't previously fought in this challenge. for (i = 0; i < gSaveBlock2Ptr->frontier.curChallengeBattleNum; i++) @@ -1516,8 +1516,8 @@ static void sub_8163EE4(void) for (i = 0; i < 6; i++) { playerRecord->greeting[i] = gSaveBlock1Ptr->unk2BBC[i]; - playerRecord->unk1C[i] = gSaveBlock1Ptr->unk2BC8[i]; - playerRecord->unk28[i] = gSaveBlock1Ptr->unk2BD4[i]; + playerRecord->speechWon[i] = gSaveBlock1Ptr->unk2BC8[i]; + playerRecord->speechLost[i] = gSaveBlock1Ptr->unk2BD4[i]; } for (i = 0; i < 4; i++) @@ -1795,7 +1795,8 @@ static void sub_8164828(void) s32 i, j, arrId; s32 monPoolId; s32 level = SetFacilityPtrsGetLevel(); - s32 challengeNum = sub_81A39C4() / 7; + u16 winStreak = GetCurrentFacilityWinStreak(); + s32 challengeNum = winStreak / 7; s32 k = gSpecialVar_LastTalked - 2; s32 trainerId = gSaveBlock2Ptr->frontier.field_CB4[k]; @@ -2425,9 +2426,9 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em for (i = 0; i < 6; i++) dst->greeting[i] = src->greeting[i]; for (i = 0; i < 6; i++) - dst->unk1C[i] = gUnknown_085DFA46[i]; + dst->speechWon[i] = gUnknown_085DFA46[i]; for (i = 0; i < 6; i++) - dst->unk28[i] = gUnknown_085DFA52[i]; + dst->speechLost[i] = gUnknown_085DFA52[i]; for (i = 0; i < 3; i++) dst->party[i] = src->party[i]; diff --git a/src/overworld.c b/src/overworld.c index 8d73a6680..6fc880a54 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -52,6 +52,7 @@ #include "tv.h" #include "scanline_effect.h" #include "wild_encounter.h" +#include "battle_frontier_2.h" #include "constants/abilities.h" #include "constants/map_types.h" #include "constants/maps.h" @@ -136,7 +137,6 @@ extern void sub_8087D74(void); extern void battle_pyramid_map_load_related(u8); extern void sub_80B00E8(u8); extern void sub_80E9238(u8); -extern void sub_81A3908(void); extern void sub_81AA2F8(void); extern void sub_8195E10(void); extern void sub_80EDB44(void); diff --git a/src/tv.c b/src/tv.c index 897f9950b..faa2767b0 100644 --- a/src/tv.c +++ b/src/tv.c @@ -2500,7 +2500,7 @@ bool8 sub_80EE818(void) return TRUE; } -void sub_80EE8C8(u16 winStreak, u8 facility) +void sub_80EE8C8(u16 winStreak, u8 facilityAndMode) { TVShow *show; @@ -2512,8 +2512,8 @@ void sub_80EE8C8(u16 winStreak, u8 facility) show->frontier.active = FALSE; StringCopy(show->frontier.playerName, gSaveBlock2Ptr->playerName); show->frontier.winStreak = winStreak; - show->frontier.facility = facility; - switch (facility) + show->frontier.facility = facilityAndMode; + switch (facilityAndMode) { case 1: case 5: -- cgit v1.2.3 From 98d8dbfd8a2e6759a38d70573256c22fb386e07d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 28 Oct 2018 00:50:06 +0200 Subject: Up to sub_81a443c --- src/battle_frontier_2.c | 370 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 370 insertions(+) (limited to 'src') diff --git a/src/battle_frontier_2.c b/src/battle_frontier_2.c index 693a1180f..eefa95ab0 100644 --- a/src/battle_frontier_2.c +++ b/src/battle_frontier_2.c @@ -19,9 +19,13 @@ #include "link.h" #include "tv.h" #include "apprentice.h" +#include "pokedex.h" #include "recorded_battle.h" +#include "data2.h" #include "constants/battle_frontier.h" #include "constants/trainers.h" +#include "constants/species.h" +#include "constants/game_stat.h" extern u8 gUnknown_0203CEF8[]; @@ -1124,3 +1128,369 @@ u32 GetCurrentFacilityWinStreak(void) return 0; } } + +void sub_81A3ACC(void) +{ + s32 i; + + for (i = 0; i < 20; i++) + gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF; +} + +void sub_81A3B00(void) +{ + if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + gSpecialVar_Result = TRUE; + else + gSpecialVar_Result = FALSE; +} + +u8 sub_81A3B30(u8 facility) +{ + return FlagGet(FLAG_SYS_TOWER_SILVER + facility * 2) + + FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2); +} + +extern const u8 gUnknown_086118B4[29][7][4]; + +void sub_81A3B64(void) +{ + s32 challengeNum = 0; + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 points; + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; + break; + case FRONTIER_FACILITY_DOME: + challengeNum = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; + break; + case FRONTIER_FACILITY_PALACE: + challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / 7; + break; + case FRONTIER_FACILITY_ARENA: + challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / 7; + break; + case FRONTIER_FACILITY_FACTORY: + challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + break; + case FRONTIER_FACILITY_PIKE: + challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; + break; + case FRONTIER_FACILITY_PYRAMID: + challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7; + break; + } + + if (challengeNum != 0) + challengeNum--; + if (challengeNum > ARRAY_COUNT(gUnknown_086118B4)) + challengeNum = ARRAY_COUNT(gUnknown_086118B4); + + points = gUnknown_086118B4[challengeNum][facility][battleMode]; + if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + points += 10; + gSaveBlock2Ptr->frontier.battlePoints += points; + ConvertIntToDecimalStringN(gStringVar1, points, STR_CONV_MODE_LEFT_ALIGN, 2); + if (gSaveBlock2Ptr->frontier.battlePoints > 9999) + gSaveBlock2Ptr->frontier.battlePoints = 9999; + + points = gSaveBlock2Ptr->frontier.field_EBA; + points += gUnknown_086118B4[challengeNum][facility][battleMode]; + sub_80EED60(gUnknown_086118B4[challengeNum][facility][battleMode]); + if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + { + points += 10; + sub_80EED60(10); + } + if (points > 0xFFFF) + points = 0xFFFF; + gSaveBlock2Ptr->frontier.field_EBA = points; +} + +void sub_81A3D30(void) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + gSpecialVar_Result = sub_81A3B30(facility); +} + +void sub_81A3D58(void) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + if (sub_81A3B30(facility) == 0) + FlagSet(FLAG_SYS_TOWER_SILVER + facility * 2); + else + FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2); +} + +void sub_81A3DA0(void) +{ + if (gBattleTypeFlags & gSpecialVar_0x8005) + gSpecialVar_Result = TRUE; + else + gSpecialVar_Result = FALSE; +} + +extern const u8 gText_SpaceAndSpace[]; +extern const u8 gText_CommaSpace[]; +extern const u8 gText_NewLine[]; +extern const u8 gText_ScrollTextUp[]; +extern const u8 gText_Space2[]; +extern const u8 gText_Are[]; +extern const u8 gText_Are2[]; + +u8 sub_81A3DD0(u16 species, u8 arg1, s32 arg2) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + arg1++; + switch (arg1) + { + case 1: + case 3: + case 5: + case 7: + case 9: + case 11: + if (arg2 == arg1) + StringAppend(gStringVar1, gText_SpaceAndSpace); + else if (arg2 > arg1) + StringAppend(gStringVar1, gText_CommaSpace); + break; + case 2: + if (arg1 == arg2) + StringAppend(gStringVar1, gText_SpaceAndSpace); + else + StringAppend(gStringVar1, gText_CommaSpace); + StringAppend(gStringVar1, gText_NewLine); + break; + default: + if (arg1 == arg2) + StringAppend(gStringVar1, gText_SpaceAndSpace); + else + StringAppend(gStringVar1, gText_CommaSpace); + StringAppend(gStringVar1, gText_ScrollTextUp); + break; + } + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return arg1; +} + +extern const u16 gUnknown_08611C9A[]; + +void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monLevel, u16 *speciesArray, u16 *itemsArray, u8 *count) +{ + s32 i = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + for (i = 0; gUnknown_08611C9A[i] != 0xFFFF && gUnknown_08611C9A[i] != species; i++) + ; + + if (gUnknown_08611C9A[i] != 0xFFFF) + return; + if (lvlMode == FRONTIER_LVL_50 && monLevel > 50) + return; + + for (i = 0; i < *count && speciesArray[i] != species; i++) + ; + if (i != *count) + return; + + if (heldItem != 0) + { + for (i = 0; i < *count && itemsArray[i] != heldItem; i++) + ; + if (i != *count) + return; + } + + speciesArray[*count] = species; + itemsArray[*count] = heldItem; + (*count)++; +} + +void sub_81A3FD4(void) +{ + u16 speciesArray[6]; + u16 itemArray[6]; + s32 monId = 0; + s32 toChoose = 0; + u8 count = 0; + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 monIdLooper; + + switch (battleMode) + { + case FRONTIER_MODE_SINGLES: + toChoose = 3; + break; + case FRONTIER_MODE_MULTIS: + case FRONTIER_MODE_LINK_MULTIS: + toChoose = 2; + break; + case FRONTIER_MODE_DOUBLES: + if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_TOWER) + toChoose = 4; + else + toChoose = 3; + break; + } + + monIdLooper = 0; + do + { + monId = monIdLooper; + count = 0; + do + { + u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + u16 heldItem = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); + u8 level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + u16 hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); + if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_PYRAMID) + { + if (heldItem == 0) + AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); + } + else + { + AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); + } + monId++; + if (monId >= PARTY_SIZE) + monId = 0; + } while (monId != monIdLooper); + + monIdLooper++; + } while (monIdLooper < PARTY_SIZE && count < toChoose); + + if (count < toChoose) + { + s32 i; + s32 caughtBannedMons = 0; + s32 species = gUnknown_08611C9A[0]; + for (i = 0; species != 0xFFFF; i++, species = gUnknown_08611C9A[i]) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + caughtBannedMons++; + } + gStringVar1[0] = EOS; + gSpecialVar_0x8004 = 1; + count = 0; + for (i = 0; gUnknown_08611C9A[i] != 0xFFFF; i++) + count = sub_81A3DD0(gUnknown_08611C9A[i], count, caughtBannedMons); + + if (count == 0) + { + StringAppend(gStringVar1, gText_Space2); + StringAppend(gStringVar1, gText_Are); + } + else + { + if (count & 1) + StringAppend(gStringVar1, gText_ScrollTextUp); + else + StringAppend(gStringVar1, gText_Space2); + StringAppend(gStringVar1, gText_Are2); + } + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_Result; + } +} + +void sub_81A4224(void) +{ + ValidateEReaderTrainer(); +} + +void sub_81A4230(void) +{ + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < 9999) + { + gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]++; + if (battleMode == FRONTIER_MODE_SINGLES) + { + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]); + gSaveBlock2Ptr->frontier.field_D02 = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + } + } + break; + case FRONTIER_FACILITY_DOME: + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++; + if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++; + break; + case FRONTIER_FACILITY_PALACE: + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; + break; + case FRONTIER_FACILITY_ARENA: + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < 9999) + gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]++; + break; + case FRONTIER_FACILITY_FACTORY: + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]++; + break; + case FRONTIER_FACILITY_PIKE: + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < 9999) + gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]++; + break; + case FRONTIER_FACILITY_PYRAMID: + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < 9999) + gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]++; + break; + } +} + +void sub_81A43A8(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0) + { + u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HELD_ITEM, NULL); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); + } + } +} + +void sub_81A4410(void) +{ + gSpecialVar_Result = MoveRecordedBattleToSaveData(); + gSaveBlock2Ptr->frontier.field_CA9_b = 1; +} + +void sub_81A443C(void) +{ + switch (gSpecialVar_0x8005) + { + case 0: + GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); + break; + case 1: + GetFrontierTrainerName(gStringVar2, gTrainerBattleOpponent_A); + break; + } +} -- cgit v1.2.3 From 3a9eeef84447c222a4638546d014e12b0098fe51 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 28 Oct 2018 21:11:53 +0100 Subject: Frontier, finish ranking hall --- src/battle_frontier_2.c | 1496 ------------------------------------------ src/frontier_util.c | 1658 +++++++++++++++++++++++++++++++++++++++++++++++ src/record_mixing.c | 200 ++---- src/strings.c | 4 +- 4 files changed, 1723 insertions(+), 1635 deletions(-) delete mode 100644 src/battle_frontier_2.c create mode 100644 src/frontier_util.c (limited to 'src') diff --git a/src/battle_frontier_2.c b/src/battle_frontier_2.c deleted file mode 100644 index eefa95ab0..000000000 --- a/src/battle_frontier_2.c +++ /dev/null @@ -1,1496 +0,0 @@ -#include "global.h" -#include "battle_frontier_2.h" -#include "event_data.h" -#include "battle_setup.h" -#include "overworld.h" -#include "random.h" -#include "battle_tower.h" -#include "field_specials.h" -#include "battle.h" -#include "script_pokemon_util_80F87D8.h" -#include "main.h" -#include "window.h" -#include "menu.h" -#include "text.h" -#include "battle_records.h" -#include "international_string_util.h" -#include "string_util.h" -#include "new_game.h" -#include "link.h" -#include "tv.h" -#include "apprentice.h" -#include "pokedex.h" -#include "recorded_battle.h" -#include "data2.h" -#include "constants/battle_frontier.h" -#include "constants/trainers.h" -#include "constants/species.h" -#include "constants/game_stat.h" - -extern u8 gUnknown_0203CEF8[]; - -extern void (* const gUnknown_08611C18[])(void); -extern const u16 gUnknown_08611BFC[][2]; -extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; -extern const struct WindowTemplate gUnknown_08611C74; -extern const struct WindowTemplate gUnknown_08611C7C; - -extern void sub_81B8558(void); - -// This file's functions. -u8 sub_81A3B30(u8 facility); -void ShowTowerResultsWindow(u8); -void ShowDomeResultsWindow(u8); -void ShowPalaceResultsWindow(u8); -void ShowPikeResultsWindow(void); -void ShowFactoryResultsWindow(u8); -void ShowArenaResultsWindow(void); -void ShowPyramidResultsWindow(void); -void ShowLinkContestResultsWindow(void); -u8 sub_81A3610(void); -void sub_81A51A8(u8); - -void sub_81A1780(void) -{ - gUnknown_08611C18[gSpecialVar_0x8004](); -} - -void sub_81A17A0(void) -{ - VarSet(VAR_TEMP_0, 0xFF); - switch (gSaveBlock2Ptr->frontier.field_CA8) - { - case 0: - break; - case 1: - sub_813A878(0); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); - break; - case 4: - sub_813A878(0); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); - break; - case 3: - sub_813A878(1); - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); - break; - case 2: - VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); - break; - } -} - -void sub_81A1830(void) -{ - u8 facility = VarGet(VAR_FRONTIER_FACILITY); - u8 currSymbol = sub_81A3B30(facility); - if (currSymbol == 2) - currSymbol = 1; - - switch (gSpecialVar_0x8005) - { - case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA8; - break; - case 1: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.lvlMode; - break; - case 2: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.curChallengeBattleNum; - break; - case 3: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_a; - break; - case 5: - gSpecialVar_Result = gBattleOutcome; - gBattleOutcome = 0; - break; - case 6: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_b; - break; - case 7: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D00 & gUnknown_08611BFC[facility][currSymbol]; - break; - } -} - -void sub_81A1968(void) -{ - s32 i; - u8 facility = VarGet(VAR_FRONTIER_FACILITY); - u8 currSymbol = sub_81A3B30(facility); - if (currSymbol == 2) - currSymbol = 1; - - switch (gSpecialVar_0x8005) - { - case 0: - gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8006; - break; - case 1: - gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_0x8006; - break; - case 2: - gSaveBlock2Ptr->frontier.curChallengeBattleNum = gSpecialVar_0x8006; - break; - case 3: - gSaveBlock2Ptr->frontier.field_CA9_a = gSpecialVar_0x8006; - break; - case 4: - for (i = 0; i < 4; i++) - gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gUnknown_0203CEF8[i]; - break; - case 6: - gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006; - break; - case 7: - gSaveBlock2Ptr->frontier.field_D00 |= gUnknown_08611BFC[facility][currSymbol]; - break; - } -} - -void sub_81A1AD4(void) -{ - s32 i; - - sub_81B8558(); - for (i = 0; i < gSpecialVar_0x8005; i++) - gUnknown_0203CEF8[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i]; - ReducePlayerPartyToThree(); -} - -void sub_81A1B1C(void) -{ - DoSoftReset(); -} - -void sub_81A1B28(void) -{ - gFacilityTrainers = gBattleFrontierTrainers; -} - -void sub_81A1B38(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; - if (monId < PARTY_SIZE) - gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1] = gPlayerParty[i]; - } -} - -void sub_81A1B98(void) -{ - if (gSpecialVar_0x8006 > 3) - gSpecialVar_0x8006 = 0; - switch (gSpecialVar_0x8005) - { - case FRONTIER_FACILITY_TOWER: - ShowTowerResultsWindow(gSpecialVar_0x8006); - break; - case FRONTIER_FACILITY_DOME: - ShowDomeResultsWindow(gSpecialVar_0x8006); - break; - case FRONTIER_FACILITY_PALACE: - ShowPalaceResultsWindow(gSpecialVar_0x8006); - break; - case FRONTIER_FACILITY_PIKE: - ShowPikeResultsWindow(); - break; - case FRONTIER_FACILITY_FACTORY: - ShowFactoryResultsWindow(gSpecialVar_0x8006); - break; - case FRONTIER_FACILITY_ARENA: - ShowArenaResultsWindow(); - break; - case FRONTIER_FACILITY_PYRAMID: - ShowPyramidResultsWindow(); - break; - case 7: - ShowLinkContestResultsWindow(); - break; - } -} - -bool8 sub_81A1C24(u32 flags) -{ - if (gSaveBlock2Ptr->frontier.field_CDC & flags) - return TRUE; - else - return FALSE; -} - -void sub_81A1C4C(const u8 *str, s32 y) -{ - s32 x = GetStringCenterAlignXOffset(1, str, 0xE0); - y = (y * 8) + 1; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, y, TEXT_SPEED_FF, NULL); -} - -void PrintHyphens(s32 y) -{ - s32 i; - u8 text[37]; - - for (i = 0; i < 36; i++) - text[i] = CHAR_HYPHEN; - text[i] = EOS; - - y = (y * 8) + 1; - AddTextPrinterParameterized(gRecordsWindowId, 1, text, 4, y, TEXT_SPEED_FF, NULL); -} - -extern const u8 gText_WinStreak[]; -extern const u8 gText_Record[]; -extern const u8 gText_Current[]; -extern const u8 gText_RoomsCleared[]; -extern const u8 gText_Prev[]; -extern const u8 gText_SingleBattleRoomResults[]; -extern const u8 gText_DoubleBattleRoomResults[]; -extern const u8 gText_MultiBattleRoomResults[]; -extern const u8 gText_LinkMultiBattleRoomResults[]; -extern const u8 gText_Lv502[]; -extern const u8 gText_OpenLv[]; -extern const u8 gText_RentalSwap[]; -extern const u8 gText_ClearStreak[]; -extern const u8 gText_Total[]; -extern const u8 gText_Championships[]; -extern const u8 gText_SingleBattleTourneyResults[]; -extern const u8 gText_DoubleBattleTourneyResults[]; -extern const u8 gText_SingleBattleHallResults[]; -extern const u8 gText_DoubleBattleHallResults[]; -extern const u8 gText_BattleChoiceResults[]; -extern const u8 gText_TimesCleared[]; -extern const u8 gText_KOsInARow[]; -extern const u8 gText_SetKOTourneyResults[]; -extern const u8 gText_TimesVar1[]; -extern const u8 gText_BattleSwapSingleResults[]; -extern const u8 gText_BattleSwapDoubleResults[]; -extern const u8 gText_FloorsCleared[]; -extern const u8 gText_BattleQuestResults[]; -extern const u8 gText_LinkContestResults[]; -extern const u8 gText_4th[]; -extern const u8 gText_3rd[]; -extern const u8 gText_2nd[]; -extern const u8 gText_1st[]; -extern const u8 gText_Cool[]; -extern const u8 gText_Beauty[]; -extern const u8 gText_Cute[]; -extern const u8 gText_Smart[]; -extern const u8 gText_Tough[]; - -// Battle Tower. -void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) -{ - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; - ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, gText_WinStreak); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); -} - -void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - u16 num = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode]; - TowerPrintStreak(gText_Record, num, x1, x2, y); -} - -u16 TowerGetWinStreak(u8 battleMode, u8 lvlMode) -{ - u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; - else - return winStreak; -} - -void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - bool8 isCurrent; - u16 winStreak = TowerGetWinStreak(battleMode, lvlMode); - switch (battleMode) - { - default: - case FRONTIER_MODE_SINGLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(2); - else - isCurrent = sub_81A1C24(1); - break; - case FRONTIER_MODE_DOUBLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x8000); - else - isCurrent = sub_81A1C24(0x4000); - break; - case FRONTIER_MODE_MULTIS: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x20000); - else - isCurrent = sub_81A1C24(0x10000); - break; - case FRONTIER_MODE_LINK_MULTIS: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x80000); - else - isCurrent = sub_81A1C24(0x40000); - break; - } - - if (isCurrent == TRUE) - TowerPrintStreak(gText_Current, winStreak, x1, x2, y); - else - TowerPrintStreak(gText_Prev, winStreak, x1, x2, y); -} - -void ShowTowerResultsWindow(u8 battleMode) -{ - gRecordsWindowId = AddWindow(&gUnknown_08611C74); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - if (battleMode == FRONTIER_MODE_SINGLES) - StringExpandPlaceholders(gStringVar4, gText_SingleBattleRoomResults); - else if (battleMode == FRONTIER_MODE_DOUBLES) - StringExpandPlaceholders(gStringVar4, gText_DoubleBattleRoomResults); - else if (battleMode == FRONTIER_MODE_MULTIS) - StringExpandPlaceholders(gStringVar4, gText_MultiBattleRoomResults); - else - StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults); - - sub_81A1C4C(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); - PrintHyphens(10); - TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 132, 49); - TowerPrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 132, 65); - TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 97); - TowerPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 113); - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -// Battle Dome. -u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode) -{ - u16 winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; - else - return winStreak; -} - -void PrintTwoStrings(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) -{ - AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); - ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, str2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); -} - -void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - bool8 isCurrent; - u16 winStreak = DomeGetWinStreak(battleMode, lvlMode); - switch (battleMode) - { - default: - case FRONTIER_MODE_SINGLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(8); - else - isCurrent = sub_81A1C24(4); - break; - case FRONTIER_MODE_DOUBLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x200000); - else - isCurrent = sub_81A1C24(0x100000); - break; - } - - if (isCurrent == TRUE) - PrintTwoStrings(gText_Current, gText_ClearStreak, winStreak, x1, x2, y); - else - PrintTwoStrings(gText_Prev, gText_ClearStreak, winStreak, x1, x2, y); -} - -void ShowDomeResultsWindow(u8 battleMode) -{ - gRecordsWindowId = AddWindow(&gUnknown_08611C74); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - if (battleMode == FRONTIER_MODE_SINGLES) - StringExpandPlaceholders(gStringVar4, gText_SingleBattleTourneyResults); - else - StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults); - - sub_81A1C4C(gStringVar4, 0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); - PrintHyphens(10); - DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 64, 121, 33); - PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_50], 64, 121, 49); - PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_50], 64, 112, 65); - DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 64, 121, 97); - PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_OPEN], 64, 121, 113); - PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_OPEN], 64, 112, 129); - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -// Battle Palace. -void PalacePrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) -{ - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; - ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, gText_WinStreak); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); -} - -void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - u16 num = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]; - PalacePrintStreak(gText_Record, num, x1, x2, y); -} - -u16 PalaceGetWinStreak(u8 battleMode, u8 lvlMode) -{ - u16 winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; - else - return winStreak; -} - -void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - bool8 isCurrent; - u16 winStreak = PalaceGetWinStreak(battleMode, lvlMode); - switch (battleMode) - { - default: - case FRONTIER_MODE_SINGLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x20); - else - isCurrent = sub_81A1C24(0x10); - break; - case FRONTIER_MODE_DOUBLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x800000); - else - isCurrent = sub_81A1C24(0x400000); - } - - if (isCurrent == TRUE) - PalacePrintStreak(gText_Current, winStreak, x1, x2, y); - else - PalacePrintStreak(gText_Prev, winStreak, x1, x2, y); -} - -void ShowPalaceResultsWindow(u8 battleMode) -{ - gRecordsWindowId = AddWindow(&gUnknown_08611C74); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - if (battleMode == FRONTIER_MODE_SINGLES) - StringExpandPlaceholders(gStringVar4, gText_SingleBattleHallResults); - else - StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults); - - sub_81A1C4C(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); - PrintHyphens(10); - PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 131, 49); - PalacePrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 131, 65); - PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 97); - PalacePrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 113); - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -// Battle Pike. -u16 PikeGetWinStreak(u8 lvlMode) -{ - u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; - if (winStreak > 9999) - return 9999; - else - return winStreak; -} - -void PikePrintCleared(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) -{ - AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); - ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, str2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); -} - -void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - bool8 isCurrent; - u16 winStreak = PikeGetWinStreak(lvlMode); - - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x800); - else - isCurrent = sub_81A1C24(0x400); - - if (isCurrent == TRUE) - PrintTwoStrings(gText_Current, gText_RoomsCleared, winStreak, x1, x2, y); - else - PrintTwoStrings(gText_Prev, gText_RoomsCleared, winStreak, x1, x2, y); -} - -void ShowPikeResultsWindow(void) -{ - gRecordsWindowId = AddWindow(&gUnknown_08611C74); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults); - sub_81A1C4C(gStringVar4, 0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); - PrintHyphens(10); - PikePrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 114, 33); - PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_50], 64, 114, 49); - PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_50], 64, 114, 65); - PikePrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 114, 97); - PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_OPEN], 64, 114, 113); - PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_OPEN], 64, 114, 129); - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -// Battle Arena. -void ArenaPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) -{ - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; - ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, gText_KOsInARow); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); -} - -void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - u16 num = gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode]; - ArenaPrintStreak(gText_Record, num, x1, x2, y); -} - -u16 ArenaGetWinStreak(u8 lvlMode) -{ - u16 winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; - if (winStreak > 9999) - return 9999; - else - return winStreak; -} - -void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - bool8 isCurrent; - u16 winStreak = ArenaGetWinStreak(lvlMode); - - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x80); - else - isCurrent = sub_81A1C24(0x40); - - if (isCurrent == TRUE) - ArenaPrintStreak(gText_Current, winStreak, x1, x2, y); - else - ArenaPrintStreak(gText_Prev, winStreak, x1, x2, y); -} - -void ShowArenaResultsWindow(void) -{ - gRecordsWindowId = AddWindow(&gUnknown_08611C74); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - PrintHyphens(10); - StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults); - sub_81A1C4C(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); - ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 72, 126, 49); - ArenaPrintRecordStreak(FRONTIER_LVL_50, 72, 126, 65); - ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 72, 126, 97); - ArenaPrintRecordStreak(FRONTIER_LVL_OPEN, 72, 126, 113); - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -// Battle Factory. -void FactoryPrintStreak(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) -{ - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num1 > 9999) - num1 = 9999; - ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, gText_WinStreak); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); - - ConvertIntToDecimalStringN(gStringVar1, num2, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, gText_TimesVar1); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x3, y, TEXT_SPEED_FF, NULL); -} - -void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) -{ - u16 num1 = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode]; - u16 num2 = gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode]; - FactoryPrintStreak(gText_Record, num1, num2, x1, x2, x3, y); -} - -u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode) -{ - u16 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; - if (winStreak > 9999) - return 9999; - else - return winStreak; -} - -u16 FactoryGetRentsCount(u8 battleMode, u8 lvlMode) -{ - u16 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; - if (rents > 9999) - return 9999; - else - return rents; -} - -void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) -{ - bool8 isCurrent; - u16 winStreak = FactoryGetWinStreak(battleMode, lvlMode); - u16 rents = FactoryGetRentsCount(battleMode, lvlMode); - switch (battleMode) - { - default: - case FRONTIER_MODE_SINGLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x200); - else - isCurrent = sub_81A1C24(0x100); - break; - case FRONTIER_MODE_DOUBLES: - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x2000000); - else - isCurrent = sub_81A1C24(0x1000000); - break; - } - - if (isCurrent == TRUE) - FactoryPrintStreak(gText_Current, winStreak, rents, x1, x2, x3, y); - else - FactoryPrintStreak(gText_Prev, winStreak, rents, x1, x2, x3, y); -} - -void ShowFactoryResultsWindow(u8 battleMode) -{ - gRecordsWindowId = AddWindow(&gUnknown_08611C74); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - if (battleMode == FRONTIER_MODE_SINGLES) - StringExpandPlaceholders(gStringVar4, gText_BattleSwapSingleResults); - else - StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults); - - sub_81A1C4C(gStringVar4, 0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); - PrintHyphens(10); - FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49); - FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 65); - FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 113); - FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 129); - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -// Battle Pyramid. -void PyramidPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) -{ - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); - if (num > 9999) - num = 9999; - ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); - StringExpandPlaceholders(gStringVar4, gText_FloorsCleared); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); -} - -void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - u16 num = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode]; - PyramidPrintStreak(gText_Record, num, x1, x2, y); -} - -u16 PyramidGetWinStreak(u8 lvlMode) -{ - u16 winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; - if (winStreak > 9999) - return 9999; - else - return winStreak; -} - -void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) -{ - bool8 isCurrent; - u16 winStreak = PyramidGetWinStreak(lvlMode); - - if (lvlMode != FRONTIER_LVL_50) - isCurrent = sub_81A1C24(0x2000); - else - isCurrent = sub_81A1C24(0x1000); - - if (isCurrent == TRUE) - PyramidPrintStreak(gText_Current, winStreak, x1, x2, y); - else - PyramidPrintStreak(gText_Prev, winStreak, x1, x2, y); -} - -void ShowPyramidResultsWindow(void) -{ - gRecordsWindowId = AddWindow(&gUnknown_08611C74); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults); - sub_81A1C4C(gStringVar4, 2); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 49, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); - PrintHyphens(10); - PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 111, 49); - PyramidPrintRecordStreak(FRONTIER_LVL_50, 64, 111, 65); - PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 111, 97); - PyramidPrintRecordStreak(FRONTIER_LVL_OPEN, 64, 111, 113); - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -// Link contest. Why is it in this file? -void ShowLinkContestResultsWindow(void) -{ - const u8 *str; - s32 i, j; - s32 x; - - gRecordsWindowId = AddWindow(&gUnknown_08611C7C); - NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); - FillWindowPixelBuffer(gRecordsWindowId, 0x11); - - StringExpandPlaceholders(gStringVar4, gText_LinkContestResults); - x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, TEXT_SPEED_FF, NULL); - - str = gText_1st; - x = GetStringRightAlignXOffset(1, str, 0x26) + 50; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); - - str = gText_2nd; - x = GetStringRightAlignXOffset(1, str, 0x26) + 88; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); - - str = gText_3rd; - x = GetStringRightAlignXOffset(1, str, 0x26) + 126; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); - - str = gText_4th; - x = GetStringRightAlignXOffset(1, str, 0x26) + 164; - AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); - - x = 6; - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cool, x, 41, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Beauty, x, 57, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cute, x, 73, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Smart, x, 89, TEXT_SPEED_FF, NULL); - AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Tough, x, 105, TEXT_SPEED_FF, NULL); - - for (i = 0; i < 5; i++) - { - for (j = 0; j < 4; j++) - { - ConvertIntToDecimalStringN(gStringVar4, gSaveBlock2Ptr->contestLinkResults[i][j], STR_CONV_MODE_RIGHT_ALIGN, 4); - AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, (j * 38) + 64, (i * 16) + 41, TEXT_SPEED_FF, NULL); - } - } - - PutWindowTilemap(gRecordsWindowId); - CopyWindowToVram(gRecordsWindowId, 3); -} - -void sub_81A31FC(void) -{ - u8 text[32]; - s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - s32 facility = VarGet(VAR_FRONTIER_FACILITY); - s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - - switch (facility) - { - case FRONTIER_FACILITY_TOWER: - if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode]) - { - gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; - if (battleMode == FRONTIER_MODE_LINK_MULTIS) - { - StringCopy(text, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name); - StripExtCtrlCodes(text); - StringCopy(gSaveBlock2Ptr->frontier.field_EE1[lvlMode], text); - WriteUnalignedWord(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); - } - if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) - { - switch (battleMode) - { - case FRONTIER_MODE_SINGLES: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1); - break; - case FRONTIER_MODE_DOUBLES: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2); - break; - case FRONTIER_MODE_MULTIS: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3); - break; - case FRONTIER_MODE_LINK_MULTIS: - sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4); - break; - } - } - } - break; - case FRONTIER_FACILITY_DOME: - if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode]) - { - gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; - if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) - { - if (battleMode == FRONTIER_MODE_SINGLES) - sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5); - else - sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6); - } - } - break; - case FRONTIER_FACILITY_PALACE: - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]) - { - gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) - { - if (battleMode == FRONTIER_MODE_SINGLES) - sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11); - else - sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12); - } - } - break; - case FRONTIER_FACILITY_ARENA: - if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode]) - { - gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; - if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1 - && sub_80EE818()) - { - sub_80EE8C8(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10); - } - } - break; - case FRONTIER_FACILITY_FACTORY: - if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode]) - { - gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; - gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; - if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > 1 - && sub_80EE818()) - { - if (battleMode == FRONTIER_MODE_SINGLES) - sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7); - else - sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8); - } - } - break; - case FRONTIER_FACILITY_PIKE: - if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode]) - { - gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; - if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1 - && sub_80EE818()) - { - sub_80EE8C8(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9); - } - } - break; - case FRONTIER_FACILITY_PYRAMID: - if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode]) - { - gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; - if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1 - && sub_80EE818()) - { - sub_80EE8C8(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13); - } - } - break; - } -} - -void sub_81A35EC(void) -{ - VarGet(VAR_FRONTIER_FACILITY); // Unused return value. - gSpecialVar_Result = sub_81A3610(); -} - -extern const u8 gUnknown_08611550[][4]; - -u8 sub_81A3610(void) -{ - s32 ret = 0; - s32 facility = VarGet(VAR_FRONTIER_FACILITY); - s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - u16 val = GetCurrentFacilityWinStreak(); - s32 r5 = val + gUnknown_08611550[facility][3]; - s32 symbolsCount; - - if (battleMode != FRONTIER_MODE_SINGLES) - return 0; - - symbolsCount = sub_81A3B30(facility); - switch (symbolsCount) - { - case 0: - case 1: - if (r5 == gUnknown_08611550[facility][symbolsCount]) - ret = symbolsCount + 1; - break; - case 2: - default: - if (r5 == gUnknown_08611550[facility][0]) - ret = 3; - else if (r5 == gUnknown_08611550[facility][1]) - ret = 4; - else if (r5 > gUnknown_08611550[facility][1] && (r5 - gUnknown_08611550[facility][1]) % gUnknown_08611550[facility][2] == 0) - ret = 4; - break; - } - - return ret; -} - -void CopyFrontierTrainerText(u8 whichText, u16 trainerId) -{ - switch (whichText) - { - case FRONTIER_BEFORE_TEXT: - if (trainerId == TRAINER_EREADER) - FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.greeting); - else if (trainerId == TRAINER_FRONTIER_BRAIN) - sub_81A51A8(0); - else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) - FrontierSpeechToString(gFacilityTrainers[trainerId].speechBefore); - else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) - FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].greeting); - else - CopyFriendsApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE); - break; - case FRONTIER_PLAYER_LOST_TEXT: - if (trainerId == TRAINER_EREADER) - { - FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerLost); - } - else if (trainerId == TRAINER_FRONTIER_BRAIN) - { - sub_81A51A8(0); - } - else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) - { - FrontierSpeechToString(gFacilityTrainers[trainerId].speechWin); - } - else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - FrontierSpeechToString(sub_81864E0()); - else - FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechWon); - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - FrontierSpeechToString(sub_81864E0()); - else - FrontierSpeechToString(gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords); - } - break; - case FRONTIER_PLAYER_WON_TEXT: - if (trainerId == TRAINER_EREADER) - { - FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerWon); - } - else if (trainerId == TRAINER_FRONTIER_BRAIN) - { - sub_81A51A8(1); - } - else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) - { - FrontierSpeechToString(gFacilityTrainers[trainerId].speechLose); - } - else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - FrontierSpeechToString(sub_81864E0()); - else - FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechLost); - } - else - { - if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - { - trainerId = sub_81864A8(); - FrontierSpeechToString(gApprentices[trainerId].easyChatWords); - } - else - { - trainerId = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id; - FrontierSpeechToString(gApprentices[trainerId].easyChatWords); - } - } - break; - } -} - -void sub_81A3908(void) -{ - s32 battleMode, lvlMode; - - gSaveBlock2Ptr->frontier.field_CDC = 0; - for (battleMode = 0; battleMode < 4; battleMode++) - { - for (lvlMode = 0; lvlMode < 2; lvlMode++) - { - gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0; - if (battleMode < FRONTIER_MODE_MULTIS) - { - gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0; - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; - gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0; - } - if (battleMode == FRONTIER_MODE_SINGLES) - { - gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0; - gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0; - gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] = 0; - } - } - } - if (gSaveBlock2Ptr->frontier.field_CA8 != 0) - gSaveBlock2Ptr->frontier.field_CA8 = 1; -} - -u32 GetCurrentFacilityWinStreak(void) -{ - s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - s32 facility = VarGet(VAR_FRONTIER_FACILITY); - - switch (facility) - { - case FRONTIER_FACILITY_TOWER: - return gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; - case FRONTIER_FACILITY_DOME: - return gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; - case FRONTIER_FACILITY_PALACE: - return gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; - case FRONTIER_FACILITY_ARENA: - return gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; - case FRONTIER_FACILITY_FACTORY: - return gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; - case FRONTIER_FACILITY_PIKE: - return gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; - case FRONTIER_FACILITY_PYRAMID: - return gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; - default: - return 0; - } -} - -void sub_81A3ACC(void) -{ - s32 i; - - for (i = 0; i < 20; i++) - gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF; -} - -void sub_81A3B00(void) -{ - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - gSpecialVar_Result = TRUE; - else - gSpecialVar_Result = FALSE; -} - -u8 sub_81A3B30(u8 facility) -{ - return FlagGet(FLAG_SYS_TOWER_SILVER + facility * 2) - + FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2); -} - -extern const u8 gUnknown_086118B4[29][7][4]; - -void sub_81A3B64(void) -{ - s32 challengeNum = 0; - s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - s32 facility = VarGet(VAR_FRONTIER_FACILITY); - s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - s32 points; - - switch (facility) - { - case FRONTIER_FACILITY_TOWER: - challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; - break; - case FRONTIER_FACILITY_DOME: - challengeNum = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; - break; - case FRONTIER_FACILITY_PALACE: - challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / 7; - break; - case FRONTIER_FACILITY_ARENA: - challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / 7; - break; - case FRONTIER_FACILITY_FACTORY: - challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; - break; - case FRONTIER_FACILITY_PIKE: - challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; - break; - case FRONTIER_FACILITY_PYRAMID: - challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7; - break; - } - - if (challengeNum != 0) - challengeNum--; - if (challengeNum > ARRAY_COUNT(gUnknown_086118B4)) - challengeNum = ARRAY_COUNT(gUnknown_086118B4); - - points = gUnknown_086118B4[challengeNum][facility][battleMode]; - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - points += 10; - gSaveBlock2Ptr->frontier.battlePoints += points; - ConvertIntToDecimalStringN(gStringVar1, points, STR_CONV_MODE_LEFT_ALIGN, 2); - if (gSaveBlock2Ptr->frontier.battlePoints > 9999) - gSaveBlock2Ptr->frontier.battlePoints = 9999; - - points = gSaveBlock2Ptr->frontier.field_EBA; - points += gUnknown_086118B4[challengeNum][facility][battleMode]; - sub_80EED60(gUnknown_086118B4[challengeNum][facility][battleMode]); - if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) - { - points += 10; - sub_80EED60(10); - } - if (points > 0xFFFF) - points = 0xFFFF; - gSaveBlock2Ptr->frontier.field_EBA = points; -} - -void sub_81A3D30(void) -{ - s32 facility = VarGet(VAR_FRONTIER_FACILITY); - gSpecialVar_Result = sub_81A3B30(facility); -} - -void sub_81A3D58(void) -{ - s32 facility = VarGet(VAR_FRONTIER_FACILITY); - if (sub_81A3B30(facility) == 0) - FlagSet(FLAG_SYS_TOWER_SILVER + facility * 2); - else - FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2); -} - -void sub_81A3DA0(void) -{ - if (gBattleTypeFlags & gSpecialVar_0x8005) - gSpecialVar_Result = TRUE; - else - gSpecialVar_Result = FALSE; -} - -extern const u8 gText_SpaceAndSpace[]; -extern const u8 gText_CommaSpace[]; -extern const u8 gText_NewLine[]; -extern const u8 gText_ScrollTextUp[]; -extern const u8 gText_Space2[]; -extern const u8 gText_Are[]; -extern const u8 gText_Are2[]; - -u8 sub_81A3DD0(u16 species, u8 arg1, s32 arg2) -{ - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) - { - arg1++; - switch (arg1) - { - case 1: - case 3: - case 5: - case 7: - case 9: - case 11: - if (arg2 == arg1) - StringAppend(gStringVar1, gText_SpaceAndSpace); - else if (arg2 > arg1) - StringAppend(gStringVar1, gText_CommaSpace); - break; - case 2: - if (arg1 == arg2) - StringAppend(gStringVar1, gText_SpaceAndSpace); - else - StringAppend(gStringVar1, gText_CommaSpace); - StringAppend(gStringVar1, gText_NewLine); - break; - default: - if (arg1 == arg2) - StringAppend(gStringVar1, gText_SpaceAndSpace); - else - StringAppend(gStringVar1, gText_CommaSpace); - StringAppend(gStringVar1, gText_ScrollTextUp); - break; - } - StringAppend(gStringVar1, gSpeciesNames[species]); - } - - return arg1; -} - -extern const u16 gUnknown_08611C9A[]; - -void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monLevel, u16 *speciesArray, u16 *itemsArray, u8 *count) -{ - s32 i = 0; - - if (species == SPECIES_EGG || species == SPECIES_NONE) - return; - - for (i = 0; gUnknown_08611C9A[i] != 0xFFFF && gUnknown_08611C9A[i] != species; i++) - ; - - if (gUnknown_08611C9A[i] != 0xFFFF) - return; - if (lvlMode == FRONTIER_LVL_50 && monLevel > 50) - return; - - for (i = 0; i < *count && speciesArray[i] != species; i++) - ; - if (i != *count) - return; - - if (heldItem != 0) - { - for (i = 0; i < *count && itemsArray[i] != heldItem; i++) - ; - if (i != *count) - return; - } - - speciesArray[*count] = species; - itemsArray[*count] = heldItem; - (*count)++; -} - -void sub_81A3FD4(void) -{ - u16 speciesArray[6]; - u16 itemArray[6]; - s32 monId = 0; - s32 toChoose = 0; - u8 count = 0; - s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - s32 monIdLooper; - - switch (battleMode) - { - case FRONTIER_MODE_SINGLES: - toChoose = 3; - break; - case FRONTIER_MODE_MULTIS: - case FRONTIER_MODE_LINK_MULTIS: - toChoose = 2; - break; - case FRONTIER_MODE_DOUBLES: - if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_TOWER) - toChoose = 4; - else - toChoose = 3; - break; - } - - monIdLooper = 0; - do - { - monId = monIdLooper; - count = 0; - do - { - u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); - u16 heldItem = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); - u8 level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - u16 hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); - if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_PYRAMID) - { - if (heldItem == 0) - AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); - } - else - { - AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); - } - monId++; - if (monId >= PARTY_SIZE) - monId = 0; - } while (monId != monIdLooper); - - monIdLooper++; - } while (monIdLooper < PARTY_SIZE && count < toChoose); - - if (count < toChoose) - { - s32 i; - s32 caughtBannedMons = 0; - s32 species = gUnknown_08611C9A[0]; - for (i = 0; species != 0xFFFF; i++, species = gUnknown_08611C9A[i]) - { - if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) - caughtBannedMons++; - } - gStringVar1[0] = EOS; - gSpecialVar_0x8004 = 1; - count = 0; - for (i = 0; gUnknown_08611C9A[i] != 0xFFFF; i++) - count = sub_81A3DD0(gUnknown_08611C9A[i], count, caughtBannedMons); - - if (count == 0) - { - StringAppend(gStringVar1, gText_Space2); - StringAppend(gStringVar1, gText_Are); - } - else - { - if (count & 1) - StringAppend(gStringVar1, gText_ScrollTextUp); - else - StringAppend(gStringVar1, gText_Space2); - StringAppend(gStringVar1, gText_Are2); - } - } - else - { - gSpecialVar_0x8004 = 0; - gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_Result; - } -} - -void sub_81A4224(void) -{ - ValidateEReaderTrainer(); -} - -void sub_81A4230(void) -{ - s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - s32 facility = VarGet(VAR_FRONTIER_FACILITY); - - switch (facility) - { - case FRONTIER_FACILITY_TOWER: - if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < 9999) - { - gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]++; - if (battleMode == FRONTIER_MODE_SINGLES) - { - SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]); - gSaveBlock2Ptr->frontier.field_D02 = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; - } - } - break; - case FRONTIER_FACILITY_DOME: - if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 9999) - gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++; - if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 9999) - gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++; - break; - case FRONTIER_FACILITY_PALACE: - if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) - gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; - break; - case FRONTIER_FACILITY_ARENA: - if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < 9999) - gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]++; - break; - case FRONTIER_FACILITY_FACTORY: - if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < 9999) - gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]++; - break; - case FRONTIER_FACILITY_PIKE: - if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < 9999) - gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]++; - break; - case FRONTIER_FACILITY_PYRAMID: - if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < 9999) - gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]++; - break; - } -} - -void sub_81A43A8(void) -{ - u8 i; - - for (i = 0; i < 4; i++) - { - if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0) - { - u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HELD_ITEM, NULL); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); - } - } -} - -void sub_81A4410(void) -{ - gSpecialVar_Result = MoveRecordedBattleToSaveData(); - gSaveBlock2Ptr->frontier.field_CA9_b = 1; -} - -void sub_81A443C(void) -{ - switch (gSpecialVar_0x8005) - { - case 0: - GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); - break; - case 1: - GetFrontierTrainerName(gStringVar2, gTrainerBattleOpponent_A); - break; - } -} diff --git a/src/frontier_util.c b/src/frontier_util.c new file mode 100644 index 000000000..bb349f6db --- /dev/null +++ b/src/frontier_util.c @@ -0,0 +1,1658 @@ +#include "global.h" +#include "frontier_util.h" +#include "event_data.h" +#include "battle_setup.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" +#include "field_specials.h" +#include "battle.h" +#include "script_pokemon_util_80F87D8.h" +#include "main.h" +#include "window.h" +#include "menu.h" +#include "text.h" +#include "battle_records.h" +#include "international_string_util.h" +#include "string_util.h" +#include "new_game.h" +#include "link.h" +#include "tv.h" +#include "apprentice.h" +#include "pokedex.h" +#include "recorded_battle.h" +#include "data2.h" +#include "record_mixing.h" +#include "strings.h" +#include "malloc.h" +#include "constants/battle_frontier.h" +#include "constants/trainers.h" +#include "constants/species.h" +#include "constants/game_stat.h" +#include "constants/moves.h" + +extern u8 gUnknown_0203CEF8[]; + +extern void (* const gUnknown_08611C18[])(void); +extern const u16 gUnknown_08611BFC[][2]; +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; +extern const struct WindowTemplate gUnknown_08611C74; +extern const struct WindowTemplate gUnknown_08611C7C; +extern const struct WindowTemplate gUnknown_08611C84; +extern const u8 gUnknown_086118B4[29][7][4]; +extern const u16 gUnknown_08611C9A[]; +extern const u8 *const gUnknown_08611D08[]; +extern const u8 *const gUnknown_08611CB0[][2]; +extern const u8 *const gUnknown_08611D00[]; + +extern void sub_81B8558(void); + +// This file's functions. +u8 sub_81A3B30(u8 facility); +static void ShowTowerResultsWindow(u8); +static void ShowDomeResultsWindow(u8); +static void ShowPalaceResultsWindow(u8); +static void ShowPikeResultsWindow(void); +static void ShowFactoryResultsWindow(u8); +static void ShowArenaResultsWindow(void); +static void ShowPyramidResultsWindow(void); +static void ShowLinkContestResultsWindow(void); +u8 sub_81A3610(void); +void sub_81A51A8(u8); +void sub_81A5030(u8); + +// const rom data +const u8 gUnknown_08611550[][4] = +{ + [FRONTIER_FACILITY_TOWER] = {0x23, 0x46, 0x23, 0x01}, + [FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00}, + [FRONTIER_FACILITY_PALACE] = {0x15, 0x2a, 0x15, 0x01}, + [FRONTIER_FACILITY_ARENA] = {0x1c, 0x38, 0x1c, 0x01}, + [FRONTIER_FACILITY_FACTORY] = {0x15, 0x2a, 0x15, 0x01}, + [FRONTIER_FACILITY_PIKE] = {0x1c, 0x8c, 0x38, 0x01}, + [FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00}, +}; + +// code +void sub_81A1780(void) +{ + gUnknown_08611C18[gSpecialVar_0x8004](); +} + +void sub_81A17A0(void) +{ + VarSet(VAR_TEMP_0, 0xFF); + switch (gSaveBlock2Ptr->frontier.field_CA8) + { + case 0: + break; + case 1: + sub_813A878(0); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + case 4: + sub_813A878(0); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + case 3: + sub_813A878(1); + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + case 2: + VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.field_CA8); + break; + } +} + +void sub_81A1830(void) +{ + u8 facility = VarGet(VAR_FRONTIER_FACILITY); + u8 currSymbol = sub_81A3B30(facility); + if (currSymbol == 2) + currSymbol = 1; + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA8; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.lvlMode; + break; + case 2: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.curChallengeBattleNum; + break; + case 3: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_a; + break; + case 5: + gSpecialVar_Result = gBattleOutcome; + gBattleOutcome = 0; + break; + case 6: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_b; + break; + case 7: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D00 & gUnknown_08611BFC[facility][currSymbol]; + break; + } +} + +void sub_81A1968(void) +{ + s32 i; + u8 facility = VarGet(VAR_FRONTIER_FACILITY); + u8 currSymbol = sub_81A3B30(facility); + if (currSymbol == 2) + currSymbol = 1; + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8006; + break; + case 1: + gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_0x8006; + break; + case 2: + gSaveBlock2Ptr->frontier.curChallengeBattleNum = gSpecialVar_0x8006; + break; + case 3: + gSaveBlock2Ptr->frontier.field_CA9_a = gSpecialVar_0x8006; + break; + case 4: + for (i = 0; i < 4; i++) + gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gUnknown_0203CEF8[i]; + break; + case 6: + gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006; + break; + case 7: + gSaveBlock2Ptr->frontier.field_D00 |= gUnknown_08611BFC[facility][currSymbol]; + break; + } +} + +void sub_81A1AD4(void) +{ + s32 i; + + sub_81B8558(); + for (i = 0; i < gSpecialVar_0x8005; i++) + gUnknown_0203CEF8[i] = gSaveBlock2Ptr->frontier.selectedPartyMons[i]; + ReducePlayerPartyToThree(); +} + +void sub_81A1B1C(void) +{ + DoSoftReset(); +} + +void sub_81A1B28(void) +{ + gFacilityTrainers = gBattleFrontierTrainers; +} + +void sub_81A1B38(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; + if (monId < PARTY_SIZE) + gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1] = gPlayerParty[i]; + } +} + +void sub_81A1B98(void) +{ + if (gSpecialVar_0x8006 > 3) + gSpecialVar_0x8006 = 0; + switch (gSpecialVar_0x8005) + { + case FRONTIER_FACILITY_TOWER: + ShowTowerResultsWindow(gSpecialVar_0x8006); + break; + case FRONTIER_FACILITY_DOME: + ShowDomeResultsWindow(gSpecialVar_0x8006); + break; + case FRONTIER_FACILITY_PALACE: + ShowPalaceResultsWindow(gSpecialVar_0x8006); + break; + case FRONTIER_FACILITY_PIKE: + ShowPikeResultsWindow(); + break; + case FRONTIER_FACILITY_FACTORY: + ShowFactoryResultsWindow(gSpecialVar_0x8006); + break; + case FRONTIER_FACILITY_ARENA: + ShowArenaResultsWindow(); + break; + case FRONTIER_FACILITY_PYRAMID: + ShowPyramidResultsWindow(); + break; + case 7: + ShowLinkContestResultsWindow(); + break; + } +} + +static bool8 sub_81A1C24(u32 flags) +{ + if (gSaveBlock2Ptr->frontier.field_CDC & flags) + return TRUE; + else + return FALSE; +} + +static void sub_81A1C4C(const u8 *str, s32 y) +{ + s32 x = GetStringCenterAlignXOffset(1, str, 0xE0); + y = (y * 8) + 1; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, y, TEXT_SPEED_FF, NULL); +} + +static void PrintHyphens(s32 y) +{ + s32 i; + u8 text[37]; + + for (i = 0; i < 36; i++) + text[i] = CHAR_HYPHEN; + text[i] = EOS; + + y = (y * 8) + 1; + AddTextPrinterParameterized(gRecordsWindowId, 1, text, 4, y, TEXT_SPEED_FF, NULL); +} + +// Battle Tower records. +static void TowerPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_WinStreak); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +static void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode]; + TowerPrintStreak(gText_Record, num, x1, x2, y); +} + +static u16 TowerGetWinStreak(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = TowerGetWinStreak(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(2); + else + isCurrent = sub_81A1C24(1); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x8000); + else + isCurrent = sub_81A1C24(0x4000); + break; + case FRONTIER_MODE_MULTIS: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x20000); + else + isCurrent = sub_81A1C24(0x10000); + break; + case FRONTIER_MODE_LINK_MULTIS: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x80000); + else + isCurrent = sub_81A1C24(0x40000); + break; + } + + if (isCurrent == TRUE) + TowerPrintStreak(gText_Current, winStreak, x1, x2, y); + else + TowerPrintStreak(gText_Prev, winStreak, x1, x2, y); +} + +static void ShowTowerResultsWindow(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_SingleBattleRoomResults); + else if (battleMode == FRONTIER_MODE_DOUBLES) + StringExpandPlaceholders(gStringVar4, gText_DoubleBattleRoomResults); + else if (battleMode == FRONTIER_MODE_MULTIS) + StringExpandPlaceholders(gStringVar4, gText_MultiBattleRoomResults); + else + StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults); + + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 132, 49); + TowerPrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 132, 65); + TowerPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 97); + TowerPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 132, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Dome records. +static u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +static void PrintTwoStrings(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, str2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = DomeGetWinStreak(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(8); + else + isCurrent = sub_81A1C24(4); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x200000); + else + isCurrent = sub_81A1C24(0x100000); + break; + } + + if (isCurrent == TRUE) + PrintTwoStrings(gText_Current, gText_ClearStreak, winStreak, x1, x2, y); + else + PrintTwoStrings(gText_Prev, gText_ClearStreak, winStreak, x1, x2, y); +} + +static void ShowDomeResultsWindow(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_SingleBattleTourneyResults); + else + StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults); + + sub_81A1C4C(gStringVar4, 0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 64, 121, 33); + PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_50], 64, 121, 49); + PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_50], 64, 112, 65); + DomePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 64, 121, 97); + PrintTwoStrings(gText_Record, gText_ClearStreak, gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][FRONTIER_LVL_OPEN], 64, 121, 113); + PrintTwoStrings(gText_Total, gText_Championships, gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][FRONTIER_LVL_OPEN], 64, 112, 129); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Palace records. +static void PalacePrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_WinStreak); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +static void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]; + PalacePrintStreak(gText_Record, num, x1, x2, y); +} + +static u16 PalaceGetWinStreak(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = PalaceGetWinStreak(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x20); + else + isCurrent = sub_81A1C24(0x10); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x800000); + else + isCurrent = sub_81A1C24(0x400000); + } + + if (isCurrent == TRUE) + PalacePrintStreak(gText_Current, winStreak, x1, x2, y); + else + PalacePrintStreak(gText_Prev, winStreak, x1, x2, y); +} + +static void ShowPalaceResultsWindow(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_SingleBattleHallResults); + else + StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults); + + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 72, 131, 49); + PalacePrintRecordStreak(battleMode, FRONTIER_LVL_50, 72, 131, 65); + PalacePrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 97); + PalacePrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 72, 131, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Pike records. +static u16 PikeGetWinStreak(u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +static void PikePrintCleared(const u8 *str1, const u8 *str2, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str1, x1, y, TEXT_SPEED_FF, NULL); + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, str2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = PikeGetWinStreak(lvlMode); + + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x800); + else + isCurrent = sub_81A1C24(0x400); + + if (isCurrent == TRUE) + PrintTwoStrings(gText_Current, gText_RoomsCleared, winStreak, x1, x2, y); + else + PrintTwoStrings(gText_Prev, gText_RoomsCleared, winStreak, x1, x2, y); +} + +static void ShowPikeResultsWindow(void) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults); + sub_81A1C4C(gStringVar4, 0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + PikePrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 114, 33); + PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_50], 64, 114, 49); + PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_50], 64, 114, 65); + PikePrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 114, 97); + PikePrintCleared(gText_Record, gText_RoomsCleared, gSaveBlock2Ptr->frontier.pikeRecordStreaks[FRONTIER_LVL_OPEN], 64, 114, 113); + PikePrintCleared(gText_Total, gText_TimesCleared, gSaveBlock2Ptr->frontier.pikeTotalStreaks[FRONTIER_LVL_OPEN], 64, 114, 129); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Arena records. +static void ArenaPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_KOsInARow); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +static void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode]; + ArenaPrintStreak(gText_Record, num, x1, x2, y); +} + +static u16 ArenaGetWinStreak(u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = ArenaGetWinStreak(lvlMode); + + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x80); + else + isCurrent = sub_81A1C24(0x40); + + if (isCurrent == TRUE) + ArenaPrintStreak(gText_Current, winStreak, x1, x2, y); + else + ArenaPrintStreak(gText_Prev, winStreak, x1, x2, y); +} + +static void ShowArenaResultsWindow(void) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + PrintHyphens(10); + StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults); + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); + ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 72, 126, 49); + ArenaPrintRecordStreak(FRONTIER_LVL_50, 72, 126, 65); + ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 72, 126, 97); + ArenaPrintRecordStreak(FRONTIER_LVL_OPEN, 72, 126, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Factory records. +static void FactoryPrintStreak(const u8 *str, u16 num1, u16 num2, u8 x1, u8 x2, u8 x3, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num1 > 9999) + num1 = 9999; + ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_WinStreak); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); + + ConvertIntToDecimalStringN(gStringVar1, num2, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_TimesVar1); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x3, y, TEXT_SPEED_FF, NULL); +} + +static void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) +{ + u16 num1 = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode]; + u16 num2 = gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode]; + FactoryPrintStreak(gText_Record, num1, num2, x1, x2, x3, y); +} + +static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +static u16 FactoryGetRentsCount(u8 battleMode, u8 lvlMode) +{ + u16 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; + if (rents > 9999) + return 9999; + else + return rents; +} + +static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 x3, u8 y) +{ + bool8 isCurrent; + u16 winStreak = FactoryGetWinStreak(battleMode, lvlMode); + u16 rents = FactoryGetRentsCount(battleMode, lvlMode); + switch (battleMode) + { + default: + case FRONTIER_MODE_SINGLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x200); + else + isCurrent = sub_81A1C24(0x100); + break; + case FRONTIER_MODE_DOUBLES: + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x2000000); + else + isCurrent = sub_81A1C24(0x1000000); + break; + } + + if (isCurrent == TRUE) + FactoryPrintStreak(gText_Current, winStreak, rents, x1, x2, x3, y); + else + FactoryPrintStreak(gText_Prev, winStreak, rents, x1, x2, x3, y); +} + +static void ShowFactoryResultsWindow(u8 battleMode) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + if (battleMode == FRONTIER_MODE_SINGLES) + StringExpandPlaceholders(gStringVar4, gText_BattleSwapSingleResults); + else + StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults); + + sub_81A1C4C(gStringVar4, 0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 49); + FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_50, 8, 64, 158, 65); + FactoryPrintPrevOrCurrentStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 113); + FactoryPrintRecordStreak(battleMode, FRONTIER_LVL_OPEN, 8, 64, 158, 129); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Battle Pyramid records. +static void PyramidPrintStreak(const u8 *str, u16 num, u8 x1, u8 x2, u8 y) +{ + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x1, y, TEXT_SPEED_FF, NULL); + if (num > 9999) + num = 9999; + ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gText_FloorsCleared); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL); +} + +static void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + u16 num = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode]; + PyramidPrintStreak(gText_Record, num, x1, x2, y); +} + +static u16 PyramidGetWinStreak(u8 lvlMode) +{ + u16 winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; + if (winStreak > 9999) + return 9999; + else + return winStreak; +} + +static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y) +{ + bool8 isCurrent; + u16 winStreak = PyramidGetWinStreak(lvlMode); + + if (lvlMode != FRONTIER_LVL_50) + isCurrent = sub_81A1C24(0x2000); + else + isCurrent = sub_81A1C24(0x1000); + + if (isCurrent == TRUE) + PyramidPrintStreak(gText_Current, winStreak, x1, x2, y); + else + PyramidPrintStreak(gText_Prev, winStreak, x1, x2, y); +} + +static void ShowPyramidResultsWindow(void) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C74); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults); + sub_81A1C4C(gStringVar4, 2); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 49, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); + PrintHyphens(10); + PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 64, 111, 49); + PyramidPrintRecordStreak(FRONTIER_LVL_50, 64, 111, 65); + PyramidPrintPrevOrCurrentStreak(FRONTIER_LVL_OPEN, 64, 111, 97); + PyramidPrintRecordStreak(FRONTIER_LVL_OPEN, 64, 111, 113); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +// Link contest records. Why is it in this file? +static void ShowLinkContestResultsWindow(void) +{ + const u8 *str; + s32 i, j; + s32 x; + + gRecordsWindowId = AddWindow(&gUnknown_08611C7C); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + + StringExpandPlaceholders(gStringVar4, gText_LinkContestResults); + x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, TEXT_SPEED_FF, NULL); + + str = gText_1st; + x = GetStringRightAlignXOffset(1, str, 0x26) + 50; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + str = gText_2nd; + x = GetStringRightAlignXOffset(1, str, 0x26) + 88; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + str = gText_3rd; + x = GetStringRightAlignXOffset(1, str, 0x26) + 126; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + str = gText_4th; + x = GetStringRightAlignXOffset(1, str, 0x26) + 164; + AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); + + x = 6; + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cool, x, 41, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Beauty, x, 57, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Cute, x, 73, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Smart, x, 89, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Tough, x, 105, TEXT_SPEED_FF, NULL); + + for (i = 0; i < 5; i++) + { + for (j = 0; j < 4; j++) + { + ConvertIntToDecimalStringN(gStringVar4, gSaveBlock2Ptr->contestLinkResults[i][j], STR_CONV_MODE_RIGHT_ALIGN, 4); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, (j * 38) + 64, (i * 16) + 41, TEXT_SPEED_FF, NULL); + } + } + + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +void sub_81A31FC(void) +{ + u8 text[32]; + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.towerRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + if (battleMode == FRONTIER_MODE_LINK_MULTIS) + { + StringCopy(text, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name); + StripExtCtrlCodes(text); + StringCopy(gSaveBlock2Ptr->frontier.field_EE1[lvlMode], text); + WriteUnalignedWord(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); + } + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + switch (battleMode) + { + case FRONTIER_MODE_SINGLES: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1); + break; + case FRONTIER_MODE_DOUBLES: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2); + break; + case FRONTIER_MODE_MULTIS: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3); + break; + case FRONTIER_MODE_LINK_MULTIS: + sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4); + break; + } + } + } + break; + case FRONTIER_FACILITY_DOME: + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + if (battleMode == FRONTIER_MODE_SINGLES) + sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5); + else + sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6); + } + } + break; + case FRONTIER_FACILITY_PALACE: + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + if (battleMode == FRONTIER_MODE_SINGLES) + sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11); + else + sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12); + } + } + break; + case FRONTIER_FACILITY_ARENA: + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode]) + { + gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1 + && sub_80EE818()) + { + sub_80EE8C8(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10); + } + } + break; + case FRONTIER_FACILITY_FACTORY: + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode]) + { + gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; + gSaveBlock2Ptr->frontier.factoryRecordRentsCount[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] > 1 + && sub_80EE818()) + { + if (battleMode == FRONTIER_MODE_SINGLES) + sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7); + else + sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8); + } + } + break; + case FRONTIER_FACILITY_PIKE: + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode]) + { + gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1 + && sub_80EE818()) + { + sub_80EE8C8(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9); + } + } + break; + case FRONTIER_FACILITY_PYRAMID: + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode]) + { + gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1 + && sub_80EE818()) + { + sub_80EE8C8(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13); + } + } + break; + } +} + +void sub_81A35EC(void) +{ + VarGet(VAR_FRONTIER_FACILITY); // Unused return value. + gSpecialVar_Result = sub_81A3610(); +} + +u8 sub_81A3610(void) +{ + s32 ret = 0; + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u16 val = GetCurrentFacilityWinStreak(); + s32 r5 = val + gUnknown_08611550[facility][3]; + s32 symbolsCount; + + if (battleMode != FRONTIER_MODE_SINGLES) + return 0; + + symbolsCount = sub_81A3B30(facility); + switch (symbolsCount) + { + case 0: + case 1: + if (r5 == gUnknown_08611550[facility][symbolsCount]) + ret = symbolsCount + 1; + break; + case 2: + default: + if (r5 == gUnknown_08611550[facility][0]) + ret = 3; + else if (r5 == gUnknown_08611550[facility][1]) + ret = 4; + else if (r5 > gUnknown_08611550[facility][1] && (r5 - gUnknown_08611550[facility][1]) % gUnknown_08611550[facility][2] == 0) + ret = 4; + break; + } + + return ret; +} + +void CopyFrontierTrainerText(u8 whichText, u16 trainerId) +{ + switch (whichText) + { + case FRONTIER_BEFORE_TEXT: + if (trainerId == TRAINER_EREADER) + FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.greeting); + else if (trainerId == TRAINER_FRONTIER_BRAIN) + sub_81A51A8(0); + else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) + FrontierSpeechToString(gFacilityTrainers[trainerId].speechBefore); + else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) + FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].greeting); + else + CopyFriendsApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE); + break; + case FRONTIER_PLAYER_LOST_TEXT: + if (trainerId == TRAINER_EREADER) + { + FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerLost); + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + sub_81A51A8(0); + } + else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) + { + FrontierSpeechToString(gFacilityTrainers[trainerId].speechWin); + } + else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + FrontierSpeechToString(sub_81864E0()); + else + FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechWon); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + FrontierSpeechToString(sub_81864E0()); + else + FrontierSpeechToString(gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords); + } + break; + case FRONTIER_PLAYER_WON_TEXT: + if (trainerId == TRAINER_EREADER) + { + FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.farewellPlayerWon); + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + sub_81A51A8(1); + } + else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) + { + FrontierSpeechToString(gFacilityTrainers[trainerId].speechLose); + } + else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + FrontierSpeechToString(sub_81864E0()); + else + FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechLost); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + { + trainerId = sub_81864A8(); + FrontierSpeechToString(gApprentices[trainerId].easyChatWords); + } + else + { + trainerId = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id; + FrontierSpeechToString(gApprentices[trainerId].easyChatWords); + } + } + break; + } +} + +void sub_81A3908(void) +{ + s32 battleMode, lvlMode; + + gSaveBlock2Ptr->frontier.field_CDC = 0; + for (battleMode = 0; battleMode < 4; battleMode++) + { + for (lvlMode = 0; lvlMode < 2; lvlMode++) + { + gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0; + if (battleMode < FRONTIER_MODE_MULTIS) + { + gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0; + } + if (battleMode == FRONTIER_MODE_SINGLES) + { + gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0; + gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0; + gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] = 0; + } + } + } + if (gSaveBlock2Ptr->frontier.field_CA8 != 0) + gSaveBlock2Ptr->frontier.field_CA8 = 1; +} + +u32 GetCurrentFacilityWinStreak(void) +{ + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + return gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_DOME: + return gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_PALACE: + return gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_ARENA: + return gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]; + case FRONTIER_FACILITY_FACTORY: + return gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]; + case FRONTIER_FACILITY_PIKE: + return gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]; + case FRONTIER_FACILITY_PYRAMID: + return gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]; + default: + return 0; + } +} + +void sub_81A3ACC(void) +{ + s32 i; + + for (i = 0; i < 20; i++) + gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF; +} + +void sub_81A3B00(void) +{ + if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + gSpecialVar_Result = TRUE; + else + gSpecialVar_Result = FALSE; +} + +u8 sub_81A3B30(u8 facility) +{ + return FlagGet(FLAG_SYS_TOWER_SILVER + facility * 2) + + FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2); +} + +void sub_81A3B64(void) +{ + s32 challengeNum = 0; + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 points; + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + challengeNum = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] / 7; + break; + case FRONTIER_FACILITY_DOME: + challengeNum = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]; + break; + case FRONTIER_FACILITY_PALACE: + challengeNum = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] / 7; + break; + case FRONTIER_FACILITY_ARENA: + challengeNum = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] / 7; + break; + case FRONTIER_FACILITY_FACTORY: + challengeNum = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; + break; + case FRONTIER_FACILITY_PIKE: + challengeNum = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] / 14; + break; + case FRONTIER_FACILITY_PYRAMID: + challengeNum = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] / 7; + break; + } + + if (challengeNum != 0) + challengeNum--; + if (challengeNum > ARRAY_COUNT(gUnknown_086118B4)) + challengeNum = ARRAY_COUNT(gUnknown_086118B4); + + points = gUnknown_086118B4[challengeNum][facility][battleMode]; + if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + points += 10; + gSaveBlock2Ptr->frontier.battlePoints += points; + ConvertIntToDecimalStringN(gStringVar1, points, STR_CONV_MODE_LEFT_ALIGN, 2); + if (gSaveBlock2Ptr->frontier.battlePoints > 9999) + gSaveBlock2Ptr->frontier.battlePoints = 9999; + + points = gSaveBlock2Ptr->frontier.field_EBA; + points += gUnknown_086118B4[challengeNum][facility][battleMode]; + sub_80EED60(gUnknown_086118B4[challengeNum][facility][battleMode]); + if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) + { + points += 10; + sub_80EED60(10); + } + if (points > 0xFFFF) + points = 0xFFFF; + gSaveBlock2Ptr->frontier.field_EBA = points; +} + +void sub_81A3D30(void) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + gSpecialVar_Result = sub_81A3B30(facility); +} + +void sub_81A3D58(void) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + if (sub_81A3B30(facility) == 0) + FlagSet(FLAG_SYS_TOWER_SILVER + facility * 2); + else + FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2); +} + +void sub_81A3DA0(void) +{ + if (gBattleTypeFlags & gSpecialVar_0x8005) + gSpecialVar_Result = TRUE; + else + gSpecialVar_Result = FALSE; +} + +static u8 sub_81A3DD0(u16 species, u8 arg1, s32 arg2) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + arg1++; + switch (arg1) + { + case 1: + case 3: + case 5: + case 7: + case 9: + case 11: + if (arg2 == arg1) + StringAppend(gStringVar1, gText_SpaceAndSpace); + else if (arg2 > arg1) + StringAppend(gStringVar1, gText_CommaSpace); + break; + case 2: + if (arg1 == arg2) + StringAppend(gStringVar1, gText_SpaceAndSpace); + else + StringAppend(gStringVar1, gText_CommaSpace); + StringAppend(gStringVar1, gText_NewLine); + break; + default: + if (arg1 == arg2) + StringAppend(gStringVar1, gText_SpaceAndSpace); + else + StringAppend(gStringVar1, gText_CommaSpace); + StringAppend(gStringVar1, gText_ScrollTextUp); + break; + } + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return arg1; +} + +static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monLevel, u16 *speciesArray, u16 *itemsArray, u8 *count) +{ + s32 i = 0; + + if (species == SPECIES_EGG || species == SPECIES_NONE) + return; + + for (i = 0; gUnknown_08611C9A[i] != 0xFFFF && gUnknown_08611C9A[i] != species; i++) + ; + + if (gUnknown_08611C9A[i] != 0xFFFF) + return; + if (lvlMode == FRONTIER_LVL_50 && monLevel > 50) + return; + + for (i = 0; i < *count && speciesArray[i] != species; i++) + ; + if (i != *count) + return; + + if (heldItem != 0) + { + for (i = 0; i < *count && itemsArray[i] != heldItem; i++) + ; + if (i != *count) + return; + } + + speciesArray[*count] = species; + itemsArray[*count] = heldItem; + (*count)++; +} + +void sub_81A3FD4(void) +{ + u16 speciesArray[6]; + u16 itemArray[6]; + s32 monId = 0; + s32 toChoose = 0; + u8 count = 0; + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 monIdLooper; + + switch (battleMode) + { + case FRONTIER_MODE_SINGLES: + toChoose = 3; + break; + case FRONTIER_MODE_MULTIS: + case FRONTIER_MODE_LINK_MULTIS: + toChoose = 2; + break; + case FRONTIER_MODE_DOUBLES: + if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_TOWER) + toChoose = 4; + else + toChoose = 3; + break; + } + + monIdLooper = 0; + do + { + monId = monIdLooper; + count = 0; + do + { + u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + u16 heldItem = GetMonData(&gPlayerParty[monId], MON_DATA_HELD_ITEM); + u8 level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + u16 hp = GetMonData(&gPlayerParty[monId], MON_DATA_HP); + if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_PYRAMID) + { + if (heldItem == 0) + AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); + } + else + { + AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count); + } + monId++; + if (monId >= PARTY_SIZE) + monId = 0; + } while (monId != monIdLooper); + + monIdLooper++; + } while (monIdLooper < PARTY_SIZE && count < toChoose); + + if (count < toChoose) + { + s32 i; + s32 caughtBannedMons = 0; + s32 species = gUnknown_08611C9A[0]; + for (i = 0; species != 0xFFFF; i++, species = gUnknown_08611C9A[i]) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + caughtBannedMons++; + } + gStringVar1[0] = EOS; + gSpecialVar_0x8004 = 1; + count = 0; + for (i = 0; gUnknown_08611C9A[i] != 0xFFFF; i++) + count = sub_81A3DD0(gUnknown_08611C9A[i], count, caughtBannedMons); + + if (count == 0) + { + StringAppend(gStringVar1, gText_Space2); + StringAppend(gStringVar1, gText_Are); + } + else + { + if (count & 1) + StringAppend(gStringVar1, gText_ScrollTextUp); + else + StringAppend(gStringVar1, gText_Space2); + StringAppend(gStringVar1, gText_Are2); + } + } + else + { + gSpecialVar_0x8004 = 0; + gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_Result; + } +} + +void sub_81A4224(void) +{ + ValidateEReaderTrainer(); +} + +void sub_81A4230(void) +{ + s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + + switch (facility) + { + case FRONTIER_FACILITY_TOWER: + if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < 9999) + { + gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]++; + if (battleMode == FRONTIER_MODE_SINGLES) + { + SetGameStat(GAME_STAT_BATTLE_TOWER_BEST_STREAK, gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]); + gSaveBlock2Ptr->frontier.field_D02 = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]; + } + } + break; + case FRONTIER_FACILITY_DOME: + if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++; + if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++; + break; + case FRONTIER_FACILITY_PALACE: + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; + break; + case FRONTIER_FACILITY_ARENA: + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < 9999) + gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]++; + break; + case FRONTIER_FACILITY_FACTORY: + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < 9999) + gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]++; + break; + case FRONTIER_FACILITY_PIKE: + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < 9999) + gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]++; + break; + case FRONTIER_FACILITY_PYRAMID: + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < 9999) + gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]++; + break; + } +} + +void sub_81A43A8(void) +{ + u8 i; + + for (i = 0; i < 4; i++) + { + if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0) + { + u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HELD_ITEM, NULL); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); + } + } +} + +void sub_81A4410(void) +{ + gSpecialVar_Result = MoveRecordedBattleToSaveData(); + gSaveBlock2Ptr->frontier.field_CA9_b = 1; +} + +void sub_81A443C(void) +{ + switch (gSpecialVar_0x8005) + { + case 0: + GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A); + break; + case 1: + GetFrontierTrainerName(gStringVar2, gTrainerBattleOpponent_A); + break; + } +} + +void sub_81A447C(void) +{ + u8 i, j, k; + + for (i = 0; i < 4; i++) + { + u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; + if (monId < PARTY_SIZE) + { + for (j = 0; j < 4; j++) + { + for (k = 0; k < 4; k++) + { + if (GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_MOVE1 + k, NULL) + == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j, NULL)) + break; + } + if (k == 4) + SetMonMoveSlot(&gPlayerParty[i], MOVE_SKETCH, j); + } + gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1] = gPlayerParty[i]; + } + } +} + +void sub_81A457C(void) +{ + sub_81A5030(VarGet(VAR_FRONTIER_FACILITY)); +} + +// Battle Frontier Ranking Hall records. +static void Print1PRecord(s32 position, s32 x, s32 y, struct RankingHall1P *hallRecord, s32 hallFacilityId) +{ + u8 text[32]; + u16 winStreak; + + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + hallRecord->name[PLAYER_NAME_LENGTH] = EOS; + if (hallRecord->winStreak) + { + TVShowConvertInternationalString(text, hallRecord->name, hallRecord->language); + AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 2) * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + winStreak = hallRecord->winStreak; + if (winStreak > 9999) + winStreak = 9999; + ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gUnknown_08611D08[hallFacilityId]); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gUnknown_08611D08[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + } +} + +static void Print2PRecord(s32 position, s32 x, s32 y, struct RankingHall2P *hallRecord) +{ + u8 text[32]; + u16 winStreak; + + AddTextPrinterParameterized(gRecordsWindowId, 1, gText_123Dot[position], x * 8, (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + if (hallRecord->winStreak) + { + hallRecord->name1[PLAYER_NAME_LENGTH] = EOS; + hallRecord->name2[PLAYER_NAME_LENGTH] = EOS; + TVShowConvertInternationalString(text, hallRecord->name1, hallRecord->language); + AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 2) * 8, (8 * (y + 5 * position - 1)) + 1, TEXT_SPEED_FF, NULL); + if (IsStringJapanese(hallRecord->name2)) + TVShowConvertInternationalString(text, hallRecord->name2, LANGUAGE_JAPANESE); + else + StringCopy(text, hallRecord->name2); + AddTextPrinterParameterized(gRecordsWindowId, 1, text, (x + 4) * 8, (8 * (y + 5 * position + 1)) + 1, TEXT_SPEED_FF, NULL); + + winStreak = hallRecord->winStreak; + if (winStreak > 9999) + winStreak = 9999; + ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4); + StringExpandPlaceholders(gStringVar4, gUnknown_08611D08[9]); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, gUnknown_08611D08[9], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL); + } +} + +static void Fill1PRecords(struct RankingHall1P *dst, s32 hallFacilityId, s32 lvlMode) +{ + s32 i, j; + struct RankingHall1P record1P[4]; + struct PlayerHallRecords *playerHallRecords = calloc(1, sizeof(struct PlayerHallRecords)); + GetPlayerHallRecords(playerHallRecords); + + for (i = 0; i < 3; i++) + record1P[i] = gSaveBlock2Ptr->hallRecords1P[hallFacilityId][lvlMode][i]; + + record1P[3] = playerHallRecords->onePlayer[hallFacilityId][lvlMode]; + + for (i = 0; i < 3; i++) + { + s32 highestWinStreak = 0; + s32 highestId = 0; + for (j = 0; j < 4; j++) + { + if (record1P[j].winStreak > highestWinStreak) + { + highestId = j; + highestWinStreak = record1P[j].winStreak; + } + } + if (record1P[3].winStreak >= highestWinStreak) + highestId = 3; + + dst[i] = record1P[highestId]; + record1P[highestId].winStreak = 0; + } + + free(playerHallRecords); +} + +static void Fill2PRecords(struct RankingHall2P *dst, s32 lvlMode) +{ + s32 i, j; + struct RankingHall2P record2P[4]; + struct PlayerHallRecords *playerHallRecords = calloc(1, sizeof(struct PlayerHallRecords)); + GetPlayerHallRecords(playerHallRecords); + + for (i = 0; i < 3; i++) + record2P[i] = gSaveBlock2Ptr->hallRecords2P[lvlMode][i]; + + record2P[3] = playerHallRecords->twoPlayers[lvlMode]; + + for (i = 0; i < 3; i++) + { + s32 highestWinStreak = 0; + s32 highestId = 0; + for (j = 0; j < 3; j++) + { + if (record2P[j].winStreak > highestWinStreak) + { + highestId = j; + highestWinStreak = record2P[j].winStreak; + } + } + if (record2P[3].winStreak >= highestWinStreak) + highestId = 3; + + dst[i] = record2P[highestId]; + record2P[highestId].winStreak = 0; + } + + free(playerHallRecords); +} + +static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode) +{ + s32 i; + s32 x; + struct RankingHall1P records1P[3]; + struct RankingHall2P records2P[3]; + + StringCopy(gStringVar1, gUnknown_08611CB0[hallFacilityId][0]); + StringExpandPlaceholders(gStringVar4, gUnknown_08611CB0[hallFacilityId][1]); + AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, 0, 1, TEXT_SPEED_FF, NULL); + x = GetStringRightAlignXOffset(1, gUnknown_08611D00[lvlMode], 0xD0); + AddTextPrinterParameterized(gRecordsWindowId, 1, gUnknown_08611D00[lvlMode], x, 1, TEXT_SPEED_FF, NULL); + if (hallFacilityId == HALL_FACILITIES_COUNT) + { + gSaveBlock2Ptr->frontier.field_EE1[0][PLAYER_NAME_LENGTH] = EOS; + gSaveBlock2Ptr->frontier.field_EE1[1][PLAYER_NAME_LENGTH] = EOS; + Fill2PRecords(records2P, lvlMode); + for (i = 0; i < 3; i++) + Print2PRecord(i, 1, 4, &records2P[i]); + } + else + { + Fill1PRecords(records1P, hallFacilityId, lvlMode); + for (i = 0; i < 3; i++) + Print1PRecord(i, 1, 4, &records1P[i], hallFacilityId); + } +} + +void ShowRankingHallRecordsWindow(void) +{ + gRecordsWindowId = AddWindow(&gUnknown_08611C84); + NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_50); + PutWindowTilemap(gRecordsWindowId); + CopyWindowToVram(gRecordsWindowId, 3); +} + +void ScrollRankingHallRecordsWindow(void) +{ + FillWindowPixelBuffer(gRecordsWindowId, 0x11); + PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_OPEN); + CopyWindowToVram(gRecordsWindowId, 2); +} diff --git a/src/record_mixing.c b/src/record_mixing.c index 4bb97cf1d..6caea7239 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -33,31 +33,17 @@ #include "new_game.h" #include "daycare.h" #include "international_string_util.h" +#include "constants/battle_frontier.h" extern void ReceiveSecretBasesData(struct SecretBaseRecord *, size_t, u8); extern void ReceiveEasyChatPairsData(struct EasyChatPair *, size_t, u8); // Static type declarations -struct UnknownRecMixingStruct +struct RecordMixingHallRecords { - u32 field_0; - u16 field_4; - u8 field_6[9]; -}; - -struct UnknownRecMixingStruct2 -{ - u32 field_0; - u16 field_4; - u16 field_6; - u16 field_8; - u8 field_A[16]; -}; - -struct UnknownRecMixingStruct3 -{ - u8 field_0[0x810]; + struct RankingHall1P hallRecords1P[HALL_FACILITIES_COUNT][2][6]; + struct RankingHall2P hallRecords2P[2][6]; }; struct PlayerRecordsRS @@ -85,7 +71,7 @@ struct PlayerRecordsEmerald /* 0x1210 */ u16 giftItem; /* 0x1214 */ LilycoveLady lilycoveLady; /* 0x1254 */ struct Apprentice apprentice[2]; - /* 0x12dc */ struct UnkRecordMixingStruct2 unk_12dc; + /* 0x12dc */ struct PlayerHallRecords hallRecords; /* 0x1434 */ u8 field_1434[0x10]; }; // 0x1444 @@ -106,7 +92,7 @@ static IWRAM_DATA struct EasyChatPair *sEasyChatPairsSave; static IWRAM_DATA struct RecordMixingDayCareMail *gUnknown_03001148; static IWRAM_DATA void *sBattleTowerSave; static IWRAM_DATA LilycoveLady *sLilycoveLadySave; -static IWRAM_DATA void *gUnknown_03001154; // gSaveBlock2Ptr->field_0DC; +static IWRAM_DATA void *sApprenticesSave; static IWRAM_DATA void *sBattleTowerSave_Duplicate; static IWRAM_DATA u32 sRecordStructSize; static IWRAM_DATA u8 gUnknown_03001160; @@ -137,7 +123,7 @@ static void ReceiveGiftItem(u16 *item, u8 which); static void sub_80E7FF8(u8 taskId); static void sub_80E8110(struct Apprentice *arg0, struct Apprentice *arg1); static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2); -static void sub_80E89AC(struct UnkRecordMixingStruct2 *arg0, size_t arg1, u32 arg2); +static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2); static void sub_80E89F8(struct RecordMixingDayCareMail *dst); static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src); static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *arg0); @@ -200,7 +186,7 @@ static void SetSrcLookupPointers(void) gUnknown_03001148 = &gUnknown_02039F9C; sBattleTowerSave = &gSaveBlock2Ptr->frontier.towerPlayer; sLilycoveLadySave = &gSaveBlock1Ptr->lilycoveLady; - gUnknown_03001154 = gSaveBlock2Ptr->apprentices; + sApprenticesSave = gSaveBlock2Ptr->apprentices; sBattleTowerSave_Duplicate = &gSaveBlock2Ptr->frontier.towerPlayer; } @@ -266,8 +252,8 @@ static void PrepareExchangePacket(void) if (GetMultiplayerId() == 0) sSentRecord->emerald.giftItem = GetRecordMixingGift(); - sub_80E8110(sSentRecord->emerald.apprentice, gUnknown_03001154); - sub_80E8260(&sSentRecord->emerald.unk_12dc); + sub_80E8110(sSentRecord->emerald.apprentice, sApprenticesSave); + GetPlayerHallRecords(&sSentRecord->emerald.hallRecords); } } @@ -300,7 +286,7 @@ static void ReceiveExchangePacket(u32 which) ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which); ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which); ReceiveApprenticeData(sReceivedRecords->emerald.apprentice, sizeof(struct PlayerRecordsEmerald), (u8) which); - sub_80E89AC(&sReceivedRecords->emerald.unk_12dc, sizeof(struct PlayerRecordsEmerald), (u8) which); + ReceiveRankingHallRecords(&sReceivedRecords->emerald.hallRecords, sizeof(struct PlayerRecordsEmerald), (u8) which); } } @@ -1608,42 +1594,42 @@ static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src) } } -void sub_80E8260(struct UnkRecordMixingStruct2 *dst) +void GetPlayerHallRecords(struct PlayerHallRecords *dst) { s32 i, j; - for (i = 0; i < 9; i++) + for (i = 0; i < HALL_FACILITIES_COUNT; i++) { for (j = 0; j < 2; j++) { - CopyUnalignedWord(dst->field_0[i][j].playerId, gSaveBlock2Ptr->playerTrainerId); - dst->field_0[i][j].language = GAME_LANGUAGE; - StringCopy(dst->field_0[i][j].playerName, gSaveBlock2Ptr->playerName); + CopyUnalignedWord(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId); + dst->onePlayer[i][j].language = GAME_LANGUAGE; + StringCopy(dst->onePlayer[i][j].name, gSaveBlock2Ptr->playerName); } } for (j = 0; j < 2; j++) { - dst->field_120[j].language = GAME_LANGUAGE; - CopyUnalignedWord(dst->field_120[j].playerId1, gSaveBlock2Ptr->playerTrainerId); - CopyUnalignedWord(dst->field_120[j].playerId2, gSaveBlock2Ptr->frontier.field_EF1[j]); - StringCopy(dst->field_120[j].playerName1, gSaveBlock2Ptr->playerName); - StringCopy(dst->field_120[j].playerName2, gSaveBlock2Ptr->frontier.field_EE1[j]); + dst->twoPlayers[j].language = GAME_LANGUAGE; + CopyUnalignedWord(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); + CopyUnalignedWord(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]); + StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName); + StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.field_EE1[j]); } for (i = 0; i < 2; i++) { - dst->field_0[0][i].field_4 = gSaveBlock2Ptr->frontier.field_CF0[i]; - dst->field_0[1][i].field_4 = gSaveBlock2Ptr->frontier.field_CF4[i]; - dst->field_0[2][i].field_4 = gSaveBlock2Ptr->frontier.field_CF8[i]; - dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[0][i]; - dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[0][i]; - dst->field_0[5][i].field_4 = gSaveBlock2Ptr->frontier.field_DDE[i]; - dst->field_0[6][i].field_4 = gSaveBlock2Ptr->frontier.field_DEA[i]; - dst->field_0[7][i].field_4 = gSaveBlock2Ptr->frontier.field_E08[i]; - dst->field_0[8][i].field_4 = gSaveBlock2Ptr->frontier.field_E1E[i]; - - dst->field_120[i].field_8 = gSaveBlock2Ptr->frontier.field_CFC[i]; + dst->onePlayer[0][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[1][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_DOUBLES][i]; + dst->onePlayer[2][i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_MULTIS][i]; + dst->onePlayer[3][i].winStreak = gSaveBlock2Ptr->frontier.domeRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[4][i].winStreak = gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[5][i].winStreak = gSaveBlock2Ptr->frontier.arenaRecordStreaks[i]; + dst->onePlayer[6][i].winStreak = gSaveBlock2Ptr->frontier.factoryRecordWinStreaks[FRONTIER_MODE_SINGLES][i]; + dst->onePlayer[7][i].winStreak = gSaveBlock2Ptr->frontier.pikeRecordStreaks[i]; + dst->onePlayer[8][i].winStreak = gSaveBlock2Ptr->frontier.pyramidRecordStreaks[i]; + + dst->twoPlayers[i].winStreak = gSaveBlock2Ptr->frontier.towerRecordWinStreaks[FRONTIER_MODE_LINK_MULTIS][i]; } } @@ -1702,7 +1688,7 @@ static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2 } NAKED -static void sub_80E8578(struct UnknownRecMixingStruct3 *arg0, struct UnkRecordMixingStruct2 *arg1, size_t arg2, u32 arg3, u32 arg4) +static void sub_80E8578(struct RecordMixingHallRecords *arg0, struct PlayerHallRecords *arg1, size_t arg2, u32 arg3, u32 arg4) { asm_unified(" push {r4-r7,lr}\n\ mov r7, r10\n\ @@ -2106,133 +2092,75 @@ _080E8864:\n\ "); } -static void sub_80E8880(struct UnknownRecMixingStruct *arg0, struct UnknownRecMixingStruct *arg1) +static void sub_80E8880(struct RankingHall1P *arg0, struct RankingHall1P *arg1) { s32 i, j; for (i = 0; i < 3; i++) { - s32 r2 = 0; - s32 r4 = -1; + s32 highestWinStreak = 0; + s32 highestId = -1; for (j = 0; j < 6; j++) { - if (arg1[j].field_4 > r2) + if (arg1[j].winStreak > highestWinStreak) { - r4 = j; - r2 = arg1[j].field_4; + highestId = j; + highestWinStreak = arg1[j].winStreak; } } - if (r4 >= 0) + if (highestId >= 0) { - arg0[i] = arg1[r4]; - arg1[r4].field_4 = 0; + arg0[i] = arg1[highestId]; + arg1[highestId].winStreak = 0; } } } -static void sub_80E88CC(struct UnknownRecMixingStruct2 *arg0, struct UnknownRecMixingStruct2 *arg1) +static void sub_80E88CC(struct RankingHall2P *arg0, struct RankingHall2P *arg1) { s32 i, j; for (i = 0; i < 3; i++) { - s32 r2 = 0; - s32 r4 = -1; + s32 highestWinStreak = 0; + s32 highestId = -1; for (j = 0; j < 6; j++) { - if (arg1[j].field_8 > r2) + if (arg1[j].winStreak > highestWinStreak) { - r4 = j; - r2 = arg1[j].field_8; + highestId = j; + highestWinStreak = arg1[j].winStreak; } } - if (r4 >= 0) + if (highestId >= 0) { - arg0[i] = arg1[r4]; - arg1[r4].field_8 = 0; + arg0[i] = arg1[highestId]; + arg1[highestId].winStreak = 0; } } } -NAKED -static void sub_80E8924(struct UnknownRecMixingStruct3 *arg0) +static void sub_80E8924(struct RecordMixingHallRecords *arg0) { - asm_unified("push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - mov r9, r0\n\ - movs r0, 0\n\ - ldr r1, =gSaveBlock2Ptr\n\ - mov r10, r1\n\ -_080E8936:\n\ - lsls r1, r0, 1\n\ - adds r2, r0, 0x1\n\ - mov r8, r2\n\ - adds r1, r0\n\ - lsls r0, r1, 5\n\ - movs r2, 0x87\n\ - lsls r2, 2\n\ - adds r7, r0, r2\n\ - lsls r1, 6\n\ - mov r0, r9\n\ - adds r4, r0, r1\n\ - movs r6, 0\n\ - movs r5, 0x1\n\ -_080E8950:\n\ - mov r1, r10\n\ - ldr r0, [r1]\n\ - adds r0, r7\n\ - adds r0, r6\n\ - adds r1, r4, 0\n\ - bl sub_80E8880\n\ - adds r4, 0x60\n\ - adds r6, 0x30\n\ - subs r5, 0x1\n\ - cmp r5, 0\n\ - bge _080E8950\n\ - mov r0, r8\n\ - cmp r0, 0x8\n\ - ble _080E8936\n\ - movs r5, 0\n\ - ldr r4, =gSaveBlock2Ptr\n\ -_080E8972:\n\ - movs r0, 0x54\n\ - adds r1, r5, 0\n\ - muls r1, r0\n\ - ldr r2, =0x0000057c\n\ - adds r1, r2\n\ - ldr r0, [r4]\n\ - adds r0, r1\n\ - movs r1, 0xA8\n\ - muls r1, r5\n\ - movs r2, 0xD8\n\ - lsls r2, 3\n\ - adds r1, r2\n\ - add r1, r9\n\ - bl sub_80E88CC\n\ - adds r5, 0x1\n\ - cmp r5, 0x1\n\ - ble _080E8972\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool"); + s32 i, j; + + for (i = 0; i < HALL_FACILITIES_COUNT; i++) + { + for (j = 0; j < 2; j++) + sub_80E8880(gSaveBlock2Ptr->hallRecords1P[i][j], arg0->hallRecords1P[i][j]); + } + for (j = 0; j < 2; j++) + sub_80E88CC(gSaveBlock2Ptr->hallRecords2P[j], arg0->hallRecords2P[j]); } -static void sub_80E89AC(struct UnkRecordMixingStruct2 *arg0, size_t arg1, u32 arg2) +static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2) { u8 linkPlayerCount = GetLinkPlayerCount(); - struct UnknownRecMixingStruct3 *largeStructPtr = AllocZeroed(sizeof(struct UnknownRecMixingStruct3)); + struct RecordMixingHallRecords *largeStructPtr = AllocZeroed(sizeof(struct RecordMixingHallRecords)); - sub_80E8578(largeStructPtr, arg0, arg1, arg2, linkPlayerCount); + sub_80E8578(largeStructPtr, hallRecords, arg1, arg2, linkPlayerCount); sub_80E8924(largeStructPtr); Free(largeStructPtr); diff --git a/src/strings.c b/src/strings.c index 15c247744..9cb384e70 100644 --- a/src/strings.c +++ b/src/strings.c @@ -1569,9 +1569,7 @@ asm(".align 2"); const u8 gUnknown_085EE410[] = _("Floors cleared: {STR_VAR_2}"); asm(".align 2"); -const u8 gText_1Dot[] = _("1."); -const u8 gUnknown_085EE427[] = _("2."); -const u8 gUnknown_085EE42A[] = _("3."); +const u8 gText_123Dot[][3] = {_("1."), _("2."), _("3.")}; const u8 gText_SavingDontTurnOff2[] = _("SAVING…\nDON’T TURN OFF THE POWER."); const u8 gText_BlenderMaxSpeedRecord[] = _("BERRY BLENDER\nMAXIMUM SPEED RECORD!"); const u8 gText_234Players[] = _("2 PLAYERS\n3 PLAYERS\n4 PLAYERS"); -- cgit v1.2.3 From 0da7d7e6ae7cb50ca0b52d1ea27d98e3f02e50d2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 30 Oct 2018 21:45:26 +0100 Subject: why is this function so hard to match --- src/battle_tower.c | 2 +- src/frontier_util.c | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/new_game.c | 4 +- src/save.c | 36 ++++++----- 4 files changed, 197 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/battle_tower.c b/src/battle_tower.c index 0f6e18169..4518e6ad9 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -10,7 +10,7 @@ #include "international_string_util.h" #include "battle.h" #include "battle_frontier_1.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "recorded_battle.h" #include "easy_chat.h" #include "gym_leader_rematch.h" diff --git a/src/frontier_util.c b/src/frontier_util.c index bb349f6db..99419cc9a 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -25,6 +25,9 @@ #include "record_mixing.h" #include "strings.h" #include "malloc.h" +#include "save.h" +#include "load_save.h" +#include "battle_dome.h" #include "constants/battle_frontier.h" #include "constants/trainers.h" #include "constants/species.h" @@ -1656,3 +1659,174 @@ void ScrollRankingHallRecordsWindow(void) PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_OPEN); CopyWindowToVram(gRecordsWindowId, 2); } + +void ClearnRankingHallRecords(void) +{ + s32 i, j, k; + + for (i = 0; i < HALL_FACILITIES_COUNT; i++) + { + for (j = 0; j < 2; j++) + { + for (k = 0; k < 3; k++) + { + CopyUnalignedWord(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + gSaveBlock2Ptr->hallRecords1P[i][j][k].name[0] = EOS; + gSaveBlock2Ptr->hallRecords1P[i][j][k].winStreak = 0; + } + } + } + + for (j = 0; j < 2; j++) + { + for (k = 0; k < 3; k++) + { + CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + gSaveBlock2Ptr->hallRecords2P[j][k].name1[0] = EOS; + gSaveBlock2Ptr->hallRecords2P[j][k].name2[0] = EOS; + gSaveBlock2Ptr->hallRecords2P[j][k].winStreak = 0; + } + } +} + +void sub_81A4C30(void) +{ + s32 i; + struct Pokemon *monsParty = calloc(PARTY_SIZE, sizeof(struct Pokemon)); + + for (i = 0; i < PARTY_SIZE; i++) + monsParty[i] = gPlayerParty[i]; + + i = gPlayerPartyCount; + LoadPlayerParty(); + sub_8076D5C(); + TrySavingData(SAVE_LINK); + sav2_gender2_inplace_and_xFE(); + gPlayerPartyCount = i; + + for (i = 0; i < PARTY_SIZE; i++) + gPlayerParty[i] = monsParty[i]; + + free(monsParty); +} + +extern const u16 gFacilityToBrainTrainerId[]; +extern const u8 gUnknown_08611C8C[][2]; + +u8 GetFrontierBrainTrainerPicIndex(void) +{ + s32 facility; + + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + facility = GetRecordedBattleFrontierFacility(); + else + facility = VarGet(VAR_FRONTIER_FACILITY); + + return gTrainers[gFacilityToBrainTrainerId[facility]].trainerPic; +} + +u8 GetFrontierBrainTrainerClass(void) +{ + s32 facility; + + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + facility = GetRecordedBattleFrontierFacility(); + else + facility = VarGet(VAR_FRONTIER_FACILITY); + + return gTrainers[gFacilityToBrainTrainerId[facility]].trainerClass; +} + +void CopyFrontierBrainTrainerName(u8 *dst) +{ + s32 i; + s32 facility; + + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + facility = GetRecordedBattleFrontierFacility(); + else + facility = VarGet(VAR_FRONTIER_FACILITY); + + for (i = 0; i < PLAYER_NAME_LENGTH; i++) + dst[i] = gTrainers[gFacilityToBrainTrainerId[facility]].trainerName[i]; + + dst[i] = EOS; +} + +bool8 IsFrontierBrainFemale(void) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + return gUnknown_08611C8C[facility][1]; +} + +void SetFrontierBrainTrainerGfxId(void) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]); +} + +s32 sub_81A513C(void); + +#define FRONTIER_BRAIN_OTID 61226 + +struct FrontierBrainMon +{ + u16 species; + u16 heldItem; + u8 fixedIV; + u8 nature; + u8 evs[6]; + u16 moves[4]; +}; + +extern const struct FrontierBrainMon sFrontierBrainsMons[][2][3]; + +void CreateFrontierBrainPokemon(void) +{ + s32 i, j; + s32 monCountInBits; + s32 monPartyId; + s32 monLevel; + u8 friendship; + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 symbol = sub_81A513C(); + + if (facility == FRONTIER_FACILITY_DOME) + monCountInBits = GetTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN)); + else + monCountInBits = 7; + + ZeroEnemyPartyMons(); + monPartyId = 0; + monLevel = SetFacilityPtrsGetLevel(); + for (i = 0; i < 3; monCountInBits >>= 1, i++) + { + if (!(monCountInBits & 1)) + continue; + + do + { + j = Random32(); + } while (IsShinyOtIdPersonality(FRONTIER_BRAIN_OTID, j) || sFrontierBrainsMons[facility][symbol][i].nature != GetNatureFromPersonality(j)); + CreateMon(&gEnemyParty[monPartyId], + sFrontierBrainsMons[facility][symbol][i].species, + monLevel, + sFrontierBrainsMons[facility][symbol][i].fixedIV, + TRUE, j, + TRUE, FRONTIER_BRAIN_OTID); + SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, &sFrontierBrainsMons[facility][symbol][i].heldItem); + for (j = 0; j < 6; j++) + SetMonData(&gEnemyParty[monPartyId], MON_DATA_HP_EV + j, &sFrontierBrainsMons[facility][symbol][i].evs[j]); + friendship = 0xFF; + for (j = 0; j < 4; j++) + { + SetMonMoveSlot(&gEnemyParty[monPartyId], sFrontierBrainsMons[facility][symbol][i].moves[j], j); + if (sFrontierBrainsMons[facility][symbol][i].moves[j] == MOVE_FRUSTRATION) + friendship = 0; + } + SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &friendship); + CalculateMonStats(&gEnemyParty[monPartyId]); + monPartyId++; + } +} diff --git a/src/new_game.c b/src/new_game.c index 127e48c35..e6bafa7a7 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -26,6 +26,7 @@ #include "item.h" #include "pokedex.h" #include "apprentice.h" +#include "frontier_util.h" extern u8 gDifferentSaveFile; extern u16 gSaveFileStatus; @@ -45,7 +46,6 @@ extern void NewGameInitPCItems(void); extern void ClearDecorationInventories(void); extern void ResetFanClub(void); extern void copy_strings_to_sav1(void); -extern void sub_81A4B14(void); extern void sub_8195E10(void); extern void sub_801AFD8(void); extern void sub_800E5AC(void); @@ -204,7 +204,7 @@ void NewGameInitData(void) copy_strings_to_sav1(); SetLilycoveLady(); ResetAllApprenticeData(); - sub_81A4B14(); + ClearnRankingHallRecords(); sub_8195E10(); sub_801AFD8(); sub_800E5AC(); diff --git a/src/save.c b/src/save.c index 68427c4c3..0bd48cca9 100644 --- a/src/save.c +++ b/src/save.c @@ -712,30 +712,34 @@ u8 HandleSavingData(u8 saveType) u8 TrySavingData(u8 saveType) // TrySave { - if(gFlashMemoryPresent == TRUE) + if (gFlashMemoryPresent != TRUE) { - HandleSavingData(saveType); - if(gDamagedSaveSectors) - DoSaveFailedScreen(saveType); - else - goto OK; // really? + gUnknown_03006294 = 0xFF; + return 0xFF; } - gUnknown_03006294 = 0xFF; - return 0xFF; -OK: - gUnknown_03006294 = 1; - return 1; + HandleSavingData(saveType); + if (!gDamagedSaveSectors) + { + gUnknown_03006294 = 1; + return 1; + } + else + { + DoSaveFailedScreen(saveType); + gUnknown_03006294 = 0xFF; + return 0xFF; + } } -u8 sub_8153380(void) // trade.s save +bool8 sub_8153380(void) // trade.s save { if (gFlashMemoryPresent != TRUE) - return 1; + return TRUE; UpdateSaveAddresses(); SaveSerializedGame(); RestoreSaveBackupVarsAndIncrement(gRamSaveSectionLocations); - return 0; + return FALSE; } bool8 sub_81533AC(void) // trade.s save @@ -744,9 +748,9 @@ bool8 sub_81533AC(void) // trade.s save if (gDamagedSaveSectors) DoSaveFailedScreen(0); if (retVal == 0xFF) - return 1; + return TRUE; else - return 0; + return FALSE; } u8 sub_81533E0(void) // trade.s save -- cgit v1.2.3 From 7de1c4bd141bc793873b12acd7f1eaae7474bfbc Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 30 Oct 2018 22:17:03 +0100 Subject: Make frontier util compile --- src/apprentice.c | 48 +++++++++++++++++++++++------------ src/battle_dome.c | 2 +- src/battle_factory.c | 2 +- src/battle_frontier_1.c | 18 ++++++------- src/battle_message.c | 2 +- src/battle_tent.c | 2 +- src/field_poison.c | 2 +- src/field_specials.c | 60 ++++++++++++++++++++++---------------------- src/fieldmap.c | 2 +- src/frontier_util.c | 2 ++ src/item_menu.c | 2 +- src/overworld.c | 2 +- src/pokemon_summary_screen.c | 2 +- src/scrcmd.c | 2 +- src/start_menu.c | 2 +- src/tv.c | 2 +- 16 files changed, 85 insertions(+), 67 deletions(-) (limited to 'src') diff --git a/src/apprentice.c b/src/apprentice.c index 065d9cf16..b4c1f849e 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -388,112 +388,128 @@ const struct ApprenticeTrainer gApprentices[] = .otId = 0xBDC9, .facilityClass = 0x43, .species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT}, - .rest = {0, 0, 0x1D, 8, 0x3e, 20, 0, 12, 1, 10, 0x30, 6, 0x44, 20}, + .id = 0, + .easyChatWords = {0x81D, 0x143E, 0xC00, 0xA01, 0x630, 0x1444}, }, { .name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")}, .otId = 0xCF09, .facilityClass = 0x2B, .species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH}, - .rest = {1, 0, 0x38, 12, 1, 10, 0x30, 6, 6, 10, 0x20, 0x10, 0x13, 0x22}, + .id = 1, + .easyChatWords = {0xC38, 0xA01, 0x630, 0xA06, 0x1020, 0x2213}, }, { .name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")}, .otId = 0x2E34, .facilityClass = 0x26, .species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP}, - .rest = {2, 0, 1, 10, 10, 0x16, 0x15, 14, 0x30, 6, 0x3b, 12, 0x4, 12}, + .id = 2, + .easyChatWords = {0xA01, 0x160A, 0xE15, 0x630, 0xC3B, 0xC04}, }, { .name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")}, .otId = 0x84EF, .facilityClass = 0x47, .species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA}, - .rest = {3, 0, 11, 16, 15, 0x1e, 0x39, 16, 0x21, 0x14, 0x3, 12, 0xff, 0xff}, + .id = 3, + .easyChatWords = {0x100B, 0x1E0F, 0x1039, 0x1421, 0xC03, 0xFFFF}, }, { .name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")}, .otId = 0x1E43, .facilityClass = 0x27, .species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY}, - .rest = {4, 0, 15, 0x1e, 0x14, 16, 6, 16, 15, 0x28, 0x1c, 0x1c, 0x13, 0x1c}, + .id = 4, + .easyChatWords = {0x1E0F, 0x1014, 0x1006, 0x280F, 0x1C1C, 0x1C13}, }, { .name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")}, .otId = 0x379F, .facilityClass = 0x30, .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA}, - .rest = {5, 0, 0x29, 0x0A, 0x08, 0x14, 0x2F, 0x10, 0x38, 0x16, 0x20, 0x08, 0x00, 0x0C}, + .id = 5, + .easyChatWords = {0xA29, 0x1408, 0x102F, 0x1638, 0x820, 0xC00}, }, { .name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")}, .otId = 0xF555, .facilityClass = 0x31, .species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO}, - .rest = {6, 0, 0x0B, 0x0C, 0x3E, 0x12, 0x00, 0x0C, 0x31, 0x0A, 0x30, 0x14, 0x00, 0x0C}, + .id = 6, + .easyChatWords = {0xC0B, 0x123E, 0xC00, 0xA31, 0x1430, 0xC00}, }, { .name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")}, .otId = 0x8D26, .facilityClass = 0x14, .species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC}, - .rest = {7, 0, 0x06, 0x0A, 0x20, 0x06, 0x1F, 0x0A, 0x02, 0x0A, 0x03, 0x0C, 0xFF, 0xFF}, + .id = 7, + .easyChatWords = {0xA06, 0x620, 0xA1F, 0xA02, 0xC03, 0xFFFF}, }, { .name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")}, .otId = 0x800C, .facilityClass = 0xD, .species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY}, - .rest = {8, 0, 0x22, 0x1E, 0x33, 0x04, 0x0E, 0x02, 0x02, 0x0A, 0x1E, 0x10, 0x00, 0x0C}, + .id = 8, + .easyChatWords = {0x1E22, 0x433, 0x20E, 0xA02, 0x101E, 0xC00}, }, { .name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")}, .otId = 0x469f, .facilityClass = 0, .species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON}, - .rest = {9, 0, 0x3D, 0x0A, 0x11, 0x10, 0x1E, 0x0E, 0x1C, 0x20, 0x04, 0x0C, 0xFF, 0xFF}, + .id = 9, + .easyChatWords = {0xA3D, 0x1011, 0xE1E, 0x201C, 0xC04, 0xFFFF}, }, { .name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")}, .otId = 0x71FC, .facilityClass = 0x2D, .species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA}, - .rest = {10, 0, 0x05, 0x0A, 0x06, 0x06, 0x0E, 0x16, 0x14, 0x0A, 0x00, 0x0C, 0xFF, 0xFF}, + .id = 10, + .easyChatWords = {0xA05, 0x606, 0x160E, 0xA14, 0xC00, 0xFFFF}, }, { .name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")}, .otId = 0xA39E, .facilityClass = 0x3A, .species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE}, - .rest = {11, 0, 0x0E, 0x28, 0x3D, 0x10, 0x0F, 0x24, 0x14, 0x0A, 0x23, 0x1E, 0x24, 0x10}, + .id = 11, + .easyChatWords = {0x280E, 0x103D, 0x240F, 0xA14, 0x1E23, 0x1024}, }, { .name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")}, .otId = 0xE590, .facilityClass = 0x19, .species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING}, - .rest = {12, 0, 0x20, 0x10, 0x2E, 0x06, 0x0B, 0x10, 0x22, 0x1E, 0x0F, 0x1E, 0x0B, 0x10}, + .id = 12, + .easyChatWords = {0x1020, 0x62E, 0x100B, 0x1E22, 0x1E0F, 0x100B}, }, { .name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")}, .otId = 0xD018, .facilityClass = 10, .species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING}, - .rest = {13, 0, 0x29, 0x0A, 0x3A, 0x06, 0x15, 0x0E, 0x35, 0x14, 0x34, 0x10, 0x1E, 0x06}, + .id = 13, + .easyChatWords = {0xA29, 0x63A, 0xE15, 0x1435, 0x1034, 0x61E}, }, { .name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")}, .otId = 0xBC75, .facilityClass = 14, .species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM}, - .rest = {14, 0, 0x01, 0x0A, 0x17, 0x10, 0x43, 0x12, 0x22, 0x1E, 0x0B, 0x10, 0x0F, 0x28}, + .id = 14, + .easyChatWords = {0xA01, 0x1017, 0x1243, 0x1E22, 0x100B, 0x280F}, }, { .name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")}, .otId = 0xFA02, .facilityClass = 0x20, .species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS}, - .rest = {15, 0, 0x0F, 0x1E, 0x04, 0x14, 0x2F, 0x10, 0x06, 0x10, 0x20, 0x10, 0x03, 0x0E}, + .id = 15, + .easyChatWords = {0x1E0F, 0x1404, 0x102F, 0x1006, 0x1020, 0xE03}, }, }; diff --git a/src/battle_dome.c b/src/battle_dome.c index 3677131ab..ba8cf6185 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -3,7 +3,7 @@ #include "battle.h" #include "battle_setup.h" #include "battle_tower.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "battle_message.h" #include "event_data.h" #include "overworld.h" diff --git a/src/battle_factory.c b/src/battle_factory.c index c2a3207a6..d7a2939b3 100644 --- a/src/battle_factory.c +++ b/src/battle_factory.c @@ -1670,7 +1670,7 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId) u32 otId = 0; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - u8 var_2C = gSaveBlock2Ptr->frontier.field_DE2[battleMode][lvlMode] / 7; + u8 var_2C = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] / 7; u8 var_28 = 0; gFacilityTrainerMons = gBattleFrontierMons; diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index 9ec9f8520..c53f10dca 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -27,7 +27,7 @@ void sub_8195980(void) gSaveBlock2Ptr->frontier.field_CA9_a = 0; gSaveBlock2Ptr->frontier.field_CA9_b = 0; if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode])) - gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = 0; + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0; saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); gTrainerBattleOpponent_A = 0; @@ -44,7 +44,7 @@ void sub_8195A38(void) gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC4[1]; break; case 1: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; break; case 2: gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0); @@ -63,7 +63,7 @@ void sub_8195AE4(void) gSaveBlock2Ptr->frontier.field_DC4[1] = gSpecialVar_0x8006; break; case 1: - gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = gSpecialVar_0x8006; + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = gSpecialVar_0x8006; break; case 2: if (gSpecialVar_0x8006) @@ -79,9 +79,9 @@ void sub_8195BB0(void) u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 50) + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 50) gSpecialVar_Result = Random() % 3; - else if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 99) + else if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 99) gSpecialVar_Result = 3; else gSpecialVar_Result = 4; @@ -105,14 +105,14 @@ void sub_8195C7C(void) u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); - if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 9999) + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999) { u16 wat = 0; - gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]++; + gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++; if (lvlMode < gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode]) wat = 1; - if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][wat] != 0) - gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]; + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][wat] != 0) + gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]; } } */ diff --git a/src/battle_message.c b/src/battle_message.c index 147d0295f..837f3e6d3 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -17,7 +17,7 @@ #include "menu.h" #include "recorded_battle.h" #include "international_string_util.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "battle_tower.h" #include "data2.h" diff --git a/src/battle_tent.c b/src/battle_tent.c index 4c4bd7fc3..9c66a0325 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -9,7 +9,7 @@ #include "random.h" #include "item.h" #include "battle_factory.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "constants/items.h" #include "constants/region_map_sections.h" diff --git a/src/field_poison.c b/src/field_poison.c index 6a519d90c..c11f01a45 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -6,7 +6,7 @@ #include "field_message_box.h" #include "strings.h" #include "rom_818CFC8.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "pokenav.h" #include "event_data.h" #include "script.h" diff --git a/src/field_specials.c b/src/field_specials.c index e2e069d28..522cbdf94 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2158,73 +2158,73 @@ void sub_8139F20(void) case 1: case 2: case 3: - if (gSaveBlock2Ptr->frontier.winStreaks[var][0] >= gSaveBlock2Ptr->frontier.winStreaks[var][1]) + if (gSaveBlock2Ptr->frontier.towerWinStreaks[var][0] >= gSaveBlock2Ptr->frontier.towerWinStreaks[var][1]) { - unk = gSaveBlock2Ptr->frontier.winStreaks[var][0]; + unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][0]; } else { - unk = gSaveBlock2Ptr->frontier.winStreaks[var][1]; + unk = gSaveBlock2Ptr->frontier.towerWinStreaks[var][1]; } break; case 4: - if (gSaveBlock2Ptr->frontier.field_D0C[0][0] >= gSaveBlock2Ptr->frontier.field_D0C[0][1]) + if (gSaveBlock2Ptr->frontier.domeWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.domeWinStreaks[0][1]) { - unk = gSaveBlock2Ptr->frontier.field_D0C[0][0]; + unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][0]; } else { - unk = gSaveBlock2Ptr->frontier.field_D0C[0][1]; + unk = gSaveBlock2Ptr->frontier.domeWinStreaks[0][1]; } break; case 5: - if (gSaveBlock2Ptr->frontier.field_DE2[0][0] >= gSaveBlock2Ptr->frontier.field_DE2[0][1]) + if (gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1]) { - unk = gSaveBlock2Ptr->frontier.field_DE2[0][0]; + unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][0]; } else { - unk = gSaveBlock2Ptr->frontier.field_DE2[0][1]; + unk = gSaveBlock2Ptr->frontier.factoryWinStreaks[0][1]; } break; case 6: - if (gSaveBlock2Ptr->frontier.field_DC8[0][0] >= gSaveBlock2Ptr->frontier.field_DC8[0][1]) + if (gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0] >= gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1]) { - unk = gSaveBlock2Ptr->frontier.field_DC8[0][0]; + unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][0]; } else { - unk = gSaveBlock2Ptr->frontier.field_DC8[0][1]; + unk = gSaveBlock2Ptr->frontier.palaceWinStreaks[0][1]; } break; case 7: - if (gSaveBlock2Ptr->frontier.field_DDA[0] >= gSaveBlock2Ptr->frontier.field_DDA[1]) + if (gSaveBlock2Ptr->frontier.arenaWinStreaks[0] >= gSaveBlock2Ptr->frontier.arenaWinStreaks[1]) { - unk = gSaveBlock2Ptr->frontier.field_DDA[0]; + unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[0]; } else { - unk = gSaveBlock2Ptr->frontier.field_DDA[1]; + unk = gSaveBlock2Ptr->frontier.arenaWinStreaks[1]; } break; case 8: - if (gSaveBlock2Ptr->frontier.field_E04[0] >= gSaveBlock2Ptr->frontier.field_E04[1]) + if (gSaveBlock2Ptr->frontier.pikeWinStreaks[0] >= gSaveBlock2Ptr->frontier.pikeWinStreaks[1]) { - unk = gSaveBlock2Ptr->frontier.field_E04[0]; + unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[0]; } else { - unk = gSaveBlock2Ptr->frontier.field_E04[1]; + unk = gSaveBlock2Ptr->frontier.pikeWinStreaks[1]; } break; case 9: - if (gSaveBlock2Ptr->frontier.field_E1A[0] >= gSaveBlock2Ptr->frontier.field_E1A[1]) + if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[0] >= gSaveBlock2Ptr->frontier.pyramidWinStreaks[1]) { - unk = gSaveBlock2Ptr->frontier.field_E1A[0]; + unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[0]; } else { - unk = gSaveBlock2Ptr->frontier.field_E1A[1]; + unk = gSaveBlock2Ptr->frontier.pyramidWinStreaks[1]; } break; } @@ -2253,7 +2253,7 @@ void sub_813A080(void) for (i = 0; i < 9; i++) { - if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.winStreaks[battleMode][lvlMode]) + if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode]) { gSpecialVar_0x8005 = 4; gSpecialVar_0x8006 = i + 5; @@ -2997,7 +2997,7 @@ void sub_813A8FC(void) { u8 string[32]; u32 x; - StringCopy(ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->frontier.frontierBattlePoints, STR_CONV_MODE_RIGHT_ALIGN, 4), gText_BP); + StringCopy(ConvertIntToDecimalStringN(string, gSaveBlock2Ptr->frontier.battlePoints, STR_CONV_MODE_RIGHT_ALIGN, 4), gText_BP); x = GetStringRightAlignXOffset(1, string, 48); AddTextPrinterParameterized(gUnknown_0203AB6D, 1, string, x, 1, 0, NULL); } @@ -3028,31 +3028,31 @@ void sub_813A988(void) void sub_813A9A4(void) { - if (gSaveBlock2Ptr->frontier.frontierBattlePoints < gSpecialVar_0x8004) + if (gSaveBlock2Ptr->frontier.battlePoints < gSpecialVar_0x8004) { - gSaveBlock2Ptr->frontier.frontierBattlePoints = 0; + gSaveBlock2Ptr->frontier.battlePoints = 0; } else { - gSaveBlock2Ptr->frontier.frontierBattlePoints -= gSpecialVar_0x8004; + gSaveBlock2Ptr->frontier.battlePoints -= gSpecialVar_0x8004; } } void sub_813A9D0(void) { - if (gSaveBlock2Ptr->frontier.frontierBattlePoints + gSpecialVar_0x8004 > 0x270F) + if (gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004 > 9999) { - gSaveBlock2Ptr->frontier.frontierBattlePoints = 0x270f; + gSaveBlock2Ptr->frontier.battlePoints = 9999; } else { - gSaveBlock2Ptr->frontier.frontierBattlePoints = gSaveBlock2Ptr->frontier.frontierBattlePoints + gSpecialVar_0x8004; + gSaveBlock2Ptr->frontier.battlePoints = gSaveBlock2Ptr->frontier.battlePoints + gSpecialVar_0x8004; } } u16 sub_813AA04(void) { - return gSaveBlock2Ptr->frontier.frontierBattlePoints; + return gSaveBlock2Ptr->frontier.battlePoints; } void sub_813AA18(void) diff --git a/src/fieldmap.c b/src/fieldmap.c index 96f5d2b85..70132ff17 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -1,7 +1,7 @@ #include "global.h" #include "overworld.h" #include "bg.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "constants/rgb.h" #include "fieldmap.h" #include "fldeff_80F9BCC.h" diff --git a/src/frontier_util.c b/src/frontier_util.c index 99419cc9a..bbf0c9af0 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -1782,6 +1782,7 @@ struct FrontierBrainMon extern const struct FrontierBrainMon sFrontierBrainsMons[][2][3]; +/* void CreateFrontierBrainPokemon(void) { s32 i, j; @@ -1830,3 +1831,4 @@ void CreateFrontierBrainPokemon(void) monPartyId++; } } +*/ diff --git a/src/item_menu.c b/src/item_menu.c index 7dbdf716f..37b1a961e 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2,7 +2,7 @@ #include "item_menu.h" #include "battle.h" #include "battle_controllers.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "berry_tag_screen.h" #include "bg.h" #include "constants/items.h" diff --git a/src/overworld.c b/src/overworld.c index 6fc880a54..cc945dea2 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -52,7 +52,7 @@ #include "tv.h" #include "scanline_effect.h" #include "wild_encounter.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "constants/abilities.h" #include "constants/map_types.h" #include "constants/maps.h" diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e1c2c79eb..df77e3cfb 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2,7 +2,7 @@ #include "main.h" #include "battle.h" #include "battle_anim.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "battle_message.h" #include "battle_tent.h" #include "bg.h" diff --git a/src/scrcmd.c b/src/scrcmd.c index fa3e21996..d3189bec7 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1,5 +1,5 @@ #include "global.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "battle_setup.h" #include "berry.h" #include "clock.h" diff --git a/src/start_menu.c b/src/start_menu.c index aaa9fec2c..c587d3820 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -12,7 +12,7 @@ #include "task.h" #include "overworld.h" #include "link.h" -#include "battle_frontier_2.h" +#include "frontier_util.h" #include "rom_818CFC8.h" #include "field_specials.h" #include "event_object_movement.h" diff --git a/src/tv.c b/src/tv.c index faa2767b0..d3d1e797b 100644 --- a/src/tv.c +++ b/src/tv.c @@ -1972,7 +1972,7 @@ void sub_80EDB44(void) show->rivalTrainer.nGoldSymbols ++; } } - show->rivalTrainer.battlePoints = gSaveBlock2Ptr->frontier.frontierBattlePoints; + show->rivalTrainer.battlePoints = gSaveBlock2Ptr->frontier.battlePoints; StringCopy(show->rivalTrainer.playerName, gSaveBlock2Ptr->playerName); tv_store_id_3x(show); show->rivalTrainer.language = gGameLanguage; -- cgit v1.2.3 From 37d742cbd86eab628e0d84d5957a805c407b0948 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 1 Nov 2018 15:06:50 +0100 Subject: Document recorded battle --- src/battle_main.c | 2 +- src/battle_tower.c | 22 +- src/frontier_util.c | 349 ++++++++++++++++- src/recorded_battle.c | 1045 +++++++------------------------------------------ 4 files changed, 479 insertions(+), 939 deletions(-) (limited to 'src') diff --git a/src/battle_main.c b/src/battle_main.c index 9f1ea3c01..e08e12194 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3027,7 +3027,7 @@ static void BattleStartClearSetData(void) if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gSaveBlock2Ptr->optionsBattleSceneOff == TRUE) gHitMarker |= HITMARKER_NO_ANIMATIONS; } - else if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) && GetBattleStyleInRecordedBattle()) + else if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)) && GetBattleSceneInRecordedBattle()) gHitMarker |= HITMARKER_NO_ANIMATIONS; gBattleScripting.battleStyle = gSaveBlock2Ptr->optionsBattleStyle; diff --git a/src/battle_tower.c b/src/battle_tower.c index 4518e6ad9..f02336ef5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -769,14 +769,14 @@ u8 GetFrontierTrainerFrontSpriteId(u16 trainerId) else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - return gFacilityClassToPicIndex[sub_818649C()]; + return gFacilityClassToPicIndex[GetRecordedBattleRecordMixFriendClass()]; else return gFacilityClassToPicIndex[gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass]; } else { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - return gFacilityClassToPicIndex[gApprentices[sub_81864A8()].facilityClass]; + return gFacilityClassToPicIndex[gApprentices[GetRecordedBattleApprenticeId()].facilityClass]; else return gFacilityClassToPicIndex[gApprentices[gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id].facilityClass]; } @@ -807,7 +807,7 @@ u8 GetFrontierOpponentClass(u16 trainerId) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - trainerClass = gFacilityClassToTrainerClass[sub_818649C()]; + trainerClass = gFacilityClassToTrainerClass[GetRecordedBattleRecordMixFriendClass()]; } else { @@ -819,7 +819,7 @@ u8 GetFrontierOpponentClass(u16 trainerId) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - trainerClass = gFacilityClassToTrainerClass[gApprentices[sub_81864A8()].facilityClass]; + trainerClass = gFacilityClassToTrainerClass[gApprentices[GetRecordedBattleApprenticeId()].facilityClass]; } else { @@ -847,14 +847,14 @@ static u8 GetFrontierTrainerFacilityClass(u16 trainerId) else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - facilityClass = sub_818649C(); + facilityClass = GetRecordedBattleRecordMixFriendClass(); else facilityClass = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass; } else { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - facilityClass = gApprentices[sub_81864A8()].facilityClass; + facilityClass = gApprentices[GetRecordedBattleApprenticeId()].facilityClass; else facilityClass = gApprentices[gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].id].facilityClass; } @@ -907,8 +907,8 @@ void GetFrontierTrainerName(u8 *dst, u16 trainerId) if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - id = sub_81864A8(); - language = sub_81864C0(); + id = GetRecordedBattleApprenticeId(); + language = GetRecordedBattleApprenticeLanguage(); } else { @@ -1297,7 +1297,7 @@ static void HandleSpecialTrainerBattleEnd(void) { s32 i; - sub_81864CC(); + RecordedBattle_SaveBattleOutcome(); switch (gBattleScripting.specialTrainerBattleType) { case SPECIAL_BATTLE_TOWER: @@ -2527,14 +2527,14 @@ void GetBattleTowerTrainerLanguage(u8 *dst, u16 trainerId) else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - *dst = sub_81864B4(); + *dst = GetRecordedBattleRecordMixFriendLanguage(); else *dst = gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].language; } else { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - *dst = sub_81864C0(); + *dst = GetRecordedBattleApprenticeLanguage(); else *dst = gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].language; } diff --git a/src/frontier_util.c b/src/frontier_util.c index bbf0c9af0..729b1e622 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -61,7 +61,7 @@ static void ShowArenaResultsWindow(void); static void ShowPyramidResultsWindow(void); static void ShowLinkContestResultsWindow(void); u8 sub_81A3610(void); -void sub_81A51A8(u8); +static void CopyFrontierBrainText(bool8 playerWonText); void sub_81A5030(u8); // const rom data @@ -987,7 +987,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId) if (trainerId == TRAINER_EREADER) FrontierSpeechToString(gSaveBlock2Ptr->frontier.ereaderTrainer.greeting); else if (trainerId == TRAINER_FRONTIER_BRAIN) - sub_81A51A8(0); + CopyFrontierBrainText(FALSE); else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) FrontierSpeechToString(gFacilityTrainers[trainerId].speechBefore); else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) @@ -1002,7 +1002,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - sub_81A51A8(0); + CopyFrontierBrainText(FALSE); } else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) { @@ -1011,14 +1011,14 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId) else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - FrontierSpeechToString(sub_81864E0()); + FrontierSpeechToString(GetRecordedBattleEasyChatSpeech()); else FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechWon); } else { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - FrontierSpeechToString(sub_81864E0()); + FrontierSpeechToString(GetRecordedBattleEasyChatSpeech()); else FrontierSpeechToString(gSaveBlock2Ptr->apprentices[trainerId - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords); } @@ -1030,7 +1030,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - sub_81A51A8(1); + CopyFrontierBrainText(TRUE); } else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) { @@ -1039,7 +1039,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId) else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) - FrontierSpeechToString(sub_81864E0()); + FrontierSpeechToString(GetRecordedBattleEasyChatSpeech()); else FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].speechLost); } @@ -1047,7 +1047,7 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId) { if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) { - trainerId = sub_81864A8(); + trainerId = GetRecordedBattleApprenticeId(); FrontierSpeechToString(gApprentices[trainerId].easyChatWords); } else @@ -1766,8 +1766,6 @@ void SetFrontierBrainTrainerGfxId(void) VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]); } -s32 sub_81A513C(void); - #define FRONTIER_BRAIN_OTID 61226 struct FrontierBrainMon @@ -1782,16 +1780,16 @@ struct FrontierBrainMon extern const struct FrontierBrainMon sFrontierBrainsMons[][2][3]; -/* +#ifdef NONMATCHING void CreateFrontierBrainPokemon(void) { s32 i, j; s32 monCountInBits; s32 monPartyId; - s32 monLevel; + s32 monLevel = 0; u8 friendship; s32 facility = VarGet(VAR_FRONTIER_FACILITY); - s32 symbol = sub_81A513C(); + s32 symbol = GetFronterBrainSymbol(); if (facility == FRONTIER_FACILITY_DOME) monCountInBits = GetTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN)); @@ -1831,4 +1829,327 @@ void CreateFrontierBrainPokemon(void) monPartyId++; } } -*/ +#else +NAKED +void CreateFrontierBrainPokemon(void) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x44\n\ + ldr r0, =0x000040cf\n\ + bl VarGet\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x20]\n\ + bl GetFronterBrainSymbol\n\ + str r0, [sp, 0x24]\n\ + ldr r0, [sp, 0x20]\n\ + cmp r0, 0x1\n\ + bne _081A4E44\n\ + ldr r0, =0x000003fe\n\ + bl TrainerIdToDomeTournamentId\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + bl GetTrainerMonCountInBits\n\ + adds r4, r0, 0\n\ + b _081A4E46\n\ + .pool\n\ +_081A4E44:\n\ + movs r4, 0x7\n\ +_081A4E46:\n\ + bl ZeroEnemyPartyMons\n\ + movs r1, 0\n\ + str r1, [sp, 0x18]\n\ + bl SetFacilityPtrsGetLevel\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x1C]\n\ + movs r2, 0\n\ + str r2, [sp, 0x14]\n\ +_081A4E5C:\n\ + movs r0, 0x1\n\ + ands r0, r4\n\ + asrs r4, 1\n\ + str r4, [sp, 0x30]\n\ + ldr r3, [sp, 0x14]\n\ + adds r3, 0x1\n\ + str r3, [sp, 0x28]\n\ + cmp r0, 0\n\ + bne _081A4E70\n\ + b _081A4FC4\n\ +_081A4E70:\n\ + ldr r4, [sp, 0x14]\n\ + lsls r4, 2\n\ + mov r9, r4\n\ + ldr r0, [sp, 0x24]\n\ + lsls r0, 4\n\ + str r0, [sp, 0x38]\n\ + ldr r1, [sp, 0x20]\n\ + lsls r1, 4\n\ + str r1, [sp, 0x34]\n\ + ldr r2, [sp, 0x1C]\n\ + lsls r2, 24\n\ + str r2, [sp, 0x3C]\n\ + ldr r3, [sp, 0x18]\n\ + adds r3, 0x1\n\ + str r3, [sp, 0x2C]\n\ + ldr r0, [sp, 0x14]\n\ + add r0, r9\n\ + lsls r0, 2\n\ + mov r8, r0\n\ +_081A4E96:\n\ + bl Random\n\ + adds r4, r0, 0\n\ + bl Random\n\ + lsls r4, 16\n\ + lsrs r7, r4, 16\n\ + lsls r0, 16\n\ + orrs r7, r0\n\ + ldr r0, =0x0000ef2a\n\ + adds r1, r7, 0\n\ + bl IsShinyOtIdPersonality\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _081A4E96\n\ + ldr r4, [sp, 0x38]\n\ + ldr r1, [sp, 0x24]\n\ + subs r0, r4, r1\n\ + lsls r5, r0, 2\n\ + mov r2, r8\n\ + adds r4, r2, r5\n\ + ldr r3, [sp, 0x34]\n\ + ldr r1, [sp, 0x20]\n\ + subs r0, r3, r1\n\ + lsls r6, r0, 3\n\ + adds r4, r6\n\ + ldr r2, =sFrontierBrainsMons\n\ + adds r4, r2\n\ + adds r0, r7, 0\n\ + bl GetNatureFromPersonality\n\ + ldrb r1, [r4, 0x5]\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r1, r0\n\ + bne _081A4E96\n\ + ldr r4, [sp, 0x18]\n\ + movs r0, 0x64\n\ + adds r3, r4, 0\n\ + muls r3, r0\n\ + mov r8, r3\n\ + ldr r1, =gEnemyParty\n\ + add r1, r8\n\ + mov r10, r1\n\ + ldr r4, [sp, 0x14]\n\ + add r4, r9\n\ + lsls r4, 2\n\ + adds r0, r4, r5\n\ + adds r0, r6\n\ + ldr r2, =sFrontierBrainsMons\n\ + adds r0, r2\n\ + ldrh r1, [r0]\n\ + ldr r3, [sp, 0x3C]\n\ + lsrs r2, r3, 24\n\ + ldrb r3, [r0, 0x4]\n\ + movs r0, 0x1\n\ + str r0, [sp]\n\ + str r7, [sp, 0x4]\n\ + str r0, [sp, 0x8]\n\ + ldr r0, =0x0000ef2a\n\ + str r0, [sp, 0xC]\n\ + mov r0, r10\n\ + bl CreateMon\n\ + ldr r0, =sFrontierBrainsMons\n\ + adds r5, r0\n\ + adds r5, r6, r5\n\ + adds r4, r5, r4\n\ + adds r4, 0x2\n\ + mov r0, r10\n\ + movs r1, 0xC\n\ + adds r2, r4, 0\n\ + bl SetMonData\n\ + movs r7, 0\n\ + mov r6, r8\n\ + ldr r3, =gEnemyParty\n\ +_081A4F32:\n\ + adds r1, r7, 0\n\ + adds r1, 0x1A\n\ + ldr r0, [sp, 0x14]\n\ + add r0, r9\n\ + lsls r4, r0, 2\n\ + adds r2, r5, r4\n\ + adds r0, r7, 0x6\n\ + adds r2, r0\n\ + adds r0, r6, r3\n\ + str r3, [sp, 0x40]\n\ + bl SetMonData\n\ + adds r7, 0x1\n\ + ldr r3, [sp, 0x40]\n\ + cmp r7, 0x5\n\ + ble _081A4F32\n\ + movs r1, 0xFF\n\ + add r0, sp, 0x10\n\ + strb r1, [r0]\n\ + movs r7, 0\n\ + ldr r1, [sp, 0x18]\n\ + movs r2, 0x64\n\ + adds r6, r1, 0\n\ + muls r6, r2\n\ + ldr r3, =gUnknown_08611578\n\ + mov r8, r3\n\ + ldr r3, =gEnemyParty\n\ + adds r5, r4, 0\n\ +_081A4F6A:\n\ + ldr r4, [sp, 0x38]\n\ + ldr r0, [sp, 0x24]\n\ + subs r1, r4, r0\n\ + lsls r1, 2\n\ + adds r1, r5, r1\n\ + ldr r2, [sp, 0x34]\n\ + ldr r4, [sp, 0x20]\n\ + subs r0, r2, r4\n\ + lsls r0, 3\n\ + adds r1, r0\n\ + add r1, r8\n\ + ldrh r4, [r1]\n\ + lsls r2, r7, 24\n\ + lsrs r2, 24\n\ + adds r0, r6, r3\n\ + adds r1, r4, 0\n\ + str r3, [sp, 0x40]\n\ + bl SetMonMoveSlot\n\ + ldr r3, [sp, 0x40]\n\ + cmp r4, 0xDA\n\ + bne _081A4F9C\n\ + movs r1, 0\n\ + add r0, sp, 0x10\n\ + strb r1, [r0]\n\ +_081A4F9C:\n\ + adds r5, 0x2\n\ + adds r7, 0x1\n\ + cmp r7, 0x3\n\ + ble _081A4F6A\n\ + ldr r0, [sp, 0x18]\n\ + movs r1, 0x64\n\ + adds r4, r0, 0\n\ + muls r4, r1\n\ + ldr r0, =gEnemyParty\n\ + adds r4, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0x20\n\ + add r2, sp, 0x10\n\ + bl SetMonData\n\ + adds r0, r4, 0\n\ + bl CalculateMonStats\n\ + ldr r2, [sp, 0x2C]\n\ + str r2, [sp, 0x18]\n\ +_081A4FC4:\n\ + ldr r4, [sp, 0x30]\n\ + ldr r3, [sp, 0x28]\n\ + str r3, [sp, 0x14]\n\ + cmp r3, 0x2\n\ + bgt _081A4FD0\n\ + b _081A4E5C\n\ +_081A4FD0:\n\ + add sp, 0x44\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ +"); +} +#endif + +u16 sub_81A4FF0(u8 monPartyId) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 symbol = GetFronterBrainSymbol(); + + return sFrontierBrainsMons[facility][symbol][monPartyId].species; +} + +void sub_81A5030(u8 facility) +{ + gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN; + VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]); +} + +u16 sub_81A5060(u8 monId, u8 moveSlotId) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 symbol = GetFronterBrainSymbol(); + + return sFrontierBrainsMons[facility][symbol][monId].moves[moveSlotId]; +} + +u8 sub_81A50B0(u8 monPartyId) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 symbol = GetFronterBrainSymbol(); + + return sFrontierBrainsMons[facility][symbol][monPartyId].nature; +} + +u8 sub_81A50F0(u8 monId, u8 evStatId) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 symbol = GetFronterBrainSymbol(); + + return sFrontierBrainsMons[facility][symbol][monId].evs[evStatId]; +} + +s32 GetFronterBrainSymbol(void) +{ + s32 facility = VarGet(VAR_FRONTIER_FACILITY); + s32 symbol = sub_81A3B30(facility); + + if (symbol == 2) + { + u16 winStreak = GetCurrentFacilityWinStreak(); + if (winStreak + gUnknown_08611550[facility][3] == gUnknown_08611550[facility][0]) + symbol = 0; + else if (winStreak + gUnknown_08611550[facility][3] == gUnknown_08611550[facility][1]) + symbol = 1; + else if (winStreak + gUnknown_08611550[facility][3] > gUnknown_08611550[facility][1] + && (winStreak + gUnknown_08611550[facility][3] - gUnknown_08611550[facility][1]) % gUnknown_08611550[facility][2] == 0) + symbol = 1; + } + return symbol; +} + +extern const u8 *const *const gUnknown_08611DB0[]; +extern const u8 *const *const gUnknown_08611DB8[]; + +static void CopyFrontierBrainText(bool8 playerWonText) +{ + s32 facility; + s32 symbol; + + if (gBattleTypeFlags & BATTLE_TYPE_RECORDED) + { + facility = GetRecordedBattleFrontierFacility(); + symbol = GetRecordedBattleFronterBrainSymbol(); + } + else + { + facility = VarGet(VAR_FRONTIER_FACILITY); + symbol = GetFronterBrainSymbol(); + } + + switch (playerWonText) + { + case FALSE: + StringCopy(gStringVar4, gUnknown_08611DB0[symbol][facility]); + break; + case TRUE: + StringCopy(gStringVar4, gUnknown_08611DB8[symbol][facility]); + break; + } +} diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 0a199f289..eba7039f5 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -14,6 +14,8 @@ #include "task.h" #include "text.h" #include "battle_setup.h" +#include "frontier_util.h" +#include "constants/trainers.h" #define BATTLER_RECORD_SIZE 664 #define ILLEGAL_BATTLE_TYPES ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \ @@ -55,18 +57,18 @@ struct RecordedBattleSave u16 opponentB; u16 partnerId; u16 field_4FA; - u8 field_4FC; - u8 field_4FD; - u8 field_4FE; - u8 battleStyle:1; + u8 lvlMode; + u8 frontierFacility; + u8 frontierBrainSymbol; + u8 battleScene:1; u8 textSpeed:3; u32 AI_scripts; - u8 field_504[8]; - u8 field_50C; - u8 field_50D; - u16 field_50E[6]; - u8 field_51A; - u8 field_51B; + u8 recordMixFriendName[PLAYER_NAME_LENGTH + 1]; + u8 recordMixFriendClass; + u8 apprenticeId; + u16 easyChatSpeech[6]; + u8 recordMixFriendLanguage; + u8 apprenticeLanguage; u8 battleRecord[MAX_BATTLERS_COUNT][BATTLER_RECORD_SIZE]; u32 checksum; }; @@ -78,13 +80,13 @@ 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 u8 sUnknown_0203C7AD = 0; +EWRAM_DATA static u8 sLvlMode = 0; EWRAM_DATA static u8 sFrontierFacility = 0; -EWRAM_DATA static u8 sUnknown_0203C7AF = 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 static u8 sBattleStyle = 0; +EWRAM_DATA static u8 sBattleScene = 0; EWRAM_DATA static u8 sTextSpeed = 0; EWRAM_DATA static u32 sBattleFlags = 0; EWRAM_DATA static u32 sAI_Scripts = 0; @@ -93,17 +95,15 @@ EWRAM_DATA static struct Pokemon sSavedOpponentParty[PARTY_SIZE] = {0}; EWRAM_DATA static u16 sPlayerMonMoves[2][4] = {0}; EWRAM_DATA static struct PlayerInfo sPlayers[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; -EWRAM_DATA static u8 sUnknown_0203CCDA = 0; -EWRAM_DATA static u16 sUnknown_0203CCDC[6] = {0}; -EWRAM_DATA static u8 sUnknown_0203CCE8 = 0; - -extern u32 sub_81A513C(void); +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 u8 sBattleOutcome = 0; // this file's functions static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2); -static bool32 AllocTryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst); +static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst); static void RecordedBattle_RestoreSavedParties(void); static void CB2_RecordedBattle(void); @@ -140,7 +140,7 @@ void sub_8184E58(void) { gRecordedBattleRngSeed = gRngValue; sFrontierFacility = VarGet(VAR_FRONTIER_FACILITY); - sUnknown_0203C7AF = sub_81A513C(); + sFrontierBrainSymbol = GetFronterBrainSymbol(); } else if (sUnknown_0203C7AC == 2) { @@ -297,7 +297,7 @@ static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2) bool32 CanCopyRecordedBattleSaveData(void) { struct RecordedBattleSave *dst = AllocZeroed(sizeof(struct RecordedBattleSave)); - bool32 ret = AllocTryCopyRecordedBattleSaveData(dst); + bool32 ret = CopyRecordedBattleFromSave(dst); Free(dst); return ret; } @@ -314,26 +314,29 @@ static bool32 IsRecordedBattleSaveValid(struct RecordedBattleSave *save) return TRUE; } -static bool32 sub_81852F0(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection) +static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct RecordedBattleSave *saveSection) { - memset(saveSection, 0, sizeof(struct SaveSection)); + memset(saveSection, 0, 0x1000); memcpy(saveSection, battleSave, sizeof(*battleSave)); saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4); if (sub_8153634(31, (void*)(saveSection)) != 1) return FALSE; - - return TRUE; + else + return TRUE; } -#ifdef NONMATCHING -u32 MoveRecordedBattleToSaveData(void) +bool32 MoveRecordedBattleToSaveData(void) { s32 i, j; - u8 var = 0; - struct RecordedBattleSave *battleSave = AllocZeroed(sizeof(struct RecordedBattleSave)); - struct SaveSection *savSection = AllocZeroed(sizeof(struct SaveSection)); + bool32 ret; + struct RecordedBattleSave *battleSave, *savSection; + u8 var; + + var = 0; + battleSave = AllocZeroed(sizeof(struct RecordedBattleSave)); + savSection = AllocZeroed(0x1000); for (i = 0; i < PARTY_SIZE; i++) { @@ -357,8 +360,7 @@ u32 MoveRecordedBattleToSaveData(void) if (sBattleFlags & BATTLE_TYPE_LINK) { - battleSave->battleFlags = (sBattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20)); - battleSave->battleFlags |= BATTLE_TYPE_x2000000; + battleSave->battleFlags = (sBattleFlags & ~(BATTLE_TYPE_LINK | BATTLE_TYPE_20)) | BATTLE_TYPE_x2000000; if (sBattleFlags & BATTLE_TYPE_IS_MASTER) { @@ -390,884 +392,101 @@ u32 MoveRecordedBattleToSaveData(void) battleSave->opponentB = gTrainerBattleOpponent_B; battleSave->partnerId = gPartnerTrainerId; battleSave->field_4FA = gUnknown_0203C7B4; - battleSave->field_4FC = gSaveBlock2Ptr->field_CA9_b; - battleSave->field_4FD = sFrontierFacility; - battleSave->field_4FE = sUnknown_0203C7AF; - battleSave->battleStyle = gSaveBlock2Ptr->optionsBattleStyle; + battleSave->lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + battleSave->frontierFacility = sFrontierFacility; + battleSave->frontierBrainSymbol = sFrontierBrainSymbol; + battleSave->battleScene = gSaveBlock2Ptr->optionsBattleSceneOff; battleSave->textSpeed = gSaveBlock2Ptr->optionsTextSpeed; battleSave->AI_scripts = sAI_Scripts; - /* Can't match it without proper knowledge of the Saveblock 2. - if (gTrainerBattleOpponent_A >= 300 && gTrainerBattleOpponent_A <= 399) + if (gTrainerBattleOpponent_A >= TRAINER_RECORD_MIXING_FRIEND && gTrainerBattleOpponent_A < TRAINER_RECORD_MIXING_APPRENTICE) { - for (i = 0; i < 8; i++) - { - battleSave->field_504[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_4[i]; - } - battleSave->field_50C = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_1; + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) + battleSave->recordMixFriendName[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].name[i]; + battleSave->recordMixFriendClass = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].facilityClass; - if (sUnknown_0203CCE8 == 1) + if (sBattleOutcome == B_OUTCOME_WON) { for (i = 0; i < 6; i++) - { - battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_28[i]; - } + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechLost[i]; } else { for (i = 0; i < 6; i++) - { - battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_1C[i]; - } + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechWon[i]; } - battleSave->field_51A = gSaveBlock2Ptr->records[gTrainerBattleOpponent_A - 300].field_E4; + battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].language; } - else if (gTrainerBattleOpponent_B >= 300 && gTrainerBattleOpponent_B <= 399) + else if (gTrainerBattleOpponent_B >= TRAINER_RECORD_MIXING_FRIEND && gTrainerBattleOpponent_B < TRAINER_RECORD_MIXING_APPRENTICE) { - for (i = 0; i < 8; i++) - { - battleSave->field_504[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_4[i]; - } - battleSave->field_50C = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_1; + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) + battleSave->recordMixFriendName[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].name[i]; + battleSave->recordMixFriendClass = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].facilityClass; - if (sUnknown_0203CCE8 == 1) + if (sBattleOutcome == B_OUTCOME_WON) { for (i = 0; i < 6; i++) - { - battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_28[i]; - } + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechLost[i]; } else { for (i = 0; i < 6; i++) - { - battleSave->field_50E[i] = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_1C[i]; - } + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechWon[i]; } - battleSave->field_51A = gSaveBlock2Ptr->records[gTrainerBattleOpponent_B - 300].field_E4; + battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].language; } - else if (gPartnerTrainerId >= 300 && gPartnerTrainerId <= 399) + else if (gPartnerTrainerId >= TRAINER_RECORD_MIXING_FRIEND && gPartnerTrainerId < TRAINER_RECORD_MIXING_APPRENTICE) { - for (i = 0; i < 8; i++) - { - battleSave->field_504[i] = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_4[i]; - } - battleSave->field_50C = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_1; + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) + battleSave->recordMixFriendName[i] = gSaveBlock2Ptr->frontier.towerRecords[gPartnerTrainerId - TRAINER_RECORD_MIXING_FRIEND].name[i]; + battleSave->recordMixFriendClass = gSaveBlock2Ptr->frontier.towerRecords[gPartnerTrainerId - TRAINER_RECORD_MIXING_FRIEND].facilityClass; - if (sUnknown_0203CCE8 == 1) - { - for (i = 0; i < 6; i++) - { - battleSave->field_50E[i] = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_28[i]; - } - } - else + battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gPartnerTrainerId - TRAINER_RECORD_MIXING_FRIEND].language; + } + + if (gTrainerBattleOpponent_A >= TRAINER_RECORD_MIXING_APPRENTICE) + { + battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].id; + for (i = 0; i < 6; i++) + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords[i]; + battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].language; + } + else if (gTrainerBattleOpponent_B >= TRAINER_RECORD_MIXING_APPRENTICE) + { + battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].id; + for (i = 0; i < 6; i++) + battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords[i]; + battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].language; + } + else if (gPartnerTrainerId >= TRAINER_RECORD_MIXING_APPRENTICE) + { + battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gPartnerTrainerId - TRAINER_RECORD_MIXING_APPRENTICE].id; + + battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gPartnerTrainerId - TRAINER_RECORD_MIXING_APPRENTICE].language; + } + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + for (j = 0; j < BATTLER_RECORD_SIZE; j++) { - for (i = 0; i < 6; i++) - { - battleSave->field_50E[i] = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_1C[i]; - } + battleSave->battleRecord[i][j] = sBattleRecords[i][j]; } - battleSave->field_51A = gSaveBlock2Ptr->records[gPartnerTrainerId - 300].field_E4; } - */ -} + while (1) + { + ret = RecordedBattleToSave(battleSave, savSection); + if (ret == TRUE) + break; + var++; + if (var >= 3) + break; + } -#else -NAKED -u32 MoveRecordedBattleToSaveData(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0xC\n\ - movs r0, 0\n\ - str r0, [sp, 0x4]\n\ - movs r0, 0xF8\n\ - lsls r0, 4\n\ - bl AllocZeroed\n\ - adds r7, r0, 0\n\ - movs r0, 0x80\n\ - lsls r0, 5\n\ - bl AllocZeroed\n\ - str r0, [sp]\n\ - movs r6, 0\n\ -_0818535E:\n\ - movs r0, 0x64\n\ - adds r4, r6, 0\n\ - muls r4, r0\n\ - adds r5, r7, r4\n\ - ldr r1, =sSavedPlayerParty\n\ - adds r1, r4, r1\n\ - adds r0, r5, 0\n\ - movs r2, 0x64\n\ - bl memcpy\n\ - movs r1, 0x96\n\ - lsls r1, 2\n\ - adds r5, r1\n\ - ldr r0, =sSavedOpponentParty\n\ - adds r4, r0\n\ - adds r0, r5, 0\n\ - adds r1, r4, 0\n\ - movs r2, 0x64\n\ - bl memcpy\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _0818535E\n\ - movs r6, 0\n\ - ldr r2, =gSaveBlock2Ptr\n\ - mov r9, r2\n\ - movs r3, 0x9A\n\ - lsls r3, 3\n\ - adds r3, r7, r3\n\ - str r3, [sp, 0x8]\n\ - ldr r5, =sPlayers\n\ - mov r8, r6\n\ - mov r12, r6\n\ - movs r4, 0x96\n\ - lsls r4, 3\n\ - adds r4, r7\n\ - mov r10, r4\n\ - ldr r0, =0x000004e4\n\ - adds r4, r7, r0\n\ -_081853AC:\n\ - lsls r1, r6, 3\n\ - ldr r0, =sPlayers\n\ - adds r0, 0x4\n\ - mov r3, r8\n\ - adds r2, r3, r0\n\ - add r1, r10\n\ - movs r3, 0x7\n\ -_081853BA:\n\ - ldrb r0, [r2]\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r1, 0x1\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _081853BA\n\ - ldr r0, [sp, 0x8]\n\ - adds r1, r0, r6\n\ - ldrb r0, [r5, 0xC]\n\ - strb r0, [r1]\n\ - ldrh r0, [r5, 0x10]\n\ - strb r0, [r4]\n\ - ldrh r0, [r5, 0xE]\n\ - strb r0, [r4, 0xC]\n\ - ldr r1, =0x000004d4\n\ - adds r0, r7, r1\n\ - add r0, r12\n\ - ldr r1, [r5]\n\ - str r1, [r0]\n\ - adds r5, 0x14\n\ - movs r2, 0x14\n\ - add r8, r2\n\ - movs r3, 0x4\n\ - add r12, r3\n\ - adds r4, 0x1\n\ - adds r6, 0x1\n\ - cmp r6, 0x3\n\ - ble _081853AC\n\ - movs r4, 0x9D\n\ - lsls r4, 3\n\ - adds r1, r7, r4\n\ - ldr r5, =gRecordedBattleRngSeed\n\ - ldr r0, [r5]\n\ - str r0, [r1]\n\ - ldr r0, =sBattleFlags\n\ - ldr r2, [r0]\n\ - movs r0, 0x2\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _081854DC\n\ - ldr r1, =0x000004ec\n\ - adds r3, r7, r1\n\ - movs r1, 0x23\n\ - negs r1, r1\n\ - ands r1, r2\n\ - movs r0, 0x80\n\ - lsls r0, 18\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ - movs r0, 0x4\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _08185454\n\ - movs r0, 0x80\n\ - lsls r0, 24\n\ - orrs r1, r0\n\ - str r1, [r3]\n\ - b _081854E2\n\ - .pool\n\ -_08185454:\n\ - movs r0, 0x40\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - beq _081854E2\n\ - ldr r2, =sPlayers\n\ - ldrh r0, [r2, 0xE]\n\ - cmp r0, 0x1\n\ - beq _081854A8\n\ - cmp r0, 0x1\n\ - bgt _08185474\n\ - cmp r0, 0\n\ - beq _0818547E\n\ - b _081854E2\n\ - .pool\n\ -_08185474:\n\ - cmp r0, 0x2\n\ - beq _0818547E\n\ - cmp r0, 0x3\n\ - beq _081854A8\n\ - b _081854E2\n\ -_0818547E:\n\ - ldr r3, =gUnknown_0203C7B4\n\ - ldrb r1, [r3]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r4, =sPlayers\n\ - adds r0, r4\n\ - ldrh r1, [r0, 0xE]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _081854E2\n\ - ldr r5, =0x000004ec\n\ - adds r0, r7, r5\n\ - b _081854C4\n\ - .pool\n\ -_081854A8:\n\ - ldr r0, =gUnknown_0203C7B4\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, =sPlayers\n\ - adds r0, r1\n\ - ldrh r1, [r0, 0xE]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _081854E2\n\ - ldr r2, =0x000004ec\n\ - adds r0, r7, r2\n\ -_081854C4:\n\ - ldr r1, [r0]\n\ - movs r2, 0x80\n\ - lsls r2, 24\n\ - orrs r1, r2\n\ - str r1, [r0]\n\ - b _081854E2\n\ - .pool\n\ -_081854DC:\n\ - ldr r3, =0x000004ec\n\ - adds r0, r7, r3\n\ - str r2, [r0]\n\ -_081854E2:\n\ - ldr r4, =gTrainerBattleOpponent_A\n\ - ldrh r1, [r4]\n\ - ldr r5, =0x000004f4\n\ - adds r0, r7, r5\n\ - strh r1, [r0]\n\ - ldr r0, =gTrainerBattleOpponent_B\n\ - ldrh r1, [r0]\n\ - ldr r2, =0x000004f6\n\ - adds r0, r7, r2\n\ - strh r1, [r0]\n\ - ldr r3, =gPartnerTrainerId\n\ - ldrh r1, [r3]\n\ - movs r4, 0x9F\n\ - lsls r4, 3\n\ - adds r0, r7, r4\n\ - strh r1, [r0]\n\ - ldr r5, =gUnknown_0203C7B4\n\ - ldrb r1, [r5]\n\ - adds r2, 0x4\n\ - adds r0, r7, r2\n\ - strh r1, [r0]\n\ - mov r3, r9\n\ - ldr r0, [r3]\n\ - ldr r4, =0x00000ca9\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - lsls r0, 30\n\ - lsrs r0, 30\n\ - ldr r5, =0x000004fc\n\ - adds r1, r7, r5\n\ - strb r0, [r1]\n\ - ldr r0, =sFrontierFacility\n\ - ldrb r1, [r0]\n\ - adds r2, 0x3\n\ - adds r0, r7, r2\n\ - strb r1, [r0]\n\ - ldr r3, =sUnknown_0203C7AF\n\ - ldrb r1, [r3]\n\ - ldr r4, =0x000004fe\n\ - adds r0, r7, r4\n\ - strb r1, [r0]\n\ - mov r5, r9\n\ - ldr r0, [r5]\n\ - ldrb r1, [r0, 0x15]\n\ - lsls r1, 29\n\ - ldr r0, =0x000004ff\n\ - adds r3, r7, r0\n\ - lsrs r1, 31\n\ - ldrb r2, [r3]\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - ldr r1, [r5]\n\ - ldrb r1, [r1, 0x14]\n\ - lsls r1, 29\n\ - lsrs r1, 28\n\ - movs r2, 0xF\n\ - negs r2, r2\n\ - ands r0, r2\n\ - orrs r0, r1\n\ - strb r0, [r3]\n\ - movs r2, 0xA0\n\ - lsls r2, 3\n\ - adds r1, r7, r2\n\ - ldr r3, =sAI_Scripts\n\ - ldr r0, [r3]\n\ - str r0, [r1]\n\ - ldr r4, =0xfffffed4\n\ - adds r1, r4, 0\n\ - ldr r5, =gTrainerBattleOpponent_A\n\ - ldrh r5, [r5]\n\ - adds r0, r1, r5\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x63\n\ - bls _08185580\n\ - b _081856C4\n\ -_08185580:\n\ - movs r6, 0\n\ - ldr r0, =0x00000504\n\ - adds r3, r7, r0\n\ - mov r10, r9\n\ - ldr r1, =gTrainerBattleOpponent_A\n\ - mov r12, r1\n\ - adds r2, r4, 0\n\ - mov r8, r2\n\ - ldr r4, =0x0000073c\n\ -_08185592:\n\ - adds r2, r3, r6\n\ - mov r5, r10\n\ - ldr r1, [r5]\n\ - mov r5, r12\n\ - ldrh r0, [r5]\n\ - add r0, r8\n\ - movs r5, 0xEC\n\ - muls r0, r5\n\ - adds r0, r6, r0\n\ - adds r1, r4\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - strb r0, [r2]\n\ - adds r6, 0x1\n\ - cmp r6, 0x7\n\ - ble _08185592\n\ - mov r0, r9\n\ - ldr r2, [r0]\n\ - ldr r1, =gTrainerBattleOpponent_A\n\ - ldrh r0, [r1]\n\ - ldr r3, =0xfffffed4\n\ - adds r0, r3\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r2, r0\n\ - ldr r4, =0x00000739\n\ - adds r2, r4\n\ - ldrb r1, [r2]\n\ - ldr r5, =0x0000050c\n\ - adds r0, r7, r5\n\ - strb r1, [r0]\n\ - ldr r1, =sUnknown_0203CCE8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x1\n\ - bne _08185664\n\ - movs r6, 0\n\ - ldr r2, =0x0000050e\n\ - adds r4, r7, r2\n\ - mov r10, r9\n\ - ldr r5, =gTrainerBattleOpponent_A\n\ - mov r8, r5\n\ - adds r5, r3, 0\n\ -_081855E6:\n\ - lsls r3, r6, 1\n\ - mov r0, r10\n\ - ldr r2, [r0]\n\ - mov r1, r8\n\ - ldrh r0, [r1]\n\ - adds r0, r5\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r3, r0\n\ - movs r0, 0xEC\n\ - lsls r0, 3\n\ - adds r2, r0\n\ - adds r2, r3\n\ - ldrh r0, [r2]\n\ - strh r0, [r4]\n\ - adds r4, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _081855E6\n\ - b _08185696\n\ - .pool\n\ -_08185664:\n\ - movs r6, 0\n\ - ldr r1, =0x0000050e\n\ - adds r4, r7, r1\n\ - mov r10, r9\n\ - ldr r2, =gTrainerBattleOpponent_A\n\ - mov r8, r2\n\ - adds r5, r3, 0\n\ -_08185672:\n\ - lsls r3, r6, 1\n\ - mov r0, r10\n\ - ldr r2, [r0]\n\ - mov r1, r8\n\ - ldrh r0, [r1]\n\ - adds r0, r5\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r3, r0\n\ - ldr r0, =0x00000754\n\ - adds r2, r0\n\ - adds r2, r3\n\ - ldrh r0, [r2]\n\ - strh r0, [r4]\n\ - adds r4, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _08185672\n\ -_08185696:\n\ - mov r1, r9\n\ - ldr r2, [r1]\n\ - ldr r3, =gTrainerBattleOpponent_A\n\ - ldrh r0, [r3]\n\ - ldr r4, =0xfffffed4\n\ - adds r0, r4\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r2, r0\n\ - ldr r5, =0x0000081c\n\ - adds r2, r5\n\ - ldrb r1, [r2]\n\ - b _08185856\n\ - .pool\n\ -_081856C4:\n\ - ldr r3, =gTrainerBattleOpponent_B\n\ - ldrh r3, [r3]\n\ - adds r0, r1, r3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x63\n\ - bls _081856D4\n\ - b _081857E4\n\ -_081856D4:\n\ - movs r6, 0\n\ - ldr r4, =0x00000504\n\ - adds r3, r7, r4\n\ - mov r10, r9\n\ - ldr r5, =gTrainerBattleOpponent_B\n\ - mov r12, r5\n\ - ldr r0, =0xfffffed4\n\ - mov r8, r0\n\ - ldr r4, =0x0000073c\n\ -_081856E6:\n\ - adds r2, r3, r6\n\ - mov r5, r10\n\ - ldr r1, [r5]\n\ - mov r5, r12\n\ - ldrh r0, [r5]\n\ - add r0, r8\n\ - movs r5, 0xEC\n\ - muls r0, r5\n\ - adds r0, r6, r0\n\ - adds r1, r4\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - strb r0, [r2]\n\ - adds r6, 0x1\n\ - cmp r6, 0x7\n\ - ble _081856E6\n\ - mov r0, r9\n\ - ldr r2, [r0]\n\ - ldr r1, =gTrainerBattleOpponent_B\n\ - ldrh r0, [r1]\n\ - ldr r3, =0xfffffed4\n\ - adds r0, r3\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r2, r0\n\ - ldr r4, =0x00000739\n\ - adds r2, r4\n\ - ldrb r1, [r2]\n\ - ldr r5, =0x0000050c\n\ - adds r0, r7, r5\n\ - strb r1, [r0]\n\ - ldr r1, =sUnknown_0203CCE8\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x1\n\ - bne _08185784\n\ - movs r6, 0\n\ - ldr r2, =0x0000050e\n\ - adds r4, r7, r2\n\ - mov r10, r9\n\ - ldr r5, =gTrainerBattleOpponent_B\n\ - mov r8, r5\n\ - adds r5, r3, 0\n\ -_0818573A:\n\ - lsls r3, r6, 1\n\ - mov r0, r10\n\ - ldr r2, [r0]\n\ - mov r1, r8\n\ - ldrh r0, [r1]\n\ - adds r0, r5\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r3, r0\n\ - movs r0, 0xEC\n\ - lsls r0, 3\n\ - adds r2, r0\n\ - adds r2, r3\n\ - ldrh r0, [r2]\n\ - strh r0, [r4]\n\ - adds r4, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _0818573A\n\ - b _081857B6\n\ - .pool\n\ -_08185784:\n\ - movs r6, 0\n\ - ldr r1, =0x0000050e\n\ - adds r4, r7, r1\n\ - mov r10, r9\n\ - ldr r2, =gTrainerBattleOpponent_B\n\ - mov r8, r2\n\ - adds r5, r3, 0\n\ -_08185792:\n\ - lsls r3, r6, 1\n\ - mov r0, r10\n\ - ldr r2, [r0]\n\ - mov r1, r8\n\ - ldrh r0, [r1]\n\ - adds r0, r5\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r3, r0\n\ - ldr r0, =0x00000754\n\ - adds r2, r0\n\ - adds r2, r3\n\ - ldrh r0, [r2]\n\ - strh r0, [r4]\n\ - adds r4, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _08185792\n\ -_081857B6:\n\ - mov r1, r9\n\ - ldr r2, [r1]\n\ - ldr r3, =gTrainerBattleOpponent_B\n\ - ldrh r0, [r3]\n\ - ldr r4, =0xfffffed4\n\ - adds r0, r4\n\ - movs r1, 0xEC\n\ - muls r0, r1\n\ - adds r2, r0\n\ - ldr r5, =0x0000081c\n\ - adds r2, r5\n\ - ldrb r1, [r2]\n\ - b _08185856\n\ - .pool\n\ -_081857E4:\n\ - ldr r3, =gPartnerTrainerId\n\ - ldrh r3, [r3]\n\ - adds r0, r1, r3\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0x63\n\ - bhi _0818585C\n\ - movs r6, 0\n\ - ldr r4, =0x00000504\n\ - adds r3, r7, r4\n\ - mov r10, r9\n\ - ldr r5, =gPartnerTrainerId\n\ - mov r12, r5\n\ - ldr r0, =0xfffffed4\n\ - mov r8, r0\n\ - ldr r4, =0x0000073c\n\ -_08185804:\n\ - adds r2, r3, r6\n\ - mov r5, r10\n\ - ldr r1, [r5]\n\ - mov r5, r12\n\ - ldrh r0, [r5]\n\ - add r0, r8\n\ - movs r5, 0xEC\n\ - muls r0, r5\n\ - adds r0, r6, r0\n\ - adds r1, r4\n\ - adds r1, r0\n\ - ldrb r0, [r1]\n\ - strb r0, [r2]\n\ - adds r6, 0x1\n\ - cmp r6, 0x7\n\ - ble _08185804\n\ - mov r0, r9\n\ - ldr r1, [r0]\n\ - ldr r2, =gPartnerTrainerId\n\ - ldrh r0, [r2]\n\ - ldr r3, =0xfffffed4\n\ - adds r0, r3\n\ - movs r2, 0xEC\n\ - muls r0, r2\n\ - adds r1, r0\n\ - ldr r4, =0x00000739\n\ - adds r1, r4\n\ - ldrb r1, [r1]\n\ - ldr r5, =0x0000050c\n\ - adds r0, r7, r5\n\ - strb r1, [r0]\n\ - mov r0, r9\n\ - ldr r1, [r0]\n\ - ldr r4, =gPartnerTrainerId\n\ - ldrh r0, [r4]\n\ - adds r0, r3\n\ - muls r0, r2\n\ - adds r1, r0\n\ - ldr r5, =0x0000081c\n\ - adds r1, r5\n\ - ldrb r1, [r1]\n\ -_08185856:\n\ - ldr r2, =0x0000051a\n\ - adds r0, r7, r2\n\ - strb r1, [r0]\n\ -_0818585C:\n\ - ldr r3, =gTrainerBattleOpponent_A\n\ - ldrh r0, [r3]\n\ - ldr r1, =0x0000018f\n\ - cmp r0, r1\n\ - bls _08185900\n\ - mov r4, r9\n\ - ldr r2, [r4]\n\ - adds r1, r0, 0\n\ - ldr r3, =0xfffffe70\n\ - adds r1, r3\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, r0\n\ - adds r2, 0xDC\n\ - ldrb r0, [r2]\n\ - lsls r0, 27\n\ - lsrs r0, 27\n\ - ldr r5, =0x0000050d\n\ - adds r1, r7, r5\n\ - strb r0, [r1]\n\ - movs r6, 0\n\ - ldr r0, =0x0000050e\n\ - adds r4, r7, r0\n\ - mov r10, r9\n\ - ldr r1, =gTrainerBattleOpponent_A\n\ - mov r8, r1\n\ - adds r5, r3, 0\n\ -_08185894:\n\ - lsls r3, r6, 1\n\ - mov r0, r10\n\ - ldr r2, [r0]\n\ - mov r0, r8\n\ - ldrh r1, [r0]\n\ - adds r1, r5\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r3, r0\n\ - movs r1, 0x82\n\ - lsls r1, 1\n\ - adds r2, r1\n\ - adds r2, r3\n\ - ldrh r0, [r2]\n\ - strh r0, [r4]\n\ - adds r4, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _08185894\n\ - mov r3, r9\n\ - ldr r2, [r3]\n\ - ldr r4, =gTrainerBattleOpponent_A\n\ - ldrh r1, [r4]\n\ - ldr r5, =0xfffffe70\n\ - adds r1, r5\n\ - b _081859AC\n\ - .pool\n\ -_08185900:\n\ - ldr r3, =gTrainerBattleOpponent_B\n\ - ldrh r0, [r3]\n\ - cmp r0, r1\n\ - bls _0818597C\n\ - mov r4, r9\n\ - ldr r2, [r4]\n\ - adds r1, r0, 0\n\ - ldr r3, =0xfffffe70\n\ - adds r1, r3\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, r0\n\ - adds r2, 0xDC\n\ - ldrb r0, [r2]\n\ - lsls r0, 27\n\ - lsrs r0, 27\n\ - ldr r5, =0x0000050d\n\ - adds r1, r7, r5\n\ - strb r0, [r1]\n\ - movs r6, 0\n\ - ldr r0, =0x0000050e\n\ - adds r4, r7, r0\n\ - mov r10, r9\n\ - ldr r1, =gTrainerBattleOpponent_B\n\ - mov r8, r1\n\ - adds r5, r3, 0\n\ -_08185936:\n\ - lsls r3, r6, 1\n\ - mov r0, r10\n\ - ldr r2, [r0]\n\ - mov r0, r8\n\ - ldrh r1, [r0]\n\ - adds r1, r5\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r3, r0\n\ - movs r1, 0x82\n\ - lsls r1, 1\n\ - adds r2, r1\n\ - adds r2, r3\n\ - ldrh r0, [r2]\n\ - strh r0, [r4]\n\ - adds r4, 0x2\n\ - adds r6, 0x1\n\ - cmp r6, 0x5\n\ - ble _08185936\n\ - mov r3, r9\n\ - ldr r2, [r3]\n\ - ldr r4, =gTrainerBattleOpponent_B\n\ - ldrh r1, [r4]\n\ - ldr r5, =0xfffffe70\n\ - adds r1, r5\n\ - b _081859AC\n\ - .pool\n\ -_0818597C:\n\ - ldr r3, =gPartnerTrainerId\n\ - ldrh r0, [r3]\n\ - cmp r0, r1\n\ - bls _081859C0\n\ - mov r4, r9\n\ - ldr r2, [r4]\n\ - adds r1, r0, 0\n\ - ldr r3, =0xfffffe70\n\ - adds r1, r3\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, r0\n\ - adds r2, 0xDC\n\ - ldrb r0, [r2]\n\ - lsls r0, 27\n\ - lsrs r0, 27\n\ - ldr r5, =0x0000050d\n\ - adds r1, r7, r5\n\ - strb r0, [r1]\n\ - ldr r2, [r4]\n\ - ldr r0, =gPartnerTrainerId\n\ - ldrh r1, [r0]\n\ - adds r1, r3\n\ -_081859AC:\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r2, r0\n\ - ldr r1, =0x0000011b\n\ - adds r0, r2, r1\n\ - ldrb r1, [r0]\n\ - ldr r2, =0x0000051b\n\ - adds r0, r7, r2\n\ - strb r1, [r0]\n\ -_081859C0:\n\ - movs r6, 0\n\ - ldr r3, =0x00000297\n\ - mov r10, r3\n\ - ldr r4, =sBattleRecords\n\ - mov r9, r4\n\ - movs r5, 0xA6\n\ - lsls r5, 2\n\ - mov r8, r5\n\ - ldr r0, =0x0000051c\n\ - adds r5, r7, r0\n\ -_081859D4:\n\ - adds r4, r6, 0x1\n\ - mov r0, r8\n\ - muls r0, r6\n\ - mov r1, r9\n\ - adds r2, r0, r1\n\ - adds r1, r0, r5\n\ - mov r3, r10\n\ - adds r3, 0x1\n\ -_081859E4:\n\ - ldrb r0, [r2]\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r1, 0x1\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bne _081859E4\n\ - adds r6, r4, 0\n\ - cmp r6, 0x3\n\ - ble _081859D4\n\ -_081859F8:\n\ - adds r0, r7, 0\n\ - ldr r1, [sp]\n\ - bl sub_81852F0\n\ - adds r4, r0, 0\n\ - cmp r4, 0x1\n\ - beq _08185A14\n\ - ldr r0, [sp, 0x4]\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x4]\n\ - cmp r0, 0x2\n\ - bls _081859F8\n\ -_08185A14:\n\ - adds r0, r7, 0\n\ - bl Free\n\ - ldr r0, [sp]\n\ - bl Free\n\ - adds r0, r4, 0\n\ - add sp, 0xC\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .pool\n\ - .syntax divided"); + free(battleSave); + free(savSection); + return ret; } -#endif // NONMATCHING static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSection *saveBuffer) { @@ -1282,7 +501,7 @@ static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, stru return TRUE; } -static bool32 AllocTryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst) +static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst) { struct SaveSection *savBuffer = AllocZeroed(sizeof(struct SaveSection)); bool32 ret = TryCopyRecordedBattleSaveData(dst, savBuffer); @@ -1293,7 +512,7 @@ static bool32 AllocTryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst) static void CB2_RecordedBattleEnd(void) { - gSaveBlock2Ptr->frontier.lvlMode = sUnknown_0203C7AD; + gSaveBlock2Ptr->frontier.lvlMode = sLvlMode; gBattleOutcome = 0; gBattleTypeFlags = 0; gTrainerBattleOpponent_A = 0; @@ -1316,7 +535,7 @@ static void Task_StartAfterCountdown(u8 taskId) } } -static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) +static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) { bool8 var; s32 i, j; @@ -1353,29 +572,29 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) gTrainerBattleOpponent_B = src->opponentB; gPartnerTrainerId = src->partnerId; gUnknown_0203C7B4 = src->field_4FA; - sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.lvlMode; - sFrontierFacility = src->field_4FD; - sUnknown_0203C7AF = src->field_4FE; - sBattleStyle = src->battleStyle; + sLvlMode = gSaveBlock2Ptr->frontier.lvlMode; + sFrontierFacility = src->frontierFacility; + sFrontierBrainSymbol = src->frontierBrainSymbol; + sBattleScene = src->battleScene; sTextSpeed = src->textSpeed; sAI_Scripts = src->AI_scripts; - for (i = 0; i < 8; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { - sUnknown_0203CCD1[i] = src->field_504[i]; + sRecordMixFriendName[i] = src->recordMixFriendName[i]; } - sUnknown_0203CCD9 = src->field_50C; - sUnknown_0203CCDA = src->field_50D; - gUnknown_03001278 = src->field_51A; - gUnknown_03001279 = src->field_51B; + sRecordMixFriendClass = src->recordMixFriendClass; + sApprenticeId = src->apprenticeId; + gUnknown_03001278 = src->recordMixFriendLanguage; + gUnknown_03001279 = src->apprenticeLanguage; for (i = 0; i < 6; i++) { - sUnknown_0203CCDC[i] = src->field_50E[i]; + sEasyChatSpeech[i] = src->easyChatSpeech[i]; } - gSaveBlock2Ptr->frontier.lvlMode = src->field_4FC; + gSaveBlock2Ptr->frontier.lvlMode = src->lvlMode; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { @@ -1389,12 +608,12 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) void PlayRecordedBattle(void (*CB2_After)(void)) { struct RecordedBattleSave *battleSave = AllocZeroed(sizeof(struct RecordedBattleSave)); - if (AllocTryCopyRecordedBattleSaveData(battleSave) == TRUE) + if (CopyRecordedBattleFromSave(battleSave) == TRUE) { u8 taskId; RecordedBattle_SaveParties(); - SetRecordedBattleVarsFromSave(battleSave); + SetVariablesForRecordedBattle(battleSave); taskId = CreateTask(Task_StartAfterCountdown, 1); gTasks[taskId].tFramesToWait = 128; @@ -1420,9 +639,9 @@ u8 GetRecordedBattleFrontierFacility(void) return sFrontierFacility; } -u8 sub_8185EAC(void) +u8 GetRecordedBattleFronterBrainSymbol(void) { - return sUnknown_0203C7AF; + return sFrontierBrainSymbol; } void RecordedBattle_SaveParties(void) @@ -1478,9 +697,9 @@ u8 sub_8185FAC(void) return sUnknown_0203C7B5; } -u8 GetBattleStyleInRecordedBattle(void) +u8 GetBattleSceneInRecordedBattle(void) { - return sBattleStyle; + return sBattleScene; } u8 GetTextSpeedInRecordedBattle(void) @@ -1630,38 +849,38 @@ void sub_8186468(u8 *dst) s32 i; for (i = 0; i < 8; i++) - dst[i] = sUnknown_0203CCD1[i]; + dst[i] = sRecordMixFriendName[i]; dst[7] = EOS; ConvertInternationalString(dst, gUnknown_03001278); } -u8 sub_818649C(void) +u8 GetRecordedBattleRecordMixFriendClass(void) { - return sUnknown_0203CCD9; + return sRecordMixFriendClass; } -u8 sub_81864A8(void) +u8 GetRecordedBattleApprenticeId(void) { - return sUnknown_0203CCDA; + return sApprenticeId; } -u8 sub_81864B4(void) +u8 GetRecordedBattleRecordMixFriendLanguage(void) { return gUnknown_03001278; } -u8 sub_81864C0(void) +u8 GetRecordedBattleApprenticeLanguage(void) { return gUnknown_03001279; } -void sub_81864CC(void) +void RecordedBattle_SaveBattleOutcome(void) { - sUnknown_0203CCE8 = gBattleOutcome; + sBattleOutcome = gBattleOutcome; } -u16 *sub_81864E0(void) +u16 *GetRecordedBattleEasyChatSpeech(void) { - return sUnknown_0203CCDC; + return sEasyChatSpeech; } -- cgit v1.2.3 From 0bb51037d7d3e257a84b1488016441aafd34b020 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 1 Nov 2018 21:31:10 +0100 Subject: Finish frontier util --- src/apprentice.c | 2 +- src/battle_dome.c | 26 +- src/battle_tent.c | 2 + src/battle_tower.c | 16 +- src/field_control_avatar.c | 3 +- src/field_poison.c | 2 + src/fieldmap.c | 2 + src/frontier_util.c | 789 +++++++++++++++++++++++++++++++++++++------ src/item_menu.c | 2 + src/new_game.c | 20 +- src/pokemon_summary_screen.c | 2 + src/record_mixing.c | 24 +- src/recorded_battle.c | 22 +- src/scrcmd.c | 5 + src/start_menu.c | 2 + src/walda_phrase.c | 2 +- 16 files changed, 765 insertions(+), 156 deletions(-) (limited to 'src') diff --git a/src/apprentice.c b/src/apprentice.c index b4c1f849e..2feac49a7 100644 --- a/src/apprentice.c +++ b/src/apprentice.c @@ -2238,7 +2238,7 @@ static void sub_81A1370(void) r9 = -1; for (i = 1; i < 4; i++) { - if (ReadUnalignedWord(gSaveBlock2Ptr->apprentices[i].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId) + if (GetTrainerId(gSaveBlock2Ptr->apprentices[i].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId) && gSaveBlock2Ptr->apprentices[i].number < r10) { r10 = gSaveBlock2Ptr->apprentices[i].number; diff --git a/src/battle_dome.c b/src/battle_dome.c index ba8cf6185..d5489f529 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -57,12 +57,12 @@ struct UnkStruct_860DD10 }; extern void sub_81B8558(void); -extern u16 sub_81A5060(u8 monId, u8 moveSlotId); -extern u8 sub_81A50F0(u8, u8); -extern u8 sub_81A50B0(u8); +extern u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId); +extern u8 GetFrontierBrainMonEvs(u8, u8); +extern u8 GetFrontierBrainMonNature(u8); extern void sub_81A4C30(void); extern u8 sub_81A3610(void); -extern u16 sub_81A4FF0(u8); +extern u16 GetFrontierBrainMonSpecies(u8); extern void ReducePlayerPartyToThree(void); extern u8 gUnknown_0203CEF8[]; @@ -2737,7 +2737,7 @@ static void InitDomeTrainers(void) } for (i = 0; i < 3; i++) - gSaveBlock2Ptr->frontier.domeMonIds[j][i] = sub_81A4FF0(i); + gSaveBlock2Ptr->frontier.domeMonIds[j][i] = GetFrontierBrainMonSpecies(i); } Free(statSums); @@ -2856,7 +2856,7 @@ static void CreateDomeTrainerMons(u16 tournamentTrainerId) s32 i, bits; ZeroEnemyPartyMons(); - bits = GetTrainerMonCountInBits(tournamentTrainerId); + bits = GetDomeTrainerMonCountInBits(tournamentTrainerId); otId = Random32(); if (Random() % 10 > 5) { @@ -2884,7 +2884,7 @@ static void CreateDomeTrainerMons(u16 tournamentTrainerId) } } -s32 GetTrainerMonCountInBits(u16 tournamentTrainerId) +s32 GetDomeTrainerMonCountInBits(u16 tournamentTrainerId) { s32 bits; if (Random() & 1) @@ -2917,7 +2917,7 @@ static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) { if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { - array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId), + array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); } else @@ -2945,7 +2945,7 @@ static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) { if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { - array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId), + array[i] += GetTypeEffectivenessPoints(GetFrontierBrainMonMove(i, moveId), GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); } else @@ -4875,7 +4875,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++) { if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[k] += sMovePointsForDomeTrainers[sub_81A5060(i, j)][k]; + allocatedArray[k] += sMovePointsForDomeTrainers[GetFrontierBrainMonMove(i, j)][k]; else if (trainerId == TRAINER_PLAYER) allocatedArray[k] += sMovePointsForDomeTrainers[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; else @@ -4916,7 +4916,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) for (j = 0; j < 6; j++) { if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[j] = sub_81A50F0(i, j); + allocatedArray[j] = GetFrontierBrainMonEvs(i, j); else allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j]; } @@ -4924,7 +4924,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) for (j = 0; j < 5; j++) { if (trainerId == TRAINER_FRONTIER_BRAIN) - nature = sub_81A50B0(i); + nature = GetFrontierBrainMonNature(i); else nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature; @@ -5564,7 +5564,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun { moveScores[i * 4 + j] = 0; if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - moveIds[i * 4 + j] = sub_81A5060(i, j); + moveIds[i * 4 + j] = GetFrontierBrainMonMove(i, j); else moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonIds[winnerTournamentId][i]].moves[j]; diff --git a/src/battle_tent.c b/src/battle_tent.c index 9c66a0325..f3aec1345 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -19,6 +19,8 @@ extern const u16 gBattleFrontierHeldItems[]; extern u16 gUnknown_03006298[]; +extern void sub_81A4C30(void); + // This file's functions. static void sub_81B99D4(void); static void sub_81B9A28(void); diff --git a/src/battle_tower.c b/src/battle_tower.c index f02336ef5..e95eaf156 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -9,7 +9,6 @@ #include "main.h" #include "international_string_util.h" #include "battle.h" -#include "battle_frontier_1.h" #include "frontier_util.h" #include "recorded_battle.h" #include "easy_chat.h" @@ -30,14 +29,9 @@ extern u16 gUnknown_03006298[]; -extern void sub_81A3ACC(void); -extern void CreateFrontierBrainPokemon(void); extern void sub_81A6CD0(void); -extern void SetFrontierBrainTrainerGfxId(void); -extern u8 GetFrontierBrainTrainerPicIndex(void); -extern u8 GetFrontierBrainTrainerClass(void); -extern u8 IsFrontierBrainFemale(void); -extern void CopyFrontierBrainTrainerName(u8 *dst); +extern void sub_81A4C30(void); +extern u8 sub_81A6CA8(u8, u8); extern void SetMonMoveAvoidReturn(struct Pokemon *mon, u16 move, u8 moveSlot); extern const u8 *const *const gUnknown_085DD690[]; @@ -525,7 +519,7 @@ void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId) } else if (trainerId == TRAINER_FRONTIER_BRAIN) { - SetFrontierBrainTrainerGfxId(); + SetFrontierBrainEventObjGfx_2(); return; } else if (trainerId < TRAINER_RECORD_MIXING_FRIEND) @@ -1509,7 +1503,7 @@ static void sub_8163EE4(void) } playerRecord->lvlMode = lvlMode; playerRecord->facilityClass = class; - CopyUnalignedWord(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(playerRecord->trainerId, gSaveBlock2Ptr->playerTrainerId); StringCopy7(playerRecord->name, gSaveBlock2Ptr->playerName); playerRecord->winStreak = GetCurrentBattleTowerWinStreak(lvlMode, battleMode); @@ -2165,7 +2159,7 @@ static void FillEReaderTrainerWithPlayerData(void) + gSaveBlock2Ptr->playerTrainerId[2] + gSaveBlock2Ptr->playerTrainerId[3]) % ARRAY_COUNT(gTowerMaleFacilityClasses)]; } - CopyUnalignedWord(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(ereaderTrainer->trainerId, gSaveBlock2Ptr->playerTrainerId); StringCopy7(ereaderTrainer->name, gSaveBlock2Ptr->playerName); ereaderTrainer->winStreak = 1; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index fef403c04..738826020 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -1,6 +1,5 @@ #include "global.h" #include "battle_setup.h" -#include "battle_frontier_1.h" #include "bike.h" #include "coord_event_weather.h" #include "daycare.h" @@ -31,6 +30,8 @@ #include "constants/map_types.h" #include "constants/songs.h" +extern bool32 sub_8196034(void); + static EWRAM_DATA u8 sWildEncounterImmunitySteps = 0; static EWRAM_DATA u16 sPreviousPlayerMetatileBehavior = 0; diff --git a/src/field_poison.c b/src/field_poison.c index c11f01a45..e2fd994fc 100644 --- a/src/field_poison.c +++ b/src/field_poison.c @@ -14,6 +14,8 @@ #include "fldeff_80F9BCC.h" #include "field_poison.h" +extern bool8 InBattlePike(void); + static bool32 sub_80F9568(struct Pokemon *pokemon) { u16 species = GetMonData(pokemon, MON_DATA_SPECIES2); diff --git a/src/fieldmap.c b/src/fieldmap.c index 70132ff17..5019b5dc7 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -14,6 +14,8 @@ #include "secret_base.h" #include "tv.h" +extern void sub_81AA078(u16*, u8); + struct ConnectionFlags { u8 south:1; diff --git a/src/frontier_util.c b/src/frontier_util.c index 729b1e622..33cef0ac6 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -33,25 +33,55 @@ #include "constants/species.h" #include "constants/game_stat.h" #include "constants/moves.h" +#include "constants/items.h" +#include "constants/event_objects.h" extern u8 gUnknown_0203CEF8[]; -extern void (* const gUnknown_08611C18[])(void); -extern const u16 gUnknown_08611BFC[][2]; +struct FrontierBrainMon +{ + u16 species; + u16 heldItem; + u8 fixedIV; + u8 nature; + u8 evs[6]; + u16 moves[4]; +}; + extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; -extern const struct WindowTemplate gUnknown_08611C74; -extern const struct WindowTemplate gUnknown_08611C7C; -extern const struct WindowTemplate gUnknown_08611C84; -extern const u8 gUnknown_086118B4[29][7][4]; -extern const u16 gUnknown_08611C9A[]; extern const u8 *const gUnknown_08611D08[]; extern const u8 *const gUnknown_08611CB0[][2]; extern const u8 *const gUnknown_08611D00[]; +extern const u8 *const *const gUnknown_08611DB0[]; +extern const u8 *const *const gUnknown_08611DB8[]; +extern const u16 gFacilityToBrainTrainerId[]; extern void sub_81B8558(void); // This file's functions. -u8 sub_81A3B30(u8 facility); +static void sub_81A17A0(void); +static void sub_81A1830(void); +static void sub_81A1968(void); +static void sub_81A1AD4(void); +static void DoSoftReset_(void); +static void sub_81A1B28(void); +static void sub_81A1B38(void); +static void ShowFacilityResultsWindow(void); +static void sub_81A31FC(void); +static void sub_81A35EC(void); +static void sub_81A3B00(void); +static void sub_81A3B64(void); +static void sub_81A3D30(void); +static void sub_81A3D58(void); +static void sub_81A3DA0(void); +static void sub_81A3FD4(void); +static void sub_81A4224(void); +static void sub_81A4230(void); +static void sub_81A43A8(void); +static void sub_81A4410(void); +static void sub_81A443C(void); +static void sub_81A447C(void); +static void sub_81A457C(void); static void ShowTowerResultsWindow(u8); static void ShowDomeResultsWindow(u8); static void ShowPalaceResultsWindow(u8); @@ -60,12 +90,10 @@ static void ShowFactoryResultsWindow(u8); static void ShowArenaResultsWindow(void); static void ShowPyramidResultsWindow(void); static void ShowLinkContestResultsWindow(void); -u8 sub_81A3610(void); static void CopyFrontierBrainText(bool8 playerWonText); -void sub_81A5030(u8); // const rom data -const u8 gUnknown_08611550[][4] = +static const u8 gUnknown_08611550[][4] = { [FRONTIER_FACILITY_TOWER] = {0x23, 0x46, 0x23, 0x01}, [FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00}, @@ -76,13 +104,599 @@ const u8 gUnknown_08611550[][4] = [FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00}, }; +static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] = +{ + [FRONTIER_FACILITY_TOWER] = + { + // Silver Symbol. + { + { + .species = SPECIES_ALAKAZAM, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 24, + .nature = 15, + .evs = {106, 0, 152, 152, 100, 0}, + .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DISABLE}, + }, + { + .species = SPECIES_ENTEI, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 24, + .nature = 1, + .evs = {100, 152, 152, 0, 100, 6}, + .moves = {MOVE_FIRE_BLAST, MOVE_CALM_MIND, MOVE_RETURN, MOVE_ROAR}, + }, + { + .species = SPECIES_SNORLAX, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 24, + .nature = 3, + .evs = {152, 152, 0, 0, 106, 100}, + .moves = {MOVE_BODY_SLAM, MOVE_BELLY_DRUM, MOVE_YAWN, MOVE_SHADOW_BALL}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_RAIKOU, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 31, + .nature = 15, + .evs = {158, 0, 252, 100, 0, 0}, + .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_REFLECT, MOVE_REST}, + }, + { + .species = SPECIES_LATIOS, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 31, + .nature = 15, + .evs = {252, 0, 252, 6, 0, 0}, + .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_RECOVER, MOVE_DRAGON_CLAW}, + }, + { + .species = SPECIES_SNORLAX, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {252, 252, 0, 0, 6, 0}, + .moves = {MOVE_CURSE, MOVE_RETURN, MOVE_REST, MOVE_SHADOW_BALL}, + }, + }, + }, + [FRONTIER_FACILITY_DOME] = + { + // Silver Symbol. + { + { + .species = SPECIES_SWAMPERT, + .heldItem = ITEM_FOCUS_BAND, + .fixedIV = 20, + .nature = 2, + .evs = {152, 152, 106, 0, 100, 0}, + .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER}, + }, + { + .species = SPECIES_SALAMENCE, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 20, + .nature = 3, + .evs = {152, 152, 106, 100, 0, 0}, + .moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE}, + }, + { + .species = SPECIES_CHARIZARD, + .heldItem = ITEM_WHITE_HERB, + .fixedIV = 20, + .nature = 17, + .evs = {100, 152, 106, 152, 0, 0}, + .moves = {MOVE_OVERHEAT, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_EARTHQUAKE}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_SWAMPERT, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 31, + .nature = 2, + .evs = {252, 252, 6, 0, 0, 0}, + .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT}, + }, + { + .species = SPECIES_METAGROSS, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 31, + .nature = 2, + .evs = {252, 252, 6, 0, 0, 0}, + .moves = {MOVE_PSYCHIC, MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_PROTECT}, + }, + { + .species = SPECIES_LATIAS, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 15, + .evs = {252, 0, 252, 6, 0, 0}, + .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_REST}, + }, + }, + }, + [FRONTIER_FACILITY_PALACE] = + { + // Silver Symbol. + { + { + .species = SPECIES_CROBAT, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 16, + .nature = 3, + .evs = {152, 0, 0, 152, 100, 106}, + .moves = {MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_FLY}, + }, + { + .species = SPECIES_SLAKING, + .heldItem = ITEM_SCOPE_LENS, + .fixedIV = 16, + .nature = 0, + .evs = {152, 152, 0, 106, 100, 0}, + .moves = {MOVE_EARTHQUAKE, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK}, + }, + { + .species = SPECIES_LAPRAS, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 16, + .nature = 17, + .evs = {0, 0, 252, 0, 106, 152}, + .moves = {MOVE_ICE_BEAM, MOVE_HORN_DRILL, MOVE_CONFUSE_RAY, MOVE_PROTECT}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_ARCANINE, + .heldItem = ITEM_WHITE_HERB, + .fixedIV = 31, + .nature = 11, + .evs = {6, 252, 252, 0, 0, 0}, + .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_ROAR, MOVE_PROTECT}, + }, + { + .species = SPECIES_SLAKING, + .heldItem = ITEM_SCOPE_LENS, + .fixedIV = 31, + .nature = 0, + .evs = {6, 252, 0, 252, 0, 0}, + .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_YAWN}, + }, + { + .species = SPECIES_SUICUNE, + .heldItem = ITEM_KINGS_ROCK, + .fixedIV = 31, + .nature = 11, + .evs = {252, 0, 252, 6, 0, 0}, + .moves = {MOVE_BLIZZARD, MOVE_SURF, MOVE_BITE, MOVE_CALM_MIND}, + }, + }, + }, + [FRONTIER_FACILITY_ARENA] = + { + // Silver Symbol. + { + { + .species = SPECIES_HERACROSS, + .heldItem = ITEM_SALAC_BERRY, + .fixedIV = 20, + .nature = 13, + .evs = {106, 152, 0, 152, 0, 100}, + .moves = {MOVE_MEGAHORN, MOVE_ROCK_TOMB, MOVE_ENDURE, MOVE_REVERSAL}, + }, + { + .species = SPECIES_UMBREON, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 20, + .nature = 20, + .evs = {152, 0, 100, 0, 152, 106}, + .moves = {MOVE_BODY_SLAM, MOVE_CONFUSE_RAY, MOVE_PSYCHIC, MOVE_FAINT_ATTACK}, + }, + { + .species = SPECIES_SHEDINJA, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 20, + .nature = 3, + .evs = {0, 252, 6, 252, 0, 0}, + .moves = {MOVE_SHADOW_BALL, MOVE_RETURN, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_UMBREON, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 20, + .evs = {252, 0, 0, 0, 252, 6}, + .moves = {MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_REST, MOVE_PSYCHIC}, + }, + { + .species = SPECIES_GENGAR, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 31, + .nature = 15, + .evs = {252, 0, 252, 0, 6, 0}, + .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_DESTINY_BOND}, + }, + { + .species = SPECIES_BRELOOM, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 31, + .nature = 13, + .evs = {6, 252, 0, 252, 0, 0}, + .moves = {MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_GIGA_DRAIN, MOVE_HEADBUTT}, + }, + }, + }, + [FRONTIER_FACILITY_FACTORY] = + { + // Silver Symbol. + { + { + .species = SPECIES_METANG, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 2, + .evs = {0, 252, 252, 0, 6, 0}, + .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, + }, + { + .species = SPECIES_SKARMORY, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 8, + .evs = {252, 0, 0, 0, 6, 252}, + .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, + }, + { + .species = SPECIES_AGGRON, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {0, 252, 0, 0, 252, 6}, + .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_METANG, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 2, + .evs = {0, 252, 252, 0, 6, 0}, + .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}, + }, + { + .species = SPECIES_SKARMORY, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 8, + .evs = {252, 0, 0, 0, 6, 252}, + .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}, + }, + { + .species = SPECIES_AGGRON, + .heldItem = ITEM_SITRUS_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {0, 252, 0, 0, 252, 6}, + .moves = {MOVE_THUNDERBOLT, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}, + }, + }, + }, + [FRONTIER_FACILITY_PIKE] = + { + // Silver Symbol. + { + { + .species = SPECIES_SEVIPER, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 16, + .nature = 2, + .evs = {252, 0, 252, 0, 6, 0}, + .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_POISON_FANG, MOVE_GIGA_DRAIN}, + }, + { + .species = SPECIES_SHUCKLE, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 16, + .nature = 5, + .evs = {252, 0, 0, 0, 106, 252}, + .moves = {MOVE_TOXIC, MOVE_SANDSTORM, MOVE_PROTECT, MOVE_REST}, + }, + { + .species = SPECIES_MILOTIC, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 16, + .nature = 15, + .evs = {152, 0, 100, 0, 152, 106}, + .moves = {MOVE_ICE_BEAM, MOVE_MIRROR_COAT, MOVE_SURF, MOVE_RECOVER}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_SEVIPER, + .heldItem = ITEM_FOCUS_BAND, + .fixedIV = 31, + .nature = 5, + .evs = {252, 0, 0, 0, 252, 6}, + .moves = {MOVE_SWAGGER, MOVE_CRUNCH, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN}, + }, + { + .species = SPECIES_STEELIX, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 31, + .nature = 2, + .evs = {252, 0, 0, 0, 6, 252}, + .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION, MOVE_SCREECH}, + }, + { + .species = SPECIES_GYARADOS, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 31, + .nature = 3, + .evs = {252, 6, 0, 0, 0, 252}, + .moves = {MOVE_DRAGON_DANCE, MOVE_RETURN, MOVE_ROAR, MOVE_REST}, + }, + }, + }, + [FRONTIER_FACILITY_PYRAMID] = + { + // Silver Symbol. + { + { + .species = SPECIES_REGIROCK, + .heldItem = ITEM_QUICK_CLAW, + .fixedIV = 16, + .nature = 3, + .evs = {152, 152, 0, 0, 106, 100}, + .moves = {MOVE_EXPLOSION, MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER}, + }, + { + .species = SPECIES_REGISTEEL, + .heldItem = ITEM_LEFTOVERS, + .fixedIV = 16, + .nature = 3, + .evs = {152, 152, 0, 0, 6, 200}, + .moves = {MOVE_EARTHQUAKE, MOVE_METAL_CLAW, MOVE_TOXIC, MOVE_IRON_DEFENSE}, + }, + { + .species = SPECIES_REGICE, + .heldItem = ITEM_CHESTO_BERRY, + .fixedIV = 16, + .nature = 15, + .evs = {106, 0, 152, 0, 100, 152}, + .moves = {MOVE_ICE_BEAM, MOVE_AMNESIA, MOVE_THUNDER, MOVE_REST}, + }, + }, + // Gold Symbol. + { + { + .species = SPECIES_ARTICUNO, + .heldItem = ITEM_SCOPE_LENS, + .fixedIV = 31, + .nature = 16, + .evs = {6, 0, 252, 252, 0, 0}, + .moves = {MOVE_BLIZZARD, MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_REFLECT}, + }, + { + .species = SPECIES_ZAPDOS, + .heldItem = ITEM_LUM_BERRY, + .fixedIV = 31, + .nature = 16, + .evs = {6, 0, 252, 252, 0, 0}, + .moves = {MOVE_THUNDER, MOVE_DETECT, MOVE_DRILL_PECK, MOVE_LIGHT_SCREEN}, + }, + { + .species = SPECIES_MOLTRES, + .heldItem = ITEM_BRIGHT_POWDER, + .fixedIV = 31, + .nature = 16, + .evs = {6, 0, 252, 252, 0, 0}, + .moves = {MOVE_FIRE_BLAST, MOVE_HYPER_BEAM, MOVE_AERIAL_ACE, MOVE_SAFEGUARD}, + }, + }, + }, +}; + +static const u8 gUnknown_086118B4[][7][4] = +{ + { + {1, 2, 3, 3}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} + }, + { + {2, 3, 4, 4}, {1, 1, 0, 0}, {4, 5, 0, 0}, {1, 0, 0, 0}, {3, 4, 0, 0}, {1, 0, 0, 0}, {5, 0, 0, 0} + }, + { + {3, 4, 5, 5}, {2, 2, 0, 0}, {5, 6, 0, 0}, {1, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} + }, + { + {4, 5, 6, 6}, {2, 2, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {4, 5, 0, 0}, {2, 0, 0, 0}, {6, 0, 0, 0} + }, + { + {5, 6, 7, 7}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {2, 0, 0, 0}, {7, 0, 0, 0} + }, + { + {6, 7, 8, 8}, {3, 3, 0, 0}, {6, 7, 0, 0}, {2, 0, 0, 0}, {5, 6, 0, 0}, {4, 0, 0, 0}, {7, 0, 0, 0} + }, + { + {7, 8, 9, 9}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0}, {6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} + }, + { + {8, 9, 10, 10}, {4, 4, 0, 0}, {7, 8, 0, 0}, {3, 0, 0, 0},{6, 7, 0, 0}, {4, 0, 0, 0}, {8, 0, 0, 0} + }, + { + {9, 10, 11, 11}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} + }, + { + {10, 11, 12, 12}, {5, 5, 0, 0}, {8, 9, 0, 0}, {4, 0, 0, 0}, {7, 8, 0, 0}, {8, 0, 0, 0}, {9, 0, 0, 0} + }, + { + {11, 12, 13, 13}, {6, 6, 0, 0}, {9, 10, 0, 0}, {5, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} + }, + { + {12, 13, 14, 14}, {6, 6, 0, 0}, {9, 10, 0, 0}, {6, 0, 0,0}, {8, 9, 0, 0}, {8, 0, 0, 0}, {10, 0, 0, 0} + }, + { + {13, 14, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {7, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} + }, + { + {14, 15, 15, 15}, {7, 7, 0, 0}, {10, 11, 0, 0}, {8, 0, 0, 0}, {9, 10, 0, 0}, {10, 0, 0, 0}, {11, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {9, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {8, 8, 0, 0}, {11, 12, 0, 0}, {10, 0, 0, 0}, {10, 11, 0, 0}, {10, 0, 0, 0}, {12, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {11, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {9, 9, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {11, 12, 0, 0}, {12, 0, 0, 0}, {13, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {13, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {10, 10, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {12, 13, 0, 0}, {12, 0, 0, 0}, {14, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {12, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {11, 11, 0, 0}, {14, 15, 0, 0}, {15, 0, 0, 0}, {13, 14, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {12, 12, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {14, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {14, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {13, 13, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {14, 14, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, + { + {15, 15, 15, 15}, {15, 15, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 15, 0, 0}, {15, 0, 0, 0}, {15, 0, 0, 0} + }, +}; + +static const u16 gUnknown_08611BFC[][2] = +{ + [FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002}, + [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008}, + [FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020}, + [FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080}, + [FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200}, + [FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800}, + [FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000}, +}; + +static void (* const sFrontierUtilFuncs[])(void) = +{ + sub_81A17A0, + sub_81A1830, + sub_81A1968, + sub_81A1AD4, + DoSoftReset_, + sub_81A1B28, + sub_81A1B38, + ShowFacilityResultsWindow, + sub_81A31FC, + sub_81A35EC, + sub_81A3B00, + sub_81A3B64, + sub_81A3D30, + sub_81A3D58, + sub_81A3DA0, + sub_81A3FD4, + sub_81A4224, + sub_81A4230, + sub_81A43A8, + sub_81A4410, + sub_81A443C, + sub_81A447C, + sub_81A457C, +}; + +static const struct WindowTemplate gUnknown_08611C74 = +{ + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 0x1c, + .height = 0x12, + .paletteNum = 15, + .baseBlock = 1 +}; + +static const struct WindowTemplate gUnknown_08611C7C = +{ + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 2, + .width = 0x1a, + .height = 15, + .paletteNum = 15, + .baseBlock = 1 +}; + +static const struct WindowTemplate gUnknown_08611C84 = +{ + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 1, + .width = 0x1a, + .height = 17, + .paletteNum = 15, + .baseBlock = 1 +}; + +// Second field - whether the character is female. +static const u8 sFacilityToBrainEventObjGfx[][2] = +{ + [FRONTIER_FACILITY_TOWER] = {EVENT_OBJ_GFX_ANABEL, TRUE}, + [FRONTIER_FACILITY_DOME] = {EVENT_OBJ_GFX_TUCKER, FALSE}, + [FRONTIER_FACILITY_PALACE] = {EVENT_OBJ_GFX_SPENSER, FALSE}, + [FRONTIER_FACILITY_ARENA] = {EVENT_OBJ_GFX_GRETA, TRUE}, + [FRONTIER_FACILITY_FACTORY] = {EVENT_OBJ_GFX_NOLAND, FALSE}, + [FRONTIER_FACILITY_PIKE] = {EVENT_OBJ_GFX_LUCY, TRUE}, + [FRONTIER_FACILITY_PYRAMID] = {EVENT_OBJ_GFX_BRANDON, FALSE}, +}; + +const u16 gFrontierBannedSpecies[] = +{ + SPECIES_MEW, SPECIES_MEWTWO, SPECIES_HO_OH, SPECIES_LUGIA, SPECIES_CELEBI, + SPECIES_KYOGRE, SPECIES_GROUDON, SPECIES_RAYQUAZA, SPECIES_JIRACHI, SPECIES_DEOXYS, 0xFFFF +}; + // code -void sub_81A1780(void) +void CallFrontierUtilFunc(void) { - gUnknown_08611C18[gSpecialVar_0x8004](); + sFrontierUtilFuncs[gSpecialVar_0x8004](); } -void sub_81A17A0(void) +static void sub_81A17A0(void) { VarSet(VAR_TEMP_0, 0xFF); switch (gSaveBlock2Ptr->frontier.field_CA8) @@ -107,10 +721,10 @@ void sub_81A17A0(void) } } -void sub_81A1830(void) +static void sub_81A1830(void) { u8 facility = VarGet(VAR_FRONTIER_FACILITY); - u8 currSymbol = sub_81A3B30(facility); + u8 currSymbol = GetPlayerSymbolCountForFacility(facility); if (currSymbol == 2) currSymbol = 1; @@ -141,11 +755,11 @@ void sub_81A1830(void) } } -void sub_81A1968(void) +static void sub_81A1968(void) { s32 i; u8 facility = VarGet(VAR_FRONTIER_FACILITY); - u8 currSymbol = sub_81A3B30(facility); + u8 currSymbol = GetPlayerSymbolCountForFacility(facility); if (currSymbol == 2) currSymbol = 1; @@ -176,7 +790,7 @@ void sub_81A1968(void) } } -void sub_81A1AD4(void) +static void sub_81A1AD4(void) { s32 i; @@ -186,17 +800,17 @@ void sub_81A1AD4(void) ReducePlayerPartyToThree(); } -void sub_81A1B1C(void) +static void DoSoftReset_(void) { DoSoftReset(); } -void sub_81A1B28(void) +static void sub_81A1B28(void) { gFacilityTrainers = gBattleFrontierTrainers; } -void sub_81A1B38(void) +static void sub_81A1B38(void) { u8 i; @@ -208,7 +822,7 @@ void sub_81A1B38(void) } } -void sub_81A1B98(void) +static void ShowFacilityResultsWindow(void) { if (gSpecialVar_0x8006 > 3) gSpecialVar_0x8006 = 0; @@ -249,7 +863,7 @@ static bool8 sub_81A1C24(u32 flags) return FALSE; } -static void sub_81A1C4C(const u8 *str, s32 y) +static void PrintAligned(const u8 *str, s32 y) { s32 x = GetStringCenterAlignXOffset(1, str, 0xE0); y = (y * 8) + 1; @@ -348,7 +962,7 @@ static void ShowTowerResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_LinkMultiBattleRoomResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -415,7 +1029,7 @@ static void ShowDomeResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_DoubleBattleTourneyResults); - sub_81A1C4C(gStringVar4, 0); + PrintAligned(gStringVar4, 0); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -491,7 +1105,7 @@ static void ShowPalaceResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_DoubleBattleHallResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -543,7 +1157,7 @@ static void ShowPikeResultsWindow(void) NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, 0x11); StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults); - sub_81A1C4C(gStringVar4, 0); + PrintAligned(gStringVar4, 0); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -606,7 +1220,7 @@ static void ShowArenaResultsWindow(void) FillWindowPixelBuffer(gRecordsWindowId, 0x11); PrintHyphens(10); StringExpandPlaceholders(gStringVar4, gText_SetKOTourneyResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 16, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 16, 97, TEXT_SPEED_FF, NULL); ArenaPrintPrevOrCurrentStreak(FRONTIER_LVL_50, 72, 126, 49); @@ -695,7 +1309,7 @@ static void ShowFactoryResultsWindow(u8 battleMode) else StringExpandPlaceholders(gStringVar4, gText_BattleSwapDoubleResults); - sub_81A1C4C(gStringVar4, 0); + PrintAligned(gStringVar4, 0); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_RentalSwap, 152, 33, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); @@ -756,7 +1370,7 @@ static void ShowPyramidResultsWindow(void) NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE); FillWindowPixelBuffer(gRecordsWindowId, 0x11); StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults); - sub_81A1C4C(gStringVar4, 2); + PrintAligned(gStringVar4, 2); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_Lv502, 8, 49, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gRecordsWindowId, 1, gText_OpenLv, 8, 97, TEXT_SPEED_FF, NULL); PrintHyphens(10); @@ -819,7 +1433,7 @@ static void ShowLinkContestResultsWindow(void) CopyWindowToVram(gRecordsWindowId, 3); } -void sub_81A31FC(void) +static void sub_81A31FC(void) { u8 text[32]; s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -837,7 +1451,7 @@ void sub_81A31FC(void) StringCopy(text, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name); StripExtCtrlCodes(text); StringCopy(gSaveBlock2Ptr->frontier.field_EE1[lvlMode], text); - WriteUnalignedWord(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); + SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]); } if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1 && sub_80EE818()) @@ -939,7 +1553,7 @@ void sub_81A31FC(void) } } -void sub_81A35EC(void) +static void sub_81A35EC(void) { VarGet(VAR_FRONTIER_FACILITY); // Unused return value. gSpecialVar_Result = sub_81A3610(); @@ -957,7 +1571,7 @@ u8 sub_81A3610(void) if (battleMode != FRONTIER_MODE_SINGLES) return 0; - symbolsCount = sub_81A3B30(facility); + symbolsCount = GetPlayerSymbolCountForFacility(facility); switch (symbolsCount) { case 0: @@ -1123,7 +1737,7 @@ void sub_81A3ACC(void) gSaveBlock2Ptr->frontier.field_CB4[i] |= 0xFFFF; } -void sub_81A3B00(void) +static void sub_81A3B00(void) { if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) gSpecialVar_Result = TRUE; @@ -1131,13 +1745,13 @@ void sub_81A3B00(void) gSpecialVar_Result = FALSE; } -u8 sub_81A3B30(u8 facility) +u8 GetPlayerSymbolCountForFacility(u8 facility) { return FlagGet(FLAG_SYS_TOWER_SILVER + facility * 2) + FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2); } -void sub_81A3B64(void) +static void sub_81A3B64(void) { s32 challengeNum = 0; s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; @@ -1172,8 +1786,8 @@ void sub_81A3B64(void) if (challengeNum != 0) challengeNum--; - if (challengeNum > ARRAY_COUNT(gUnknown_086118B4)) - challengeNum = ARRAY_COUNT(gUnknown_086118B4); + if (challengeNum >= ARRAY_COUNT(gUnknown_086118B4)) + challengeNum = ARRAY_COUNT(gUnknown_086118B4) - 1; points = gUnknown_086118B4[challengeNum][facility][battleMode]; if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN) @@ -1196,22 +1810,22 @@ void sub_81A3B64(void) gSaveBlock2Ptr->frontier.field_EBA = points; } -void sub_81A3D30(void) +static void sub_81A3D30(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - gSpecialVar_Result = sub_81A3B30(facility); + gSpecialVar_Result = GetPlayerSymbolCountForFacility(facility); } -void sub_81A3D58(void) +static void sub_81A3D58(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - if (sub_81A3B30(facility) == 0) + if (GetPlayerSymbolCountForFacility(facility) == 0) FlagSet(FLAG_SYS_TOWER_SILVER + facility * 2); else FlagSet(FLAG_SYS_TOWER_GOLD + facility * 2); } -void sub_81A3DA0(void) +static void sub_81A3DA0(void) { if (gBattleTypeFlags & gSpecialVar_0x8005) gSpecialVar_Result = TRUE; @@ -1265,10 +1879,10 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL if (species == SPECIES_EGG || species == SPECIES_NONE) return; - for (i = 0; gUnknown_08611C9A[i] != 0xFFFF && gUnknown_08611C9A[i] != species; i++) + for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF && gFrontierBannedSpecies[i] != species; i++) ; - if (gUnknown_08611C9A[i] != 0xFFFF) + if (gFrontierBannedSpecies[i] != 0xFFFF) return; if (lvlMode == FRONTIER_LVL_50 && monLevel > 50) return; @@ -1291,7 +1905,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL (*count)++; } -void sub_81A3FD4(void) +static void sub_81A3FD4(void) { u16 speciesArray[6]; u16 itemArray[6]; @@ -1350,8 +1964,8 @@ void sub_81A3FD4(void) { s32 i; s32 caughtBannedMons = 0; - s32 species = gUnknown_08611C9A[0]; - for (i = 0; species != 0xFFFF; i++, species = gUnknown_08611C9A[i]) + s32 species = gFrontierBannedSpecies[0]; + for (i = 0; species != 0xFFFF; i++, species = gFrontierBannedSpecies[i]) { if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) caughtBannedMons++; @@ -1359,8 +1973,8 @@ void sub_81A3FD4(void) gStringVar1[0] = EOS; gSpecialVar_0x8004 = 1; count = 0; - for (i = 0; gUnknown_08611C9A[i] != 0xFFFF; i++) - count = sub_81A3DD0(gUnknown_08611C9A[i], count, caughtBannedMons); + for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF; i++) + count = sub_81A3DD0(gFrontierBannedSpecies[i], count, caughtBannedMons); if (count == 0) { @@ -1383,12 +1997,12 @@ void sub_81A3FD4(void) } } -void sub_81A4224(void) +static void sub_81A4224(void) { ValidateEReaderTrainer(); } -void sub_81A4230(void) +static void sub_81A4230(void) { s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); @@ -1436,7 +2050,7 @@ void sub_81A4230(void) } } -void sub_81A43A8(void) +static void sub_81A43A8(void) { u8 i; @@ -1450,13 +2064,13 @@ void sub_81A43A8(void) } } -void sub_81A4410(void) +static void sub_81A4410(void) { gSpecialVar_Result = MoveRecordedBattleToSaveData(); gSaveBlock2Ptr->frontier.field_CA9_b = 1; } -void sub_81A443C(void) +static void sub_81A443C(void) { switch (gSpecialVar_0x8005) { @@ -1469,7 +2083,7 @@ void sub_81A443C(void) } } -void sub_81A447C(void) +static void sub_81A447C(void) { u8 i, j, k; @@ -1494,9 +2108,9 @@ void sub_81A447C(void) } } -void sub_81A457C(void) +static void sub_81A457C(void) { - sub_81A5030(VarGet(VAR_FRONTIER_FACILITY)); + SetFrontierBrainEventObjGfx(VarGet(VAR_FRONTIER_FACILITY)); } // Battle Frontier Ranking Hall records. @@ -1670,7 +2284,7 @@ void ClearnRankingHallRecords(void) { for (k = 0; k < 3; k++) { - CopyUnalignedWord(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords1P[i][j][k].id, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. gSaveBlock2Ptr->hallRecords1P[i][j][k].name[0] = EOS; gSaveBlock2Ptr->hallRecords1P[i][j][k].winStreak = 0; } @@ -1681,8 +2295,8 @@ void ClearnRankingHallRecords(void) { for (k = 0; k < 3; k++) { - CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. - CopyUnalignedWord(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id1, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. + CopyTrainerId(gSaveBlock2Ptr->hallRecords2P[j][k].id2, 0); // BUG: Passing 0 as a pointer instead of a pointer holding a value of 0. gSaveBlock2Ptr->hallRecords2P[j][k].name1[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].name2[0] = EOS; gSaveBlock2Ptr->hallRecords2P[j][k].winStreak = 0; @@ -1711,9 +2325,7 @@ void sub_81A4C30(void) free(monsParty); } -extern const u16 gFacilityToBrainTrainerId[]; -extern const u8 gUnknown_08611C8C[][2]; - +// Frontier Brain functions. u8 GetFrontierBrainTrainerPicIndex(void) { s32 facility; @@ -1757,29 +2369,17 @@ void CopyFrontierBrainTrainerName(u8 *dst) bool8 IsFrontierBrainFemale(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - return gUnknown_08611C8C[facility][1]; + return sFacilityToBrainEventObjGfx[facility][1]; } -void SetFrontierBrainTrainerGfxId(void) +void SetFrontierBrainEventObjGfx_2(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]); } #define FRONTIER_BRAIN_OTID 61226 -struct FrontierBrainMon -{ - u16 species; - u16 heldItem; - u8 fixedIV; - u8 nature; - u8 evs[6]; - u16 moves[4]; -}; - -extern const struct FrontierBrainMon sFrontierBrainsMons[][2][3]; - #ifdef NONMATCHING void CreateFrontierBrainPokemon(void) { @@ -1792,7 +2392,7 @@ void CreateFrontierBrainPokemon(void) s32 symbol = GetFronterBrainSymbol(); if (facility == FRONTIER_FACILITY_DOME) - monCountInBits = GetTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN)); + monCountInBits = GetDomeTrainerMonCountInBits(TrainerIdToDomeTournamentId(TRAINER_FRONTIER_BRAIN)); else monCountInBits = 7; @@ -1854,7 +2454,7 @@ void CreateFrontierBrainPokemon(void) bl TrainerIdToDomeTournamentId\n\ lsls r0, 16\n\ lsrs r0, 16\n\ - bl GetTrainerMonCountInBits\n\ + bl GetDomeTrainerMonCountInBits\n\ adds r4, r0, 0\n\ b _081A4E46\n\ .pool\n\ @@ -1998,7 +2598,7 @@ _081A4F32:\n\ movs r2, 0x64\n\ adds r6, r1, 0\n\ muls r6, r2\n\ - ldr r3, =gUnknown_08611578\n\ + ldr r3, =sFrontierBrainsMons + 0xC\n\ mov r8, r3\n\ ldr r3, =gEnemyParty\n\ adds r5, r4, 0\n\ @@ -2067,21 +2667,21 @@ _081A4FD0:\n\ } #endif -u16 sub_81A4FF0(u8 monPartyId) +u16 GetFrontierBrainMonSpecies(u8 monId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); - return sFrontierBrainsMons[facility][symbol][monPartyId].species; + return sFrontierBrainsMons[facility][symbol][monId].species; } -void sub_81A5030(u8 facility) +void SetFrontierBrainEventObjGfx(u8 facility) { gTrainerBattleOpponent_A = TRAINER_FRONTIER_BRAIN; - VarSet(VAR_OBJ_GFX_ID_0, gUnknown_08611C8C[facility][0]); + VarSet(VAR_OBJ_GFX_ID_0, sFacilityToBrainEventObjGfx[facility][0]); } -u16 sub_81A5060(u8 monId, u8 moveSlotId) +u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); @@ -2089,15 +2689,15 @@ u16 sub_81A5060(u8 monId, u8 moveSlotId) return sFrontierBrainsMons[facility][symbol][monId].moves[moveSlotId]; } -u8 sub_81A50B0(u8 monPartyId) +u8 GetFrontierBrainMonNature(u8 monId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); - return sFrontierBrainsMons[facility][symbol][monPartyId].nature; + return sFrontierBrainsMons[facility][symbol][monId].nature; } -u8 sub_81A50F0(u8 monId, u8 evStatId) +u8 GetFrontierBrainMonEvs(u8 monId, u8 evStatId) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); s32 symbol = GetFronterBrainSymbol(); @@ -2108,7 +2708,7 @@ u8 sub_81A50F0(u8 monId, u8 evStatId) s32 GetFronterBrainSymbol(void) { s32 facility = VarGet(VAR_FRONTIER_FACILITY); - s32 symbol = sub_81A3B30(facility); + s32 symbol = GetPlayerSymbolCountForFacility(facility); if (symbol == 2) { @@ -2124,9 +2724,6 @@ s32 GetFronterBrainSymbol(void) return symbol; } -extern const u8 *const *const gUnknown_08611DB0[]; -extern const u8 *const *const gUnknown_08611DB8[]; - static void CopyFrontierBrainText(bool8 playerWonText) { s32 facility; diff --git a/src/item_menu.c b/src/item_menu.c index 37b1a961e..124fbccd2 100755 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -48,6 +48,8 @@ #include "window.h" #include "apprentice.h" +extern bool8 InBattlePike(void); + void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)()); void CB2_Bag(void); bool8 setup_bag_menu(void); diff --git a/src/new_game.c b/src/new_game.c index e6bafa7a7..d3b8c9d7b 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -69,30 +69,30 @@ static const struct ContestWinner sContestWinnerPicDummy = }; // code -void WriteUnalignedWord(u32 var, u8 *dataPtr) +void SetTrainerId(u32 trainerId, u8 *dst) { - dataPtr[0] = var; - dataPtr[1] = var >> 8; - dataPtr[2] = var >> 16; - dataPtr[3] = var >> 24; + dst[0] = trainerId; + dst[1] = trainerId >> 8; + dst[2] = trainerId >> 16; + dst[3] = trainerId >> 24; } -u32 ReadUnalignedWord(u8* dataPtr) +u32 GetTrainerId(u8 *trainerId) { - return (dataPtr[3] << 24) | (dataPtr[2] << 16) | (dataPtr[1] << 8) | (dataPtr[0]); + return (trainerId[3] << 24) | (trainerId[2] << 16) | (trainerId[1] << 8) | (trainerId[0]); } -void CopyUnalignedWord(u8 *copyTo, u8 *copyFrom) +void CopyTrainerId(u8 *dst, u8 *src) { s32 i; for (i = 0; i < 4; i++) - copyTo[i] = copyFrom[i]; + dst[i] = src[i]; } static void InitPlayerTrainerId(void) { u32 trainerId = (Random() << 0x10) | GetGeneratedTrainerIdLower(); - WriteUnalignedWord(trainerId, gSaveBlock2Ptr->playerTrainerId); + SetTrainerId(trainerId, gSaveBlock2Ptr->playerTrainerId); } // L=A isnt set here for some reason. diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index df77e3cfb..11f46b475 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -45,6 +45,8 @@ #include "constants/songs.h" #include "constants/species.h" +extern bool8 sub_81A6BF4(void); + static EWRAM_DATA struct UnkSummaryStruct { /*0x00*/ union { diff --git a/src/record_mixing.c b/src/record_mixing.c index 6caea7239..337e353a1 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1557,12 +1557,12 @@ static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src) id = ((i + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3) + 1; if (src[id].playerName[0] != EOS) { - if (ReadUnalignedWord(src[id].playerId) != ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)) + if (GetTrainerId(src[id].playerId) != GetTrainerId(gSaveBlock2Ptr->playerTrainerId)) { r8++; var_2C = id; } - if (ReadUnalignedWord(src[id].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)) + if (GetTrainerId(src[id].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId)) { var_24++; var_28 = id; @@ -1602,7 +1602,7 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) { for (j = 0; j < 2; j++) { - CopyUnalignedWord(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(dst->onePlayer[i][j].id, gSaveBlock2Ptr->playerTrainerId); dst->onePlayer[i][j].language = GAME_LANGUAGE; StringCopy(dst->onePlayer[i][j].name, gSaveBlock2Ptr->playerName); } @@ -1611,8 +1611,8 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst) for (j = 0; j < 2; j++) { dst->twoPlayers[j].language = GAME_LANGUAGE; - CopyUnalignedWord(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); - CopyUnalignedWord(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]); + CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId); + CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]); StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName); StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.field_EE1[j]); } @@ -1639,7 +1639,7 @@ static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1) for (i = 0; i < 4; i++) { - if (ReadUnalignedWord(arg0->playerId) == ReadUnalignedWord(arg1[i].playerId) + if (GetTrainerId(arg0->playerId) == GetTrainerId(arg1[i].playerId) && arg0->number == arg1[i].number) { return TRUE; @@ -1821,13 +1821,13 @@ _080E8666:\n\ ldr r6, [sp, 0x1C]\n\ adds r0, r6, r0\n\ str r3, [sp, 0x4C]\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ adds r4, r0, 0\n\ ldr r1, [sp, 0x50]\n\ ldr r0, [r1]\n\ add r0, r9\n\ adds r0, r7\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ ldr r3, [sp, 0x4C]\n\ cmp r4, r0\n\ bne _080E86A8\n\ @@ -1983,7 +1983,7 @@ _080E878E:\n\ adds r5, r0, r6\n\ adds r0, r5, 0\n\ str r3, [sp, 0x4C]\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ adds r4, r0, 0\n\ movs r6, 0x90\n\ lsls r6, 1\n\ @@ -1991,18 +1991,18 @@ _080E878E:\n\ mov r1, r9\n\ ldr r0, [r1]\n\ adds r0, r6\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ ldr r3, [sp, 0x4C]\n\ cmp r4, r0\n\ bne _080E8808\n\ adds r0, r5, 0x4\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ adds r4, r0, 0\n\ mov r2, r9\n\ ldr r0, [r2]\n\ adds r0, r6\n\ adds r0, 0x4\n\ - bl ReadUnalignedWord\n\ + bl GetTrainerId\n\ ldr r3, [sp, 0x4C]\n\ cmp r4, r0\n\ bne _080E8808\n\ diff --git a/src/recorded_battle.c b/src/recorded_battle.c index eba7039f5..50dd2efa8 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -19,14 +19,11 @@ #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_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \ + | 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_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \ | BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA)) -extern u8 gUnknown_03001278; -extern u8 gUnknown_03001279; - struct PlayerInfo { u32 trainerId; @@ -101,6 +98,9 @@ EWRAM_DATA static u8 sApprenticeId = 0; EWRAM_DATA static u16 sEasyChatSpeech[6] = {0}; EWRAM_DATA static u8 sBattleOutcome = 0; +IWRAM_DATA static u8 sRecordMixFriendLanguage; +IWRAM_DATA static u8 sApprenticeLanguage; + // this file's functions static u8 sub_8185278(u8 *arg0, u8 *arg1, u8 *arg2); static bool32 CopyRecordedBattleFromSave(struct RecordedBattleSave *dst); @@ -586,8 +586,8 @@ static void SetVariablesForRecordedBattle(struct RecordedBattleSave *src) sRecordMixFriendClass = src->recordMixFriendClass; sApprenticeId = src->apprenticeId; - gUnknown_03001278 = src->recordMixFriendLanguage; - gUnknown_03001279 = src->apprenticeLanguage; + sRecordMixFriendLanguage = src->recordMixFriendLanguage; + sApprenticeLanguage = src->apprenticeLanguage; for (i = 0; i < 6; i++) { @@ -852,7 +852,7 @@ void sub_8186468(u8 *dst) dst[i] = sRecordMixFriendName[i]; dst[7] = EOS; - ConvertInternationalString(dst, gUnknown_03001278); + ConvertInternationalString(dst, sRecordMixFriendLanguage); } u8 GetRecordedBattleRecordMixFriendClass(void) @@ -867,12 +867,12 @@ u8 GetRecordedBattleApprenticeId(void) u8 GetRecordedBattleRecordMixFriendLanguage(void) { - return gUnknown_03001278; + return sRecordMixFriendLanguage; } u8 GetRecordedBattleApprenticeLanguage(void) { - return gUnknown_03001279; + return sApprenticeLanguage; } void RecordedBattle_SaveBattleOutcome(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index d3189bec7..5a5867a96 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -49,6 +49,11 @@ #include "tv.h" #include "window.h" +extern u16 sub_81A89A0(u8); +extern void sub_81A8AF8(void); +extern void sub_81A895C(void); +extern void sub_81A8934(u8); + typedef u16 (*SpecialFunc)(void); typedef void (*NativeFunc)(void); diff --git a/src/start_menu.c b/src/start_menu.c index c587d3820..81c4213e7 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -35,6 +35,8 @@ #include "field_player_avatar.h" #include "battle_pyramid_bag.h" +extern bool8 InBattlePike(void); + // Menu actions enum { diff --git a/src/walda_phrase.c b/src/walda_phrase.c index 4a82be14f..ff2ee7399 100644 --- a/src/walda_phrase.c +++ b/src/walda_phrase.c @@ -95,7 +95,7 @@ u16 TryGetWallpaperWithWaldaPhrase(void) { u16 backgroundClr, foregroundClr; u8 patternId, iconId; - u16 trainerId = ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId); + u16 trainerId = GetTrainerId(gSaveBlock2Ptr->playerTrainerId); gSpecialVar_Result = TryCalculateWallpaper(&backgroundClr, &foregroundClr, &iconId, &patternId, trainerId, GetWaldaPhrasePtr()); if (gSpecialVar_Result) -- cgit v1.2.3 From 3159e958b8ce08101e8711b4acc6d51b90fcb7cb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 3 Nov 2018 18:21:33 +0100 Subject: Match a record mixing function --- src/record_mixing.c | 474 ++++++++-------------------------------------------- 1 file changed, 69 insertions(+), 405 deletions(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 337e353a1..5f1aef1df 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -97,7 +97,7 @@ static IWRAM_DATA void *sBattleTowerSave_Duplicate; static IWRAM_DATA u32 sRecordStructSize; static IWRAM_DATA u8 gUnknown_03001160; static IWRAM_DATA u32 filler_03001164; -static IWRAM_DATA u32 gUnknown_03001168[3]; +static IWRAM_DATA struct PlayerHallRecords *gUnknown_03001168[3]; static EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02039F9C = {0}; static EWRAM_DATA union PlayerRecords *sReceivedRecords = NULL; @@ -1687,409 +1687,73 @@ static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2 } } -NAKED -static void sub_80E8578(struct RecordMixingHallRecords *arg0, struct PlayerHallRecords *arg1, size_t arg2, u32 arg3, u32 arg4) +static void sub_80E8578(struct RecordMixingHallRecords *dst, void *hallRecords, size_t recordSize, u32 arg3, s32 linkPlayerCount) { - asm_unified(" push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x54\n\ - str r0, [sp]\n\ - ldr r0, [sp, 0x74]\n\ - movs r4, 0\n\ - mov r8, r4\n\ - movs r5, 0\n\ - str r5, [sp, 0x4]\n\ - ldr r4, =gUnknown_03001168\n\ - b _080E85A0\n\ - .pool\n\ -_080E8598:\n\ - adds r1, r2\n\ - ldr r6, [sp, 0x4]\n\ - adds r6, 0x1\n\ - str r6, [sp, 0x4]\n\ -_080E85A0:\n\ - ldr r5, [sp, 0x4]\n\ - cmp r5, r0\n\ - bge _080E85B6\n\ - cmp r5, r3\n\ - beq _080E85B0\n\ - stm r4!, {r1}\n\ - movs r6, 0x1\n\ - add r8, r6\n\ -_080E85B0:\n\ - mov r5, r8\n\ - cmp r5, 0x3\n\ - bne _080E8598\n\ -_080E85B6:\n\ - movs r6, 0\n\ - str r6, [sp, 0x4]\n\ - subs r0, 0x1\n\ - str r0, [sp, 0x24]\n\ -_080E85BE:\n\ - movs r0, 0\n\ - str r0, [sp, 0x8]\n\ - ldr r1, [sp, 0x4]\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x28]\n\ - ldr r2, [sp, 0x4]\n\ - lsls r2, 1\n\ - str r2, [sp, 0x34]\n\ - ldr r3, [sp, 0x4]\n\ - adds r3, r2, r3\n\ - str r3, [sp, 0x10]\n\ - movs r4, 0\n\ - str r4, [sp, 0x44]\n\ - movs r5, 0\n\ - str r5, [sp, 0x48]\n\ -_080E85DC:\n\ - movs r6, 0\n\ - mov r8, r6\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r1, [r0]\n\ - ldr r2, [sp, 0x10]\n\ - lsls r0, r2, 5\n\ - ldr r3, [sp, 0x48]\n\ - adds r0, r3, r0\n\ - adds r3, r0, r1\n\ - lsls r0, r2, 6\n\ - ldr r4, [sp, 0x44]\n\ - adds r0, r4, r0\n\ - ldr r5, [sp]\n\ - adds r2, r0, r5\n\ -_080E85F8:\n\ - adds r0, r2, 0\n\ - movs r6, 0x87\n\ - lsls r6, 2\n\ - adds r1, r3, r6\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ - adds r3, 0x10\n\ - adds r2, 0x10\n\ - movs r0, 0x1\n\ - add r8, r0\n\ - mov r1, r8\n\ - cmp r1, 0x2\n\ - ble _080E85F8\n\ - movs r2, 0\n\ - mov r8, r2\n\ - ldr r3, [sp, 0x24]\n\ - cmp r8, r3\n\ - bge _080E86DC\n\ - ldr r4, [sp, 0x4]\n\ - lsls r4, 5\n\ - mov r9, r4\n\ - ldr r5, [sp, 0x8]\n\ - lsls r7, r5, 4\n\ - ldr r6, [sp, 0x34]\n\ - ldr r1, [sp, 0x4]\n\ - adds r0, r6, r1\n\ - lsls r0, 6\n\ - str r0, [sp, 0x14]\n\ - ldr r2, [sp]\n\ - adds r0, r2, r0\n\ - ldr r3, [sp, 0x44]\n\ - str r3, [sp, 0x18]\n\ - adds r0, r3\n\ - str r0, [sp, 0x1C]\n\ - ldr r4, [sp, 0x14]\n\ - adds r0, r3, r4\n\ - adds r0, r2\n\ - adds r0, 0x30\n\ - mov r10, r0\n\ -_080E864A:\n\ - movs r5, 0\n\ - str r5, [sp, 0xC]\n\ - movs r3, 0\n\ - mov r6, r8\n\ - lsls r6, 2\n\ - str r6, [sp, 0x38]\n\ - ldr r1, [sp, 0x18]\n\ - ldr r2, [sp, 0x14]\n\ - adds r0, r1, r2\n\ - ldr r4, [sp]\n\ - adds r5, r0, r4\n\ - ldr r0, =gUnknown_03001168\n\ - adds r0, r6, r0\n\ - str r0, [sp, 0x50]\n\ -_080E8666:\n\ - lsls r0, r3, 4\n\ - ldr r6, [sp, 0x1C]\n\ - adds r0, r6, r0\n\ - str r3, [sp, 0x4C]\n\ - bl GetTrainerId\n\ - adds r4, r0, 0\n\ - ldr r1, [sp, 0x50]\n\ - ldr r0, [r1]\n\ - add r0, r9\n\ - adds r0, r7\n\ - bl GetTrainerId\n\ - ldr r3, [sp, 0x4C]\n\ - cmp r4, r0\n\ - bne _080E86A8\n\ - ldr r2, [sp, 0xC]\n\ - adds r2, 0x1\n\ - str r2, [sp, 0xC]\n\ - ldr r4, [sp, 0x50]\n\ - ldr r0, [r4]\n\ - mov r6, r9\n\ - adds r1, r7, r6\n\ - adds r1, r0, r1\n\ - ldrh r0, [r5, 0x4]\n\ - ldrh r2, [r1, 0x4]\n\ - cmp r0, r2\n\ - bcs _080E86A8\n\ - adds r0, r5, 0\n\ - ldm r1!, {r2,r4,r6}\n\ - stm r0!, {r2,r4,r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ -_080E86A8:\n\ - adds r5, 0x10\n\ - adds r3, 0x1\n\ - cmp r3, 0x2\n\ - ble _080E8666\n\ - ldr r3, [sp, 0xC]\n\ - cmp r3, 0\n\ - bne _080E86CE\n\ - ldr r0, =gUnknown_03001168\n\ - ldr r4, [sp, 0x38]\n\ - adds r0, r4, r0\n\ - ldr r0, [r0]\n\ - mov r5, r9\n\ - adds r2, r7, r5\n\ - mov r1, r10\n\ - adds r0, r2\n\ - ldm r0!, {r2,r3,r6}\n\ - stm r1!, {r2,r3,r6}\n\ - ldr r0, [r0]\n\ - str r0, [r1]\n\ -_080E86CE:\n\ - movs r4, 0x10\n\ - add r10, r4\n\ - movs r5, 0x1\n\ - add r8, r5\n\ - ldr r6, [sp, 0x24]\n\ - cmp r8, r6\n\ - blt _080E864A\n\ -_080E86DC:\n\ - ldr r0, [sp, 0x44]\n\ - adds r0, 0x60\n\ - str r0, [sp, 0x44]\n\ - ldr r1, [sp, 0x48]\n\ - adds r1, 0x30\n\ - str r1, [sp, 0x48]\n\ - ldr r2, [sp, 0x8]\n\ - adds r2, 0x1\n\ - str r2, [sp, 0x8]\n\ - cmp r2, 0x1\n\ - bgt _080E86F4\n\ - b _080E85DC\n\ -_080E86F4:\n\ - ldr r3, [sp, 0x28]\n\ - str r3, [sp, 0x4]\n\ - cmp r3, 0x8\n\ - bgt _080E86FE\n\ - b _080E85BE\n\ -_080E86FE:\n\ - movs r4, 0\n\ - str r4, [sp, 0x8]\n\ -_080E8702:\n\ - ldr r5, [sp, 0x8]\n\ - adds r5, 0x1\n\ - str r5, [sp, 0x2C]\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r1, [r0]\n\ - movs r0, 0x54\n\ - ldr r6, [sp, 0x8]\n\ - muls r0, r6\n\ - adds r3, r0, r1\n\ - movs r0, 0xA8\n\ - muls r0, r6\n\ - ldr r1, [sp]\n\ - adds r2, r0, r1\n\ - movs r4, 0x2\n\ - mov r8, r4\n\ -_080E8720:\n\ - movs r5, 0xD8\n\ - lsls r5, 3\n\ - adds r0, r2, r5\n\ - ldr r6, =0x0000057c\n\ - adds r1, r3, r6\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ - adds r3, 0x1C\n\ - adds r2, 0x1C\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - add r8, r0\n\ - mov r1, r8\n\ - cmp r1, 0\n\ - bge _080E8720\n\ - movs r2, 0\n\ - mov r8, r2\n\ - ldr r3, [sp, 0x24]\n\ - cmp r8, r3\n\ - blt _080E8752\n\ - b _080E885A\n\ -_080E8752:\n\ - ldr r4, [sp, 0x8]\n\ - lsls r1, r4, 3\n\ - movs r0, 0xA8\n\ - adds r5, r4, 0\n\ - muls r5, r0\n\ - str r5, [sp, 0x20]\n\ - str r5, [sp, 0x3C]\n\ - subs r1, r4\n\ - lsls r1, 2\n\ - mov r10, r1\n\ -_080E8766:\n\ - movs r6, 0\n\ - str r6, [sp, 0xC]\n\ - mov r0, r8\n\ - lsls r0, 2\n\ - str r0, [sp, 0x38]\n\ - mov r1, r8\n\ - adds r1, 0x1\n\ - str r1, [sp, 0x30]\n\ - ldr r0, =gUnknown_03001168\n\ - ldr r2, [sp, 0x38]\n\ - adds r2, r0\n\ - mov r9, r2\n\ - ldr r3, [sp]\n\ - movs r4, 0xD8\n\ - lsls r4, 3\n\ - adds r0, r3, r4\n\ - ldr r5, [sp, 0x3C]\n\ - adds r7, r5, r0\n\ - str r6, [sp, 0x40]\n\ - movs r3, 0x2\n\ -_080E878E:\n\ - ldr r1, [sp, 0x20]\n\ - movs r2, 0xD8\n\ - lsls r2, 3\n\ - adds r0, r1, r2\n\ - ldr r4, [sp]\n\ - adds r0, r4, r0\n\ - ldr r6, [sp, 0x40]\n\ - adds r5, r0, r6\n\ - adds r0, r5, 0\n\ - str r3, [sp, 0x4C]\n\ - bl GetTrainerId\n\ - adds r4, r0, 0\n\ - movs r6, 0x90\n\ - lsls r6, 1\n\ - add r6, r10\n\ - mov r1, r9\n\ - ldr r0, [r1]\n\ - adds r0, r6\n\ - bl GetTrainerId\n\ - ldr r3, [sp, 0x4C]\n\ - cmp r4, r0\n\ - bne _080E8808\n\ - adds r0, r5, 0x4\n\ - bl GetTrainerId\n\ - adds r4, r0, 0\n\ - mov r2, r9\n\ - ldr r0, [r2]\n\ - adds r0, r6\n\ - adds r0, 0x4\n\ - bl GetTrainerId\n\ - ldr r3, [sp, 0x4C]\n\ - cmp r4, r0\n\ - bne _080E8808\n\ - ldr r4, [sp, 0xC]\n\ - adds r4, 0x1\n\ - str r4, [sp, 0xC]\n\ - mov r5, r9\n\ - ldr r0, [r5]\n\ - mov r6, r10\n\ - adds r2, r0, r6\n\ - movs r0, 0x94\n\ - lsls r0, 1\n\ - adds r1, r2, r0\n\ - ldrh r0, [r7, 0x8]\n\ - ldrh r1, [r1]\n\ - cmp r0, r1\n\ - bcs _080E8808\n\ - adds r0, r7, 0\n\ - movs r4, 0x90\n\ - lsls r4, 1\n\ - adds r1, r2, r4\n\ - ldm r1!, {r2,r5,r6}\n\ - stm r0!, {r2,r5,r6}\n\ - ldm r1!, {r4-r6}\n\ - stm r0!, {r4-r6}\n\ - ldr r1, [r1]\n\ - str r1, [r0]\n\ -_080E8808:\n\ - adds r7, 0x1C\n\ - ldr r0, [sp, 0x40]\n\ - adds r0, 0x1C\n\ - str r0, [sp, 0x40]\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _080E878E\n\ - ldr r1, [sp, 0xC]\n\ - cmp r1, 0\n\ - bne _080E8850\n\ - mov r0, r8\n\ - adds r0, 0x3\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - ldr r2, [sp, 0x20]\n\ - adds r1, r2\n\ - ldr r3, [sp]\n\ - adds r1, r3, r1\n\ - ldr r0, =gUnknown_03001168\n\ - ldr r4, [sp, 0x38]\n\ - adds r0, r4, r0\n\ - ldr r0, [r0]\n\ - add r0, r10\n\ - movs r5, 0xD8\n\ - lsls r5, 3\n\ - adds r1, r5\n\ - movs r6, 0x90\n\ - lsls r6, 1\n\ - adds r0, r6\n\ - ldm r0!, {r2-r4}\n\ - stm r1!, {r2-r4}\n\ - ldm r0!, {r2,r5,r6}\n\ - stm r1!, {r2,r5,r6}\n\ - ldr r0, [r0]\n\ - str r0, [r1]\n\ -_080E8850:\n\ - ldr r3, [sp, 0x30]\n\ - mov r8, r3\n\ - ldr r4, [sp, 0x24]\n\ - cmp r8, r4\n\ - blt _080E8766\n\ -_080E885A:\n\ - ldr r5, [sp, 0x2C]\n\ - str r5, [sp, 0x8]\n\ - cmp r5, 0x1\n\ - bgt _080E8864\n\ - b _080E8702\n\ -_080E8864:\n\ - add sp, 0x54\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - "); + s32 i, j, k, l; + s32 var_68; + + k = 0; + i = 0; + while (1) + { + if (i >= linkPlayerCount) + break; + if (i != arg3) + gUnknown_03001168[k++] = hallRecords; + + if (k == 3) + break; + hallRecords += recordSize; + i++; + } + + for (i = 0; i < HALL_FACILITIES_COUNT; i++) + { + for (j = 0; j < 2; j++) + { + for (k = 0; k < 3; k++) + dst->hallRecords1P[i][j][k] = gSaveBlock2Ptr->hallRecords1P[i][j][k]; + + for (k = 0; k < linkPlayerCount - 1; k++) + { + var_68 = 0; + for (l = 0; l < 3; l++) + { + if (GetTrainerId(dst->hallRecords1P[i][j][l].id) == GetTrainerId(gUnknown_03001168[k]->onePlayer[i][j].id)) + { + var_68++; + if (dst->hallRecords1P[i][j][l].winStreak < gUnknown_03001168[k]->onePlayer[i][j].winStreak) + dst->hallRecords1P[i][j][l] = gUnknown_03001168[k]->onePlayer[i][j]; + } + } + if (var_68 == 0) + dst->hallRecords1P[i][j][k + 3] = gUnknown_03001168[k]->onePlayer[i][j]; + } + } + } + + for (j = 0; j < 2; j++) + { + for (k = 0; k < 3; k++) + dst->hallRecords2P[j][k] = gSaveBlock2Ptr->hallRecords2P[j][k]; + + for (k = 0; k < linkPlayerCount - 1; k++) + { + var_68 = 0; + for (l = 0; l < 3; l++) + { + if (GetTrainerId(dst->hallRecords2P[j][l].id1) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id1) + && GetTrainerId(dst->hallRecords2P[j][l].id2) == GetTrainerId(gUnknown_03001168[k]->twoPlayers[j].id2)) + { + var_68++; + if (dst->hallRecords2P[j][l].winStreak < gUnknown_03001168[k]->twoPlayers[j].winStreak) + dst->hallRecords2P[j][l] = gUnknown_03001168[k]->twoPlayers[j]; + } + } + if (var_68 == 0) + dst->hallRecords2P[j][k + 3] = gUnknown_03001168[k]->twoPlayers[j]; + } + } } static void sub_80E8880(struct RankingHall1P *arg0, struct RankingHall1P *arg1) @@ -2155,12 +1819,12 @@ static void sub_80E8924(struct RecordMixingHallRecords *arg0) sub_80E88CC(gSaveBlock2Ptr->hallRecords2P[j], arg0->hallRecords2P[j]); } -static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2) +static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t recordSize, u32 arg2) { u8 linkPlayerCount = GetLinkPlayerCount(); struct RecordMixingHallRecords *largeStructPtr = AllocZeroed(sizeof(struct RecordMixingHallRecords)); - sub_80E8578(largeStructPtr, hallRecords, arg1, arg2, linkPlayerCount); + sub_80E8578(largeStructPtr, hallRecords, recordSize, arg2, linkPlayerCount); sub_80E8924(largeStructPtr); Free(largeStructPtr); -- cgit v1.2.3 From 258ec3162f981932a83d08e404f1944a12b3f952 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 5 Nov 2018 22:13:59 +0100 Subject: frontier util review changes --- src/frontier_util.c | 40 ++++++++++++++++++++-------------------- src/new_game.c | 2 +- 2 files changed, 21 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/frontier_util.c b/src/frontier_util.c index 33cef0ac6..39f472a60 100644 --- a/src/frontier_util.c +++ b/src/frontier_util.c @@ -96,12 +96,12 @@ static void CopyFrontierBrainText(bool8 playerWonText); static const u8 gUnknown_08611550[][4] = { [FRONTIER_FACILITY_TOWER] = {0x23, 0x46, 0x23, 0x01}, - [FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00}, - [FRONTIER_FACILITY_PALACE] = {0x15, 0x2a, 0x15, 0x01}, - [FRONTIER_FACILITY_ARENA] = {0x1c, 0x38, 0x1c, 0x01}, - [FRONTIER_FACILITY_FACTORY] = {0x15, 0x2a, 0x15, 0x01}, - [FRONTIER_FACILITY_PIKE] = {0x1c, 0x8c, 0x38, 0x01}, - [FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00}, + [FRONTIER_FACILITY_DOME] = {0x04, 0x09, 0x05, 0x00}, + [FRONTIER_FACILITY_PALACE] = {0x15, 0x2a, 0x15, 0x01}, + [FRONTIER_FACILITY_ARENA] = {0x1c, 0x38, 0x1c, 0x01}, + [FRONTIER_FACILITY_FACTORY] = {0x15, 0x2a, 0x15, 0x01}, + [FRONTIER_FACILITY_PIKE] = {0x1c, 0x8c, 0x38, 0x01}, + [FRONTIER_FACILITY_PYRAMID] = {0x15, 0x46, 0x23, 0x00}, }; static const struct FrontierBrainMon sFrontierBrainsMons[][2][3] = @@ -604,12 +604,12 @@ static const u8 gUnknown_086118B4[][7][4] = static const u16 gUnknown_08611BFC[][2] = { [FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002}, - [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008}, - [FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020}, - [FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080}, - [FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200}, - [FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800}, - [FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000}, + [FRONTIER_FACILITY_DOME] = {0x0004, 0x0008}, + [FRONTIER_FACILITY_PALACE] = {0x0010, 0x0020}, + [FRONTIER_FACILITY_ARENA] = {0x0040, 0x0080}, + [FRONTIER_FACILITY_FACTORY] = {0x0100, 0x0200}, + [FRONTIER_FACILITY_PIKE] = {0x0400, 0x0800}, + [FRONTIER_FACILITY_PYRAMID] = {0x1000, 0x2000}, }; static void (* const sFrontierUtilFuncs[])(void) = @@ -849,7 +849,7 @@ static void ShowFacilityResultsWindow(void) case FRONTIER_FACILITY_PYRAMID: ShowPyramidResultsWindow(); break; - case 7: + case RESULTS_LINK_CONTEST: ShowLinkContestResultsWindow(); break; } @@ -865,7 +865,7 @@ static bool8 sub_81A1C24(u32 flags) static void PrintAligned(const u8 *str, s32 y) { - s32 x = GetStringCenterAlignXOffset(1, str, 0xE0); + s32 x = GetStringCenterAlignXOffset(1, str, 224); y = (y * 8) + 1; AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, y, TEXT_SPEED_FF, NULL); } @@ -1394,23 +1394,23 @@ static void ShowLinkContestResultsWindow(void) FillWindowPixelBuffer(gRecordsWindowId, 0x11); StringExpandPlaceholders(gStringVar4, gText_LinkContestResults); - x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0); + x = GetStringCenterAlignXOffset(1, gStringVar4, 208); AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x, 1, TEXT_SPEED_FF, NULL); str = gText_1st; - x = GetStringRightAlignXOffset(1, str, 0x26) + 50; + x = GetStringRightAlignXOffset(1, str, 38) + 50; AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); str = gText_2nd; - x = GetStringRightAlignXOffset(1, str, 0x26) + 88; + x = GetStringRightAlignXOffset(1, str, 38) + 88; AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); str = gText_3rd; - x = GetStringRightAlignXOffset(1, str, 0x26) + 126; + x = GetStringRightAlignXOffset(1, str, 38) + 126; AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); str = gText_4th; - x = GetStringRightAlignXOffset(1, str, 0x26) + 164; + x = GetStringRightAlignXOffset(1, str, 38) + 164; AddTextPrinterParameterized(gRecordsWindowId, 1, str, x, 25, TEXT_SPEED_FF, NULL); x = 6; @@ -2274,7 +2274,7 @@ void ScrollRankingHallRecordsWindow(void) CopyWindowToVram(gRecordsWindowId, 2); } -void ClearnRankingHallRecords(void) +void ClearRankingHallRecords(void) { s32 i, j, k; diff --git a/src/new_game.c b/src/new_game.c index d3b8c9d7b..cdabd5ccc 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -204,7 +204,7 @@ void NewGameInitData(void) copy_strings_to_sav1(); SetLilycoveLady(); ResetAllApprenticeData(); - ClearnRankingHallRecords(); + ClearRankingHallRecords(); sub_8195E10(); sub_801AFD8(); sub_800E5AC(); -- cgit v1.2.3