Document Frontier Util
This commit is contained in:
@@ -22,6 +22,7 @@
|
||||
#include "constants/songs.h"
|
||||
#include "constants/battle_string_ids.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/rgb.h"
|
||||
@@ -786,14 +787,14 @@ static void InitArenaChallenge(void)
|
||||
bool32 isCurrent;
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x80;
|
||||
isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_OPEN;
|
||||
else
|
||||
isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x40;
|
||||
isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_50;
|
||||
|
||||
if (!isCurrent)
|
||||
gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] = 0;
|
||||
@@ -816,9 +817,9 @@ static void GetArenaData(void)
|
||||
break;
|
||||
case 2:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x80;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_OPEN;
|
||||
else
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x40;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_ARENA_50;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -839,16 +840,16 @@ static void SetArenaData(void)
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
{
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= 0x80;
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_ARENA_OPEN;
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= ~(0x80);
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_ARENA_OPEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= 0x40;
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_ARENA_50;
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= ~(0x40);
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_ARENA_50);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -856,10 +857,10 @@ static void SetArenaData(void)
|
||||
|
||||
static void sub_81A5AC4(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 1;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void SetArenaRewardItem(void)
|
||||
|
||||
@@ -1104,16 +1104,16 @@ static void (* const sBattleDomeFunctions[])(void) =
|
||||
InitDomeTrainers,
|
||||
};
|
||||
|
||||
static const u32 gUnknown_0860D0EC[][2] =
|
||||
static const u32 sWinStreakFlags[][2] =
|
||||
{
|
||||
{0x00000004, 0x00000008},
|
||||
{0x00100000, 0x00200000},
|
||||
{STREAK_DOME_SINGLES_50, STREAK_DOME_SINGLES_OPEN},
|
||||
{STREAK_DOME_DOUBLES_50, STREAK_DOME_DOUBLES_OPEN},
|
||||
};
|
||||
|
||||
static const u32 gUnknown_0860D0FC[][2] =
|
||||
static const u32 sWinStreakMasks[][2] =
|
||||
{
|
||||
{0xfffffffb, 0xfffffff7},
|
||||
{0xffefffff, 0xffdfffff},
|
||||
{~(STREAK_DOME_SINGLES_50), ~(STREAK_DOME_SINGLES_OPEN)},
|
||||
{~(STREAK_DOME_DOUBLES_50), ~(STREAK_DOME_DOUBLES_OPEN)},
|
||||
};
|
||||
|
||||
static const u8 sIdToOpponentId[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] =
|
||||
@@ -2262,11 +2262,11 @@ static void InitDomeChallenge(void)
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
|
||||
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]))
|
||||
if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
|
||||
gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] = 0;
|
||||
|
||||
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
@@ -2284,7 +2284,7 @@ static void GetDomeData(void)
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
|
||||
break;
|
||||
case 1:
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0);
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
|
||||
break;
|
||||
case 2:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0;
|
||||
@@ -2332,8 +2332,8 @@ static void GetDomeData(void)
|
||||
break;
|
||||
case 8:
|
||||
ClearSelectedPartyOrder();
|
||||
gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.field_CB0;
|
||||
gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8;
|
||||
gSelectedOrderFromParty[0] = gSaveBlock2Ptr->frontier.selectedPartyMons[3];
|
||||
gSelectedOrderFromParty[1] = gSaveBlock2Ptr->frontier.selectedPartyMons[3] >> 8;
|
||||
break;
|
||||
case 9:
|
||||
gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B;
|
||||
@@ -2353,9 +2353,9 @@ static void SetDomeData(void)
|
||||
break;
|
||||
case 1:
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
|
||||
break;
|
||||
case 2:
|
||||
gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006;
|
||||
@@ -2402,7 +2402,7 @@ static void SetDomeData(void)
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gSelectedOrderFromParty);
|
||||
gSaveBlock2Ptr->frontier.selectedPartyMons[3] = T1_READ_16(gSelectedOrderFromParty);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2432,12 +2432,12 @@ static void InitDomeTrainers(void)
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[0].eliminatedAt = 0;
|
||||
gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.domeMonIds[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_SPECIES, NULL);
|
||||
for (j = 0; j < MAX_MON_MOVES; 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++)
|
||||
for (j = 0; j < NUM_STATS; j++)
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], MON_DATA_HP_EV + j, NULL);
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1]);
|
||||
@@ -2500,9 +2500,9 @@ static void InitDomeTrainers(void)
|
||||
|
||||
monTypesBits = 0;
|
||||
statSums[0] = 0;
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
trainerId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1; // Great variable choice, gamefreak.
|
||||
trainerId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
|
||||
statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL);
|
||||
statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL);
|
||||
statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL);
|
||||
@@ -3329,10 +3329,10 @@ static void SetDomeOpponentGraphicsId(void)
|
||||
|
||||
static void sub_81902F8(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 1;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void UpdateDomeStreaks(void)
|
||||
@@ -6017,7 +6017,7 @@ static void sub_8194F58(void)
|
||||
species[0] = 0;
|
||||
species[1] = 0;
|
||||
species[2] = 0;
|
||||
if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.challengeOutcome != 1)
|
||||
if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.challengeStatus != CHALLENGE_STATUS_SAVING)
|
||||
return;
|
||||
|
||||
statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT);
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "constants/species.h"
|
||||
#include "constants/battle_ai.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/layouts.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/moves.h"
|
||||
@@ -131,16 +132,16 @@ static void (* const sBattleFactoryFunctions[])(void) =
|
||||
RestorePlayerPartyHeldItems,
|
||||
};
|
||||
|
||||
static const u32 gUnknown_08612164[][2] =
|
||||
static const u32 sWinStreakFlags[][2] =
|
||||
{
|
||||
{0x100, 0x200},
|
||||
{0x1000000, 0x2000000},
|
||||
{STREAK_FACTORY_SINGLES_50, STREAK_FACTORY_SINGLES_OPEN},
|
||||
{STREAK_FACTORY_DOUBLES_50, STREAK_FACTORY_DOUBLES_OPEN},
|
||||
};
|
||||
|
||||
static const u32 gUnknown_08612174[][2] =
|
||||
static const u32 sWinStreakMasks[][2] =
|
||||
{
|
||||
{0xfffffeff, 0xfffffdff},
|
||||
{0xfeffffff, 0xfdffffff},
|
||||
{~(STREAK_FACTORY_SINGLES_50), ~(STREAK_FACTORY_SINGLES_OPEN)},
|
||||
{~(STREAK_FACTORY_DOUBLES_50), ~(STREAK_FACTORY_DOUBLES_OPEN)},
|
||||
};
|
||||
|
||||
static const u8 sFixedIVTable[][2] =
|
||||
@@ -187,11 +188,11 @@ static void InitFactoryChallenge(void)
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
|
||||
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode]))
|
||||
if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] = 0;
|
||||
gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode] = 0;
|
||||
@@ -218,7 +219,7 @@ static void GetBattleFactoryData(void)
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
|
||||
break;
|
||||
case 2:
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612164[battleMode][lvlMode]) != 0);
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
|
||||
break;
|
||||
case 3:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode];
|
||||
@@ -238,9 +239,9 @@ static void SetBattleFactoryData(void)
|
||||
break;
|
||||
case 2:
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_08612164[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_08612174[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
|
||||
break;
|
||||
case 3:
|
||||
if (sPerformedRentalSwap == TRUE)
|
||||
@@ -254,10 +255,10 @@ static void SetBattleFactoryData(void)
|
||||
|
||||
static void sub_81A613C(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 1;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void nullsub_75(void)
|
||||
|
||||
@@ -1195,7 +1195,7 @@ const u8 gText_Love[] = _("love");
|
||||
const u8 gText_SpaceAndSpace[] = _(" and ");
|
||||
const u8 gText_CommaSpace[] = _(", ");
|
||||
const u8 gText_Space2[] = _(" ");
|
||||
const u8 gText_ScrollTextUp[] = _("\l");
|
||||
const u8 gText_LineBreak[] = _("\l");
|
||||
const u8 gText_NewLine[] = _("\n");
|
||||
const u8 gText_Are[] = _("are");
|
||||
const u8 gText_Are2[] = _("are");
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
#include "item.h"
|
||||
#include "string_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/frontier_util.h"
|
||||
|
||||
// This file's functions.
|
||||
static void sub_8195980(void);
|
||||
@@ -39,16 +41,16 @@ static void (* const sBattlePalaceFunctions[])(void) =
|
||||
static const u16 gUnknown_0860DE78[] = {ITEM_HP_UP, ITEM_PROTEIN, ITEM_IRON, ITEM_CALCIUM, ITEM_CARBOS, ITEM_ZINC};
|
||||
static const u16 gUnknown_0860DE84[] = {ITEM_BRIGHT_POWDER, ITEM_WHITE_HERB, ITEM_QUICK_CLAW, ITEM_LEFTOVERS, ITEM_MENTAL_HERB, ITEM_KINGS_ROCK, ITEM_FOCUS_BAND, ITEM_SCOPE_LENS, ITEM_CHOICE_BAND};
|
||||
|
||||
static const u32 gUnknown_0860DE98[][2] =
|
||||
static const u32 sWinStreakFlags[][2] =
|
||||
{
|
||||
{0x10, 0x20},
|
||||
{0x400000, 0x800000},
|
||||
{STREAK_PALACE_SINGLES_50, STREAK_PALACE_SINGLES_OPEN},
|
||||
{STREAK_PALACE_DOUBLES_50, STREAK_PALACE_DOUBLES_OPEN},
|
||||
};
|
||||
|
||||
static const u32 gUnknown_0860DEA8[][2] =
|
||||
static const u32 sWinStreakMasks[][2] =
|
||||
{
|
||||
{~0x10, ~0x20},
|
||||
{~0x400000, ~0x800000},
|
||||
{~(STREAK_PALACE_SINGLES_50), ~(STREAK_PALACE_SINGLES_OPEN)},
|
||||
{~(STREAK_PALACE_DOUBLES_50), ~(STREAK_PALACE_DOUBLES_OPEN)},
|
||||
};
|
||||
|
||||
// code
|
||||
@@ -62,11 +64,11 @@ static void sub_8195980(void)
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
|
||||
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]))
|
||||
if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
|
||||
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] = 0;
|
||||
|
||||
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
@@ -87,7 +89,7 @@ static void sub_8195A38(void)
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
|
||||
break;
|
||||
case 2:
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0);
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -107,9 +109,9 @@ static void sub_8195AE4(void)
|
||||
break;
|
||||
case 2:
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -144,7 +146,7 @@ static void sub_8195C7C(void)
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < MAX_STREAK)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++;
|
||||
|
||||
@@ -156,10 +158,10 @@ static void sub_8195C7C(void)
|
||||
|
||||
static void sub_8195CE4(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 1;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void sub_8195D28(void)
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "battle_setup.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/abilities.h"
|
||||
#include "constants/easy_chat.h"
|
||||
#include "constants/layouts.h"
|
||||
@@ -537,7 +538,7 @@ static bool8 (* const sStatusInflictionScreenFadeFuncs[])(struct Task *) =
|
||||
StatusInflictionFadeOut, StatusInflictionFadeIn
|
||||
};
|
||||
|
||||
static const u32 gUnknown_08612690[] = {0x400, 0x800};
|
||||
static const u32 sWinStreakFlags[] = {STREAK_PIKE_50, STREAK_PIKE_OPEN};
|
||||
|
||||
// code
|
||||
void CallBattlePikeFunction(void)
|
||||
@@ -636,9 +637,9 @@ static void GetBattlePikeData(void)
|
||||
break;
|
||||
case 4:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x800;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PIKE_OPEN;
|
||||
else
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x400;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PIKE_50;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -653,31 +654,31 @@ static void SetBattlePikeData(void)
|
||||
gSaveBlock2Ptr->frontier.field_E02 = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 1:
|
||||
if (gSpecialVar_0x8006 <= 9999)
|
||||
if (gSpecialVar_0x8006 <= MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.pikeWinStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 2:
|
||||
if (gSpecialVar_0x8006 <= 9999 && gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] < gSpecialVar_0x8006)
|
||||
if (gSpecialVar_0x8006 <= MAX_STREAK && gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] < gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.pikeRecordStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 3:
|
||||
if (gSpecialVar_0x8006 <= 9999)
|
||||
if (gSpecialVar_0x8006 <= MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.pikeTotalStreaks[gSaveBlock2Ptr->frontier.lvlMode] = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 4:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
{
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= 0x800;
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PIKE_OPEN;
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= ~(0x800);
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PIKE_OPEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= 0x400;
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PIKE_50;
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= ~(0x400);
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PIKE_50);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -708,9 +709,9 @@ static void sub_81A740C(void)
|
||||
|
||||
static void sub_81A7418(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 1;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
save_serialize_map();
|
||||
TrySavingData(SAVE_LINK);
|
||||
}
|
||||
@@ -1587,7 +1588,7 @@ static void BackupMonHeldItems(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
int heldItem = GetMonData(&gSaveBlock1Ptr->playerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1],
|
||||
MON_DATA_HELD_ITEM);
|
||||
@@ -1599,7 +1600,7 @@ static void RestoreMonHeldItems(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
SetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1],
|
||||
MON_DATA_HELD_ITEM,
|
||||
@@ -1611,10 +1612,10 @@ static void InitPikeChallenge(void)
|
||||
{
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_08612690[lvlMode]))
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[lvlMode]))
|
||||
gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] = 0;
|
||||
|
||||
gTrainerBattleOpponent_A = 0;
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "constants/battle_pyramid.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/event_object_movement_constants.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/layouts.h"
|
||||
#include "constants/maps.h"
|
||||
@@ -514,7 +515,7 @@ static const u8 sTrainerTextGroups[50][2] =
|
||||
{FACILITY_CLASS_SAILOR, 2},
|
||||
{FACILITY_CLASS_COLLECTOR, 2},
|
||||
{FACILITY_CLASS_PKMN_BREEDER_M, 2},
|
||||
{FACILITY_CLASS_POKEMON_BREEDER_F, 3},
|
||||
{FACILITY_CLASS_PKMN_BREEDER_F, 3},
|
||||
{FACILITY_CLASS_PKMN_RANGER_M, 2},
|
||||
{FACILITY_CLASS_PKMN_RANGER_F, 3},
|
||||
{FACILITY_CLASS_LASS, 3},
|
||||
@@ -842,13 +843,13 @@ static void InitPyramidChallenge(void)
|
||||
bool32 isCurrent;
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x2000;
|
||||
isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN;
|
||||
else
|
||||
isCurrent = gSaveBlock2Ptr->frontier.field_CDC & 0x1000;
|
||||
isCurrent = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50;
|
||||
|
||||
if (!isCurrent)
|
||||
{
|
||||
@@ -875,9 +876,9 @@ static void GetBattlePyramidData(void)
|
||||
break;
|
||||
case 2:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x2000;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN;
|
||||
else
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x1000;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50;
|
||||
break;
|
||||
case 3:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_50];
|
||||
@@ -886,10 +887,10 @@ static void GetBattlePyramidData(void)
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pyramidWinStreaks[FRONTIER_LVL_OPEN];
|
||||
break;
|
||||
case 5:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x1000;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_50;
|
||||
break;
|
||||
case 6:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CDC & 0x2000;
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.winStreakActiveFlags & STREAK_PYRAMID_OPEN;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -910,16 +911,16 @@ static void SetBattlePyramidData(void)
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
{
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= 0x2000;
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PYRAMID_OPEN;
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= ~(0x2000);
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PYRAMID_OPEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= 0x1000;
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= STREAK_PYRAMID_50;
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= ~(0x1000);
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= ~(STREAK_PYRAMID_50);
|
||||
}
|
||||
break;
|
||||
case 7:
|
||||
@@ -930,9 +931,9 @@ static void SetBattlePyramidData(void)
|
||||
|
||||
static void sub_81A9134(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 1;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
save_serialize_map();
|
||||
TrySavingData(SAVE_LINK);
|
||||
}
|
||||
@@ -1169,7 +1170,7 @@ static void ClearPyramidPartyHeldItems(void)
|
||||
|
||||
for (i = 0; i < PARTY_SIZE; i++)
|
||||
{
|
||||
for (j = 0; j < 4; j++)
|
||||
for (j = 0; j < MAX_FRONTIER_PARTY_SIZE; j++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.selectedPartyMons[j] != 0 && gSaveBlock2Ptr->frontier.selectedPartyMons[j] - 1 == i)
|
||||
SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item);
|
||||
@@ -1200,10 +1201,10 @@ static void RestorePyramidPlayerParty(void)
|
||||
{
|
||||
int i, j, k, l;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
int partyIndex = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
|
||||
for (j = 0; j < 3; j++)
|
||||
for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
|
||||
{
|
||||
if (GetMonData(&gSaveBlock1Ptr->playerParty[partyIndex], MON_DATA_SPECIES, NULL) == GetMonData(&gPlayerParty[j], MON_DATA_SPECIES, NULL))
|
||||
{
|
||||
@@ -1224,7 +1225,7 @@ static void RestorePyramidPlayerParty(void)
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i];
|
||||
}
|
||||
|
||||
@@ -1434,7 +1435,7 @@ void sub_81A9E90(void)
|
||||
if (InBattlePyramid())
|
||||
{
|
||||
RestorePyramidPlayerParty();
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 2;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED;
|
||||
VarSet(VAR_TEMP_E, 0);
|
||||
LoadPlayerParty();
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ static void sub_81B9EC0(void);
|
||||
static u16 sRandMonSetId;
|
||||
|
||||
// const rom data
|
||||
void static (*const gUnknown_086160B4[])(void) =
|
||||
void static (*const sVerdanturfTentFuncs[])(void) =
|
||||
{
|
||||
sub_81B99D4,
|
||||
sub_81B9A28,
|
||||
@@ -61,7 +61,7 @@ void static (*const gUnknown_086160B4[])(void) =
|
||||
|
||||
static const u16 sVerdanturfTentRewards[] = {ITEM_NEST_BALL};
|
||||
|
||||
void static (*const gUnknown_086160D8[])(void) =
|
||||
void static (*const sFallarborTentFuncs[])(void) =
|
||||
{
|
||||
sub_81B9BA0,
|
||||
sub_81B9BF4,
|
||||
@@ -74,7 +74,7 @@ void static (*const gUnknown_086160D8[])(void) =
|
||||
|
||||
static const u16 sFallarborTentRewards[] = {ITEM_HYPER_POTION};
|
||||
|
||||
void static (*const gUnknown_086160F8[])(void) =
|
||||
void static (*const sSlateportTentFuncs[])(void) =
|
||||
{
|
||||
sub_81B9D28,
|
||||
sub_81B9D7C,
|
||||
@@ -91,16 +91,16 @@ void static (*const gUnknown_086160F8[])(void) =
|
||||
static const u16 sSlateportTentRewards[] = {ITEM_FULL_HEAL};
|
||||
|
||||
// code
|
||||
void sub_81B99B4(void)
|
||||
void CallVerdanturfTentFunction(void)
|
||||
{
|
||||
gUnknown_086160B4[gSpecialVar_0x8004]();
|
||||
sVerdanturfTentFuncs[gSpecialVar_0x8004]();
|
||||
}
|
||||
|
||||
static void sub_81B99D4(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
}
|
||||
|
||||
@@ -128,10 +128,10 @@ static void sub_81B9A90(void)
|
||||
|
||||
static void sub_81B9ABC(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = TRUE;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void sub_81B9B00(void)
|
||||
@@ -153,16 +153,16 @@ static void sub_81B9B28(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81B9B80(void)
|
||||
void CallFallarborTentFunction(void)
|
||||
{
|
||||
gUnknown_086160D8[gSpecialVar_0x8004]();
|
||||
sFallarborTentFuncs[gSpecialVar_0x8004]();
|
||||
}
|
||||
|
||||
static void sub_81B9BA0(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
}
|
||||
|
||||
@@ -178,10 +178,10 @@ static void sub_81B9C10(void)
|
||||
|
||||
static void sub_81B9C2C(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = TRUE;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void sub_81B9C70(void)
|
||||
@@ -208,16 +208,16 @@ static void sub_81B9CF0(void)
|
||||
GetFrontierTrainerName(gStringVar1, gTrainerBattleOpponent_A);
|
||||
}
|
||||
|
||||
void sub_81B9D08(void)
|
||||
void CallSlateportTentFunction(void)
|
||||
{
|
||||
gUnknown_086160F8[gSpecialVar_0x8004]();
|
||||
sSlateportTentFuncs[gSpecialVar_0x8004]();
|
||||
}
|
||||
|
||||
static void sub_81B9D28(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 0;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = 0;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = FALSE;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
SetDynamicWarp(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1);
|
||||
}
|
||||
|
||||
@@ -233,10 +233,10 @@ static void sub_81B9D98(void)
|
||||
|
||||
static void sub_81B9DB4(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = TRUE;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void sub_81B9DF8(void)
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "battle_factory.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/battle_tower.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/trainers.h"
|
||||
#include "constants/event_objects.h"
|
||||
@@ -200,7 +201,7 @@ const u8 gTowerFemaleFacilityClasses[20] =
|
||||
FACILITY_CLASS_PARASOL_LADY,
|
||||
FACILITY_CLASS_SWIMMER_F,
|
||||
FACILITY_CLASS_PICNICKER,
|
||||
FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
FACILITY_CLASS_PKMN_RANGER_F,
|
||||
FACILITY_CLASS_LASS
|
||||
};
|
||||
@@ -263,83 +264,84 @@ const u8 gTowerFemaleTrainerGfxIds[20] =
|
||||
EVENT_OBJ_GFX_LASS
|
||||
};
|
||||
|
||||
static const u8 sRubyFacilityClassToEmerald[][2] =
|
||||
// Excludes the unused RS_FACILITY_CLASS_BOARDER_1 and _2
|
||||
static const u8 sRubyFacilityClassToEmerald[RS_FACILITY_CLASSES_COUNT - 2][2] =
|
||||
{
|
||||
{0x00, FACILITY_CLASS_AQUA_LEADER_ARCHIE},
|
||||
{0x01, FACILITY_CLASS_AQUA_GRUNT_M},
|
||||
{0x02, FACILITY_CLASS_AQUA_GRUNT_F},
|
||||
{0x03, FACILITY_CLASS_AROMA_LADY},
|
||||
{0x04, FACILITY_CLASS_RUIN_MANIAC},
|
||||
{0x05, FACILITY_CLASS_INTERVIEWER},
|
||||
{0x06, FACILITY_CLASS_TUBER_F},
|
||||
{0x07, FACILITY_CLASS_TUBER_M},
|
||||
{0x08, FACILITY_CLASS_COOLTRAINER_M},
|
||||
{0x09, FACILITY_CLASS_COOLTRAINER_F},
|
||||
{0x0a, FACILITY_CLASS_HEX_MANIAC},
|
||||
{0x0b, FACILITY_CLASS_LADY},
|
||||
{0x0c, FACILITY_CLASS_BEAUTY},
|
||||
{0x0d, FACILITY_CLASS_RICH_BOY},
|
||||
{0x0e, FACILITY_CLASS_POKEMANIAC},
|
||||
{0x0f, FACILITY_CLASS_SWIMMER_M},
|
||||
{0x10, FACILITY_CLASS_BLACK_BELT},
|
||||
{0x11, FACILITY_CLASS_GUITARIST},
|
||||
{0x12, FACILITY_CLASS_KINDLER},
|
||||
{0x13, FACILITY_CLASS_CAMPER},
|
||||
{0x14, FACILITY_CLASS_BUG_MANIAC},
|
||||
{0x15, FACILITY_CLASS_PSYCHIC_M},
|
||||
{0x16, FACILITY_CLASS_PSYCHIC_F},
|
||||
{0x17, FACILITY_CLASS_GENTLEMAN},
|
||||
{0x18, FACILITY_CLASS_ELITE_FOUR_SIDNEY},
|
||||
{0x19, FACILITY_CLASS_ELITE_FOUR_PHOEBE},
|
||||
{0x1a, FACILITY_CLASS_LEADER_ROXANNE},
|
||||
{0x1b, FACILITY_CLASS_LEADER_BRAWLY},
|
||||
{0x1c, FACILITY_CLASS_LEADER_TATE_AND_LIZA},
|
||||
{0x1d, FACILITY_CLASS_SCHOOL_KID_M},
|
||||
{0x1e, FACILITY_CLASS_SCHOOL_KID_F},
|
||||
{0x1f, FACILITY_CLASS_SR_AND_JR},
|
||||
{0x20, FACILITY_CLASS_POKEFAN_M},
|
||||
{0x21, FACILITY_CLASS_POKEFAN_F},
|
||||
{0x22, FACILITY_CLASS_EXPERT_M},
|
||||
{0x23, FACILITY_CLASS_EXPERT_F},
|
||||
{0x24, FACILITY_CLASS_YOUNGSTER},
|
||||
{0x25, FACILITY_CLASS_CHAMPION_WALLACE},
|
||||
{0x26, FACILITY_CLASS_FISHERMAN},
|
||||
{0x27, FACILITY_CLASS_CYCLING_TRIATHLETE_M},
|
||||
{0x28, FACILITY_CLASS_CYCLING_TRIATHLETE_F},
|
||||
{0x29, FACILITY_CLASS_RUNNING_TRIATHLETE_M},
|
||||
{0x2a, FACILITY_CLASS_RUNNING_TRIATHLETE_F},
|
||||
{0x2b, FACILITY_CLASS_SWIMMING_TRIATHLETE_M},
|
||||
{0x2c, FACILITY_CLASS_SWIMMING_TRIATHLETE_F},
|
||||
{0x2d, FACILITY_CLASS_DRAGON_TAMER},
|
||||
{0x2e, FACILITY_CLASS_BIRD_KEEPER},
|
||||
{0x2f, FACILITY_CLASS_NINJA_BOY},
|
||||
{0x30, FACILITY_CLASS_BATTLE_GIRL},
|
||||
{0x31, FACILITY_CLASS_PARASOL_LADY},
|
||||
{0x32, FACILITY_CLASS_SWIMMER_F},
|
||||
{0x33, FACILITY_CLASS_PICNICKER},
|
||||
{0x34, FACILITY_CLASS_TWINS},
|
||||
{0x35, FACILITY_CLASS_SAILOR},
|
||||
{0x38, FACILITY_CLASS_COLLECTOR},
|
||||
{0x39, FACILITY_CLASS_WALLY},
|
||||
{0x3a, FACILITY_CLASS_BRENDAN},
|
||||
{0x3b, FACILITY_CLASS_BRENDAN_2},
|
||||
{0x3c, FACILITY_CLASS_BRENDAN_3},
|
||||
{0x3d, FACILITY_CLASS_MAY},
|
||||
{0x3e, FACILITY_CLASS_MAY_2},
|
||||
{0x3f, FACILITY_CLASS_MAY_3},
|
||||
{0x40, FACILITY_CLASS_PKMN_BREEDER_M},
|
||||
{0x41, FACILITY_CLASS_POKEMON_BREEDER_F},
|
||||
{0x42, FACILITY_CLASS_PKMN_RANGER_M},
|
||||
{0x43, FACILITY_CLASS_PKMN_RANGER_F},
|
||||
{0x44, FACILITY_CLASS_MAGMA_LEADER_MAXIE},
|
||||
{0x45, FACILITY_CLASS_MAGMA_GRUNT_M},
|
||||
{0x46, FACILITY_CLASS_MAGMA_GRUNT_F},
|
||||
{0x47, FACILITY_CLASS_LASS},
|
||||
{0x48, FACILITY_CLASS_BUG_CATCHER},
|
||||
{0x49, FACILITY_CLASS_HIKER},
|
||||
{0x4a, FACILITY_CLASS_YOUNG_COUPLE},
|
||||
{0x4b, FACILITY_CLASS_OLD_COUPLE},
|
||||
{0x4c, FACILITY_CLASS_SIS_AND_BRO},
|
||||
{RS_FACILITY_CLASS_AQUA_LEADER_ARCHIE, FACILITY_CLASS_AQUA_LEADER_ARCHIE},
|
||||
{RS_FACILITY_CLASS_AQUA_GRUNT_M, FACILITY_CLASS_AQUA_GRUNT_M},
|
||||
{RS_FACILITY_CLASS_AQUA_GRUNT_F, FACILITY_CLASS_AQUA_GRUNT_F},
|
||||
{RS_FACILITY_CLASS_AROMA_LADY, FACILITY_CLASS_AROMA_LADY},
|
||||
{RS_FACILITY_CLASS_RUIN_MANIAC, FACILITY_CLASS_RUIN_MANIAC},
|
||||
{RS_FACILITY_CLASS_INTERVIEWER, FACILITY_CLASS_INTERVIEWER},
|
||||
{RS_FACILITY_CLASS_TUBER_F, FACILITY_CLASS_TUBER_F},
|
||||
{RS_FACILITY_CLASS_TUBER_M, FACILITY_CLASS_TUBER_M},
|
||||
{RS_FACILITY_CLASS_COOLTRAINER_M, FACILITY_CLASS_COOLTRAINER_M},
|
||||
{RS_FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_COOLTRAINER_F},
|
||||
{RS_FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_HEX_MANIAC},
|
||||
{RS_FACILITY_CLASS_LADY, FACILITY_CLASS_LADY},
|
||||
{RS_FACILITY_CLASS_BEAUTY, FACILITY_CLASS_BEAUTY},
|
||||
{RS_FACILITY_CLASS_RICH_BOY, FACILITY_CLASS_RICH_BOY},
|
||||
{RS_FACILITY_CLASS_POKEMANIAC, FACILITY_CLASS_POKEMANIAC},
|
||||
{RS_FACILITY_CLASS_SWIMMER_M, FACILITY_CLASS_SWIMMER_M},
|
||||
{RS_FACILITY_CLASS_BLACK_BELT, FACILITY_CLASS_BLACK_BELT},
|
||||
{RS_FACILITY_CLASS_GUITARIST, FACILITY_CLASS_GUITARIST},
|
||||
{RS_FACILITY_CLASS_KINDLER, FACILITY_CLASS_KINDLER},
|
||||
{RS_FACILITY_CLASS_CAMPER, FACILITY_CLASS_CAMPER},
|
||||
{RS_FACILITY_CLASS_BUG_MANIAC, FACILITY_CLASS_BUG_MANIAC},
|
||||
{RS_FACILITY_CLASS_PSYCHIC_M, FACILITY_CLASS_PSYCHIC_M},
|
||||
{RS_FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_PSYCHIC_F},
|
||||
{RS_FACILITY_CLASS_GENTLEMAN, FACILITY_CLASS_GENTLEMAN},
|
||||
{RS_FACILITY_CLASS_ELITE_FOUR_M, FACILITY_CLASS_ELITE_FOUR_SIDNEY},
|
||||
{RS_FACILITY_CLASS_ELITE_FOUR_F, FACILITY_CLASS_ELITE_FOUR_PHOEBE},
|
||||
{RS_FACILITY_CLASS_LEADER_F, FACILITY_CLASS_LEADER_ROXANNE},
|
||||
{RS_FACILITY_CLASS_LEADER_M, FACILITY_CLASS_LEADER_BRAWLY},
|
||||
{RS_FACILITY_CLASS_LEADER_MF, FACILITY_CLASS_LEADER_TATE_AND_LIZA},
|
||||
{RS_FACILITY_CLASS_SCHOOL_KID_M, FACILITY_CLASS_SCHOOL_KID_M},
|
||||
{RS_FACILITY_CLASS_SCHOOL_KID_F, FACILITY_CLASS_SCHOOL_KID_F},
|
||||
{RS_FACILITY_CLASS_SR_AND_JR, FACILITY_CLASS_SR_AND_JR},
|
||||
{RS_FACILITY_CLASS_POKEFAN_M, FACILITY_CLASS_POKEFAN_M},
|
||||
{RS_FACILITY_CLASS_POKEFAN_F, FACILITY_CLASS_POKEFAN_F},
|
||||
{RS_FACILITY_CLASS_EXPERT_M, FACILITY_CLASS_EXPERT_M},
|
||||
{RS_FACILITY_CLASS_EXPERT_F, FACILITY_CLASS_EXPERT_F},
|
||||
{RS_FACILITY_CLASS_YOUNGSTER, FACILITY_CLASS_YOUNGSTER},
|
||||
{RS_FACILITY_CLASS_CHAMPION, FACILITY_CLASS_CHAMPION_WALLACE},
|
||||
{RS_FACILITY_CLASS_FISHERMAN, FACILITY_CLASS_FISHERMAN},
|
||||
{RS_FACILITY_CLASS_CYCLING_TRIATHLETE_M, FACILITY_CLASS_CYCLING_TRIATHLETE_M},
|
||||
{RS_FACILITY_CLASS_CYCLING_TRIATHLETE_F, FACILITY_CLASS_CYCLING_TRIATHLETE_F},
|
||||
{RS_FACILITY_CLASS_RUNNING_TRIATHLETE_M, FACILITY_CLASS_RUNNING_TRIATHLETE_M},
|
||||
{RS_FACILITY_CLASS_RUNNING_TRIATHLETE_F, FACILITY_CLASS_RUNNING_TRIATHLETE_F},
|
||||
{RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_M, FACILITY_CLASS_SWIMMING_TRIATHLETE_M},
|
||||
{RS_FACILITY_CLASS_SWIMMING_TRIATHLETE_F, FACILITY_CLASS_SWIMMING_TRIATHLETE_F},
|
||||
{RS_FACILITY_CLASS_DRAGON_TAMER, FACILITY_CLASS_DRAGON_TAMER},
|
||||
{RS_FACILITY_CLASS_BIRD_KEEPER, FACILITY_CLASS_BIRD_KEEPER},
|
||||
{RS_FACILITY_CLASS_NINJA_BOY, FACILITY_CLASS_NINJA_BOY},
|
||||
{RS_FACILITY_CLASS_BATTLE_GIRL, FACILITY_CLASS_BATTLE_GIRL},
|
||||
{RS_FACILITY_CLASS_PARASOL_LADY, FACILITY_CLASS_PARASOL_LADY},
|
||||
{RS_FACILITY_CLASS_SWIMMER_F, FACILITY_CLASS_SWIMMER_F},
|
||||
{RS_FACILITY_CLASS_PICNICKER, FACILITY_CLASS_PICNICKER},
|
||||
{RS_FACILITY_CLASS_TWINS, FACILITY_CLASS_TWINS},
|
||||
{RS_FACILITY_CLASS_SAILOR, FACILITY_CLASS_SAILOR},
|
||||
{RS_FACILITY_CLASS_COLLECTOR, FACILITY_CLASS_COLLECTOR},
|
||||
{RS_FACILITY_CLASS_WALLY, FACILITY_CLASS_WALLY},
|
||||
{RS_FACILITY_CLASS_BRENDAN_1, FACILITY_CLASS_BRENDAN},
|
||||
{RS_FACILITY_CLASS_BRENDAN_2, FACILITY_CLASS_BRENDAN_2},
|
||||
{RS_FACILITY_CLASS_BRENDAN_3, FACILITY_CLASS_BRENDAN_3},
|
||||
{RS_FACILITY_CLASS_MAY_1, FACILITY_CLASS_MAY},
|
||||
{RS_FACILITY_CLASS_MAY_2, FACILITY_CLASS_MAY_2},
|
||||
{RS_FACILITY_CLASS_MAY_3, FACILITY_CLASS_MAY_3},
|
||||
{RS_FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_PKMN_BREEDER_M},
|
||||
{RS_FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_PKMN_BREEDER_F},
|
||||
{RS_FACILITY_CLASS_PKMN_RANGER_M, FACILITY_CLASS_PKMN_RANGER_M},
|
||||
{RS_FACILITY_CLASS_PKMN_RANGER_F, FACILITY_CLASS_PKMN_RANGER_F},
|
||||
{RS_FACILITY_CLASS_MAGMA_LEADER, FACILITY_CLASS_MAGMA_LEADER_MAXIE},
|
||||
{RS_FACILITY_CLASS_MAGMA_GRUNT_M, FACILITY_CLASS_MAGMA_GRUNT_M},
|
||||
{RS_FACILITY_CLASS_MAGMA_GRUNT_F, FACILITY_CLASS_MAGMA_GRUNT_F},
|
||||
{RS_FACILITY_CLASS_LASS, FACILITY_CLASS_LASS},
|
||||
{RS_FACILITY_CLASS_BUG_CATCHER, FACILITY_CLASS_BUG_CATCHER},
|
||||
{RS_FACILITY_CLASS_HIKER, FACILITY_CLASS_HIKER},
|
||||
{RS_FACILITY_CLASS_YOUNG_COUPLE, FACILITY_CLASS_YOUNG_COUPLE},
|
||||
{RS_FACILITY_CLASS_OLD_COUPLE, FACILITY_CLASS_OLD_COUPLE},
|
||||
{RS_FACILITY_CLASS_SIS_AND_BRO, FACILITY_CLASS_SIS_AND_BRO},
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_085DCFD8[] =
|
||||
@@ -986,7 +988,7 @@ struct
|
||||
{FACILITY_CLASS_PSYCHIC_M, gUnknown_085DD44C},
|
||||
{FACILITY_CLASS_PSYCHIC_F, gUnknown_085DD460},
|
||||
{FACILITY_CLASS_SCHOOL_KID_F, gUnknown_085DD474},
|
||||
{FACILITY_CLASS_POKEMON_BREEDER_F, gUnknown_085DD488},
|
||||
{FACILITY_CLASS_PKMN_BREEDER_F, gUnknown_085DD488},
|
||||
{FACILITY_CLASS_POKEFAN_F, gUnknown_085DD49C},
|
||||
{FACILITY_CLASS_SWIMMER_F, gUnknown_085DD4B0},
|
||||
{FACILITY_CLASS_SWIMMING_TRIATHLETE_M, gUnknown_085DD4C4},
|
||||
@@ -1072,20 +1074,20 @@ static void (* const sBattleTowerFuncs[])(void) =
|
||||
[BATTLE_TOWER_FUNC_15] = sub_8164E04,
|
||||
};
|
||||
|
||||
static const u32 gUnknown_085DF9AC[][2] =
|
||||
static const u32 sWinStreakFlags[][2] =
|
||||
{
|
||||
{0x00000001, 0x00000002},
|
||||
{0x00004000, 0x00008000},
|
||||
{0x00010000, 0x00020000},
|
||||
{0x00040000, 0x00080000},
|
||||
{STREAK_TOWER_SINGLES_50, STREAK_TOWER_SINGLES_OPEN},
|
||||
{STREAK_TOWER_DOUBLES_50, STREAK_TOWER_DOUBLES_OPEN},
|
||||
{STREAK_TOWER_MULTIS_50, STREAK_TOWER_MULTIS_OPEN},
|
||||
{STREAK_TOWER_LINK_MULTIS_50, STREAK_TOWER_LINK_MULTIS_OPEN},
|
||||
};
|
||||
|
||||
static const u32 gUnknown_085DF9CC[][2] =
|
||||
static const u32 sWinStreakMasks[][2] =
|
||||
{
|
||||
{0xfffffffe, 0xfffffffd},
|
||||
{0xffffbfff, 0xffff7fff},
|
||||
{0xfffeffff, 0xfffdffff},
|
||||
{0xfffbffff, 0xfff7ffff},
|
||||
{~(STREAK_TOWER_SINGLES_50), ~(STREAK_TOWER_SINGLES_OPEN)},
|
||||
{~(STREAK_TOWER_DOUBLES_50), ~(STREAK_TOWER_DOUBLES_OPEN)},
|
||||
{~(STREAK_TOWER_MULTIS_50), ~(STREAK_TOWER_MULTIS_OPEN)},
|
||||
{~(STREAK_TOWER_LINK_MULTIS_50), ~(STREAK_TOWER_LINK_MULTIS_OPEN)},
|
||||
};
|
||||
|
||||
static const u8 gUnknown_085DF9EC[] =
|
||||
@@ -1093,12 +1095,13 @@ static const u8 gUnknown_085DF9EC[] =
|
||||
0x01, 0x02, 0x03, 0x04, 0x05, 0x08, 0x09, 0x0a, 0x0b, 0x0c
|
||||
};
|
||||
|
||||
static const u8 gUnknown_085DF9F6[] =
|
||||
// Unclear why this was duplicated
|
||||
static const u8 sBattleTowerPartySizes2[] =
|
||||
{
|
||||
[FRONTIER_MODE_SINGLES] = 3,
|
||||
[FRONTIER_MODE_DOUBLES] = 4,
|
||||
[FRONTIER_MODE_MULTIS] = 2,
|
||||
[FRONTIER_MODE_LINK_MULTIS] = 2,
|
||||
[FRONTIER_MODE_SINGLES] = FRONTIER_PARTY_SIZE,
|
||||
[FRONTIER_MODE_DOUBLES] = FRONTIER_DOUBLES_PARTY_SIZE,
|
||||
[FRONTIER_MODE_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
|
||||
[FRONTIER_MODE_LINK_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
|
||||
};
|
||||
|
||||
static const u16 gUnknown_085DF9FA[][2] =
|
||||
@@ -1127,22 +1130,22 @@ static const u16 gUnknown_085DFA1A[][2] =
|
||||
{0x00c8, 0x00b7},
|
||||
};
|
||||
|
||||
static const u8 gUnknown_085DFA42[4] =
|
||||
static const u8 sBattleTowerPartySizes[FRONTIER_MODE_COUNT] =
|
||||
{
|
||||
[FRONTIER_MODE_SINGLES] = 3,
|
||||
[FRONTIER_MODE_DOUBLES] = 4,
|
||||
[FRONTIER_MODE_MULTIS] = 2,
|
||||
[FRONTIER_MODE_LINK_MULTIS] = 2,
|
||||
[FRONTIER_MODE_SINGLES] = FRONTIER_PARTY_SIZE,
|
||||
[FRONTIER_MODE_DOUBLES] = FRONTIER_DOUBLES_PARTY_SIZE,
|
||||
[FRONTIER_MODE_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
|
||||
[FRONTIER_MODE_LINK_MULTIS] = FRONTIER_MULTI_PARTY_SIZE,
|
||||
};
|
||||
|
||||
static const u16 gUnknown_085DFA46[] =
|
||||
static const u16 sRecordTrainerSpeechWon[] =
|
||||
{
|
||||
0x0c3a, 0x0c3a, 0x0c01, 0x0a2a, 0x0607, 0x0c01
|
||||
EC_WORD_YAY, EC_WORD_YAY, EC_WORD_EXCL_EXCL, EC_WORD_I_VE, EC_WORD_WON, EC_WORD_EXCL_EXCL
|
||||
};
|
||||
|
||||
static const u16 gUnknown_085DFA52[] =
|
||||
static const u16 sRecordTrainerSpeechLost[] =
|
||||
{
|
||||
0x1039, 0x122e, 0x0c04, 0x0a3d, 0x0630, 0x0c04
|
||||
EC_WORD_TOO, EC_WORD_BAD, EC_WORD_ELLIPSIS, EC_WORD_WE, EC_WORD_LOST, EC_WORD_ELLIPSIS
|
||||
};
|
||||
|
||||
// code
|
||||
@@ -1156,12 +1159,12 @@ static void sub_8161F94(void)
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 1;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_SAVING;
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = 0;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 0;
|
||||
gSaveBlock2Ptr->frontier.challengePaused = FALSE;
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 0;
|
||||
sub_81A3ACC();
|
||||
if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]))
|
||||
ResetFrontierTrainerIds();
|
||||
if (!(gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]))
|
||||
gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] = 0;
|
||||
|
||||
ValidateBattleTowerRecordChecksums();
|
||||
@@ -1182,10 +1185,10 @@ static void sub_8162054(void)
|
||||
gSpecialVar_Result = GetCurrentBattleTowerWinStreak(lvlMode, battleMode);
|
||||
break;
|
||||
case 2:
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]) != 0);
|
||||
gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.winStreakActiveFlags & sWinStreakFlags[battleMode][lvlMode]) != 0);
|
||||
break;
|
||||
case 3:
|
||||
gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
gSaveBlock2Ptr->frontier.towerLvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1204,12 +1207,12 @@ static void sub_81620F4(void)
|
||||
break;
|
||||
case 2:
|
||||
if (gSpecialVar_0x8006)
|
||||
gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_085DF9AC[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags |= sWinStreakFlags[battleMode][lvlMode];
|
||||
else
|
||||
gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_085DF9CC[battleMode][lvlMode];
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags &= sWinStreakMasks[battleMode][lvlMode];
|
||||
break;
|
||||
case 3:
|
||||
gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
gSaveBlock2Ptr->frontier.towerLvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1219,8 +1222,9 @@ static void sub_81621C0(void)
|
||||
if (gTrainerBattleOpponent_A == TRAINER_EREADER)
|
||||
ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer);
|
||||
|
||||
if (gSaveBlock2Ptr->frontier.field_D04 < 9999)
|
||||
gSaveBlock2Ptr->frontier.field_D04++;
|
||||
// below field is never read outside this conditional
|
||||
if (gSaveBlock2Ptr->frontier.towerNumWins < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.towerNumWins++;
|
||||
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum++;
|
||||
SaveCurrentWinStreak();
|
||||
@@ -1258,7 +1262,7 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
|
||||
validMons++;
|
||||
}
|
||||
|
||||
if (validMons >= gUnknown_085DF9F6[battleMode]
|
||||
if (validMons >= sBattleTowerPartySizes2[battleMode]
|
||||
&& gSaveBlock2Ptr->frontier.towerRecords[i].winStreak == winStreak
|
||||
&& gSaveBlock2Ptr->frontier.towerRecords[i].lvlMode == lvlMode
|
||||
&& recordHasData
|
||||
@@ -2244,21 +2248,21 @@ void DoSpecialTrainerBattle(void)
|
||||
switch (VarGet(VAR_FRONTIER_BATTLE_MODE))
|
||||
{
|
||||
case FRONTIER_MODE_SINGLES:
|
||||
FillFrontierTrainerParty(3);
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
break;
|
||||
case FRONTIER_MODE_DOUBLES:
|
||||
FillFrontierTrainerParty(4);
|
||||
FillFrontierTrainerParty(FRONTIER_DOUBLES_PARTY_SIZE);
|
||||
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
|
||||
break;
|
||||
case FRONTIER_MODE_MULTIS:
|
||||
FillFrontierTrainersParties(2);
|
||||
FillFrontierTrainersParties(FRONTIER_MULTI_PARTY_SIZE);
|
||||
gPartnerTrainerId = gSaveBlock2Ptr->frontier.trainerIds[17];
|
||||
FillPartnerParty(gPartnerTrainerId);
|
||||
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_MULTI | BATTLE_TYPE_TWO_OPPONENTS;
|
||||
break;
|
||||
case FRONTIER_MODE_LINK_MULTIS:
|
||||
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_MULTI | BATTLE_TYPE_x800000;
|
||||
FillFrontierTrainersParties(2);
|
||||
FillFrontierTrainersParties(FRONTIER_MULTI_PARTY_SIZE);
|
||||
break;
|
||||
}
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
@@ -2300,9 +2304,9 @@ void DoSpecialTrainerBattle(void)
|
||||
if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES)
|
||||
gBattleTypeFlags |= BATTLE_TYPE_DOUBLE;
|
||||
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT)
|
||||
FillFrontierTrainerParty(3);
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
else
|
||||
FillTentTrainerParty(3);
|
||||
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(4));
|
||||
@@ -2310,9 +2314,9 @@ void DoSpecialTrainerBattle(void)
|
||||
case SPECIAL_BATTLE_ARENA:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_ARENA;
|
||||
if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_TENT)
|
||||
FillFrontierTrainerParty(3);
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
else
|
||||
FillTentTrainerParty(3);
|
||||
FillTentTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(5));
|
||||
@@ -2328,14 +2332,14 @@ void DoSpecialTrainerBattle(void)
|
||||
break;
|
||||
case SPECIAL_BATTLE_PIKE_SINGLE:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_BATTLE_TOWER;
|
||||
FillFrontierTrainerParty(3);
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(7));
|
||||
break;
|
||||
case SPECIAL_BATTLE_PYRAMID:
|
||||
gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_PYRAMID;
|
||||
FillFrontierTrainerParty(3);
|
||||
FillFrontierTrainerParty(FRONTIER_PARTY_SIZE);
|
||||
CreateTask(Task_StartBattleAfterTransition, 1);
|
||||
PlayMapChosenOrBattleBGM(0);
|
||||
BattleTransition_StartOnField(sub_80B100C(10));
|
||||
@@ -2408,7 +2412,7 @@ static void sub_8163EE4(void)
|
||||
playerRecord->speechLost[i] = gSaveBlock1Ptr->easyChatBattleLost[i];
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0)
|
||||
sub_80686FC(&gPlayerParty[gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1], &playerRecord->party[i]);
|
||||
@@ -2428,10 +2432,10 @@ static void SaveBattleTowerProgress(void)
|
||||
if (gSpecialVar_0x8005 == 0 && (challengeNum > 1 || gSaveBlock2Ptr->frontier.curChallengeBattleNum != 0))
|
||||
sub_8163EE4();
|
||||
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome =gSpecialVar_0x8005;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8005;
|
||||
VarSet(VAR_TEMP_0, 0);
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = 1;
|
||||
sub_81A4C30();
|
||||
gSaveBlock2Ptr->frontier.challengePaused = TRUE;
|
||||
SaveGameFrontier();
|
||||
}
|
||||
|
||||
static void nullsub_61(void)
|
||||
@@ -2895,13 +2899,13 @@ static void sub_8164E04(void)
|
||||
|
||||
GetFrontierTrainerName(text, gTrainerBattleOpponent_A);
|
||||
StripExtCtrlCodes(text);
|
||||
StringCopy(gSaveBlock2Ptr->frontier.field_BD8, text);
|
||||
GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.field_BEB, gTrainerBattleOpponent_A);
|
||||
gSaveBlock2Ptr->frontier.field_BD6 = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL);
|
||||
gSaveBlock2Ptr->frontier.field_BD4 = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL);
|
||||
StringCopy(gSaveBlock2Ptr->frontier.towerInterview.opponentName, text);
|
||||
GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage, gTrainerBattleOpponent_A);
|
||||
gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL);
|
||||
gSaveBlock2Ptr->frontier.towerInterview.playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL);
|
||||
for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
|
||||
gSaveBlock2Ptr->frontier.field_BE0[i] = gBattleMons[0].nickname[i];
|
||||
gSaveBlock2Ptr->frontier.field_D06 = gBattleOutcome;
|
||||
gSaveBlock2Ptr->frontier.towerInterview.opponentMonNickname[i] = gBattleMons[0].nickname[i];
|
||||
gSaveBlock2Ptr->frontier.towerBattleOutcome = gBattleOutcome;
|
||||
}
|
||||
|
||||
static void ValidateBattleTowerRecordChecksums(void)
|
||||
@@ -2968,13 +2972,13 @@ u16 GetCurrentBattleTowerWinStreak(u8 lvlMode, u8 battleMode)
|
||||
|
||||
static u8 GetMonCountForBattleMode(u8 battleMode)
|
||||
{
|
||||
u8 sp[ARRAY_COUNT(gUnknown_085DFA42)];
|
||||
memcpy(sp, gUnknown_085DFA42, sizeof(gUnknown_085DFA42));
|
||||
u8 partySizes[ARRAY_COUNT(sBattleTowerPartySizes)];
|
||||
memcpy(partySizes, sBattleTowerPartySizes, sizeof(sBattleTowerPartySizes));
|
||||
|
||||
if (battleMode < ARRAY_COUNT(gUnknown_085DFA42))
|
||||
return sp[battleMode];
|
||||
if (battleMode < ARRAY_COUNT(sBattleTowerPartySizes))
|
||||
return partySizes[battleMode];
|
||||
else
|
||||
return 3;
|
||||
return FRONTIER_PARTY_SIZE;
|
||||
}
|
||||
|
||||
struct RibbonCounter
|
||||
@@ -3158,7 +3162,7 @@ static void CopyEReaderTrainerFarewellMessage(void)
|
||||
|
||||
void sub_81653CC(void)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.challengeOutcome == 1)
|
||||
if (gSaveBlock2Ptr->frontier.challengeStatus == CHALLENGE_STATUS_SAVING)
|
||||
sub_80F01B8();
|
||||
if (FlagGet(FLAG_CANCEL_BATTLE_ROOM_CHALLENGE) == TRUE)
|
||||
{
|
||||
@@ -3282,13 +3286,13 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
|
||||
{
|
||||
s32 i, validMons = 0;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
if (src->party[i].species)
|
||||
validMons++;
|
||||
}
|
||||
|
||||
if (validMons != 3)
|
||||
if (validMons != FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
memset(dst, 0, sizeof(*dst));
|
||||
return FALSE;
|
||||
@@ -3298,6 +3302,7 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
|
||||
dst->lvlMode = src->lvlMode;
|
||||
dst->winStreak = src->winStreak;
|
||||
// BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
|
||||
// Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald)
|
||||
for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
|
||||
{
|
||||
if (sRubyFacilityClassToEmerald[i][0] == src->facilityClass)
|
||||
@@ -3312,16 +3317,16 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
|
||||
dst->name[i] = src->name[i];
|
||||
for (i = 0; i < TRAINER_ID_LENGTH; i++)
|
||||
dst->trainerId[i] = src->trainerId[i];
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
dst->greeting[i] = src->greeting[i];
|
||||
for (i = 0; i < 6; i++)
|
||||
dst->speechWon[i] = gUnknown_085DFA46[i];
|
||||
for (i = 0; i < 6; i++)
|
||||
dst->speechLost[i] = gUnknown_085DFA52[i];
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
dst->speechWon[i] = sRecordTrainerSpeechWon[i];
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
dst->speechLost[i] = sRecordTrainerSpeechLost[i];
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
dst->party[i] = src->party[i];
|
||||
|
||||
CpuFill32(0, &dst->party[3], sizeof(dst->party[3]));
|
||||
CpuFill32(0, &dst->party[FRONTIER_PARTY_SIZE], sizeof(dst->party[FRONTIER_PARTY_SIZE]));
|
||||
CalcEmeraldBattleTowerChecksum(dst);
|
||||
return TRUE;
|
||||
}
|
||||
@@ -3331,13 +3336,13 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
|
||||
{
|
||||
s32 i, validMons = 0;
|
||||
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
if (src->party[i].species)
|
||||
validMons++;
|
||||
}
|
||||
|
||||
if (validMons != 3)
|
||||
if (validMons != FRONTIER_PARTY_SIZE)
|
||||
{
|
||||
memset(dst, 0, sizeof(*dst));
|
||||
return FALSE;
|
||||
@@ -3347,6 +3352,7 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
|
||||
dst->lvlMode = src->lvlMode;
|
||||
dst->winStreak = src->winStreak;
|
||||
// BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
|
||||
// Fix by using ARRAY_COUNT(sRubyFacilityClassToEmerald) instead
|
||||
for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
|
||||
{
|
||||
if (sRubyFacilityClassToEmerald[i][1] == src->facilityClass)
|
||||
@@ -3355,15 +3361,15 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
|
||||
if (i != FACILITY_CLASSES_COUNT)
|
||||
dst->facilityClass = sRubyFacilityClassToEmerald[i][0];
|
||||
else
|
||||
dst->facilityClass = 0x24; // FACILITY_CLASS_YOUNGSTER in Ruby/Sapphire.
|
||||
dst->facilityClass = RS_FACILITY_CLASS_YOUNGSTER;
|
||||
|
||||
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
|
||||
dst->name[i] = src->name[i];
|
||||
for (i = 0; i < TRAINER_ID_LENGTH; i++)
|
||||
dst->trainerId[i] = src->trainerId[i];
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
dst->greeting[i] = src->greeting[i];
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
dst->party[i] = src->party[i];
|
||||
|
||||
CalcRubyBattleTowerChecksum(dst);
|
||||
|
||||
@@ -361,7 +361,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
|
||||
.monSets = gBattleFrontierTrainerMons_Payton
|
||||
},
|
||||
[45] = {
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.trainerName = _("PAMELA"),
|
||||
.speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_ADORE, EC_WORD_A, EC_WORD_KIND, EC_WORD_TRAINER},
|
||||
.speechWin = {EC_WORD_IT_S, EC_WORD_TOO, EC_WORD_BAD, EC_WORD_YOU, EC_WORD_LOST, 0xFFFF},
|
||||
@@ -369,7 +369,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
|
||||
.monSets = gBattleFrontierTrainerMons_Pamela
|
||||
},
|
||||
[46] = {
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.trainerName = _("ELIZA"),
|
||||
.speechBefore = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_POKEMON, EC_WORD_LIKE, EC_WORD_MY, EC_WORD_CHILDREN},
|
||||
.speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POKEMON},
|
||||
@@ -377,7 +377,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
|
||||
.monSets = gBattleFrontierTrainerMons_Eliza
|
||||
},
|
||||
[47] = {
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.trainerName = _("MARISA"),
|
||||
.speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, 0xFFFF},
|
||||
.speechWin = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_YOU, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BETTER},
|
||||
@@ -1273,7 +1273,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
|
||||
.monSets = gBattleFrontierTrainerMons_Cordell
|
||||
},
|
||||
[159] = {
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.trainerName = _("JAZLYN"),
|
||||
.speechBefore = {EC_WORD_IS, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_REALLY, EC_WORD_AWESOME, EC_WORD_QUES},
|
||||
.speechWin = {EC_WORD_OH_YEAH, EC_WORD_WOW, EC_WORD_YOUR, EC_WORD_POKEDEX, EC_WORD_IS, EC_WORD_SUPER},
|
||||
@@ -1745,7 +1745,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
|
||||
.monSets = gBattleFrontierTrainerMons_Wilson
|
||||
},
|
||||
[218] = {
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.trainerName = _("CLARE"),
|
||||
.speechBefore = {EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_A, EC_WORD_TOUGH, EC_WORD_TRAINER, EC_WORD_EXCL},
|
||||
.speechWin = {EC_WORD_AWW, EC_WORD_EXCL, EC_WORD_A, EC_WORD_WIMPY, EC_WORD_TRAINER, EC_WORD_EXCL},
|
||||
@@ -1753,7 +1753,7 @@ const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
|
||||
.monSets = gBattleFrontierTrainerMons_Clare
|
||||
},
|
||||
[219] = {
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.trainerName = _("TESS"),
|
||||
.speechBefore = {EC_WORD_WANT, EC_WORD_SOME, EC_POKEMON(GULPIN), EC_WORD_DESIGN, EC_WORD_SWEETS, EC_WORD_QUES},
|
||||
.speechWin = {EC_WORD_THEY_RE, EC_WORD_A, EC_WORD_SECRET, EC_WORD_POKEMON, EC_WORD_GOURMET, EC_WORD_ITEM},
|
||||
|
||||
@@ -847,7 +847,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
|
||||
[1] =
|
||||
{
|
||||
.name = _("JAYDEN"),
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.unused = 0,
|
||||
.speechBefore = {EC_WORD_SOME, EC_WORD_THINGS, EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_DO, EC_WORD_ALONE},
|
||||
.speechWin = {EC_WORD_YOU, EC_WORD_WIN, EC_WORD_AS, EC_WORD_A, EC_WORD_GROUP, 0xFFFF},
|
||||
@@ -1152,7 +1152,7 @@ static const struct TrHillFloor sDataTagNormal_Floors[] =
|
||||
[1] =
|
||||
{
|
||||
.name = _("VERONICA"),
|
||||
.facilityClass = FACILITY_CLASS_POKEMON_BREEDER_F,
|
||||
.facilityClass = FACILITY_CLASS_PKMN_BREEDER_F,
|
||||
.unused = 0,
|
||||
.speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_STRONG, EC_WORD_BEAUTY, EC_WORD_AROUND, EC_WORD_HERE},
|
||||
.speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_EXCL, 0xFFFF},
|
||||
|
||||
@@ -2,7 +2,7 @@ const u8 gFacilityClassToPicIndex[] =
|
||||
{
|
||||
[FACILITY_CLASS_HIKER] = TRAINER_PIC_HIKER,
|
||||
[FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_PIC_AQUA_GRUNT_M,
|
||||
[FACILITY_CLASS_POKEMON_BREEDER_F] = TRAINER_PIC_POKEMON_BREEDER_F,
|
||||
[FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_PIC_POKEMON_BREEDER_F,
|
||||
[FACILITY_CLASS_COOLTRAINER_M] = TRAINER_PIC_COOLTRAINER_M,
|
||||
[FACILITY_CLASS_BIRD_KEEPER] = TRAINER_PIC_BIRD_KEEPER,
|
||||
[FACILITY_CLASS_COLLECTOR] = TRAINER_PIC_COLLECTOR,
|
||||
@@ -88,7 +88,7 @@ const u8 gFacilityClassToTrainerClass[] =
|
||||
{
|
||||
[FACILITY_CLASS_HIKER] = TRAINER_CLASS_HIKER,
|
||||
[FACILITY_CLASS_AQUA_GRUNT_M] = TRAINER_CLASS_TEAM_AQUA,
|
||||
[FACILITY_CLASS_POKEMON_BREEDER_F] = TRAINER_CLASS_PKMN_BREEDER,
|
||||
[FACILITY_CLASS_PKMN_BREEDER_F] = TRAINER_CLASS_PKMN_BREEDER,
|
||||
[FACILITY_CLASS_COOLTRAINER_M] = TRAINER_CLASS_COOLTRAINER,
|
||||
[FACILITY_CLASS_BIRD_KEEPER] = TRAINER_CLASS_BIRD_KEEPER,
|
||||
[FACILITY_CLASS_COLLECTOR] = TRAINER_CLASS_COLLECTOR,
|
||||
|
||||
@@ -45,30 +45,30 @@ struct FrontierBrainMon
|
||||
u8 fixedIV;
|
||||
u8 nature;
|
||||
u8 evs[NUM_STATS];
|
||||
u16 moves[4];
|
||||
u16 moves[MAX_MON_MOVES];
|
||||
};
|
||||
|
||||
// This file's functions.
|
||||
static void GetChallengeStatus(void);
|
||||
static void GetFrontierData(void);
|
||||
static void SetFrontierData(void);
|
||||
static void LoadSelectedParty(void);
|
||||
static void SetSelectedPartyOrder(void);
|
||||
static void DoSoftReset_(void);
|
||||
static void SetFrontierTrainers(void);
|
||||
static void sub_81A1B38(void);
|
||||
static void SaveSelectedParty(void);
|
||||
static void ShowFacilityResultsWindow(void);
|
||||
static void sub_81A31FC(void);
|
||||
static void CheckPutFrontierTVShowOnAir(void);
|
||||
static void Script_GetFrontierBrainStatus(void);
|
||||
static void IsTrainerFrontierBrain(void);
|
||||
static void sub_81A3B64(void);
|
||||
static void GiveBattlePoints(void);
|
||||
static void GetFacilitySymbolCount(void);
|
||||
static void GiveFacilitySymbol(void);
|
||||
static void CheckBattleTypeFlag(void);
|
||||
static void sub_81A3FD4(void);
|
||||
static void CheckPartyIneligibility(void);
|
||||
static void ValidateVisitingTrainer(void);
|
||||
static void sub_81A4230(void);
|
||||
static void sub_81A43A8(void);
|
||||
static void sub_81A4410(void);
|
||||
static void IncrementWinStreak(void);
|
||||
static void RestoreHeldItems(void);
|
||||
static void SaveRecordBattle(void);
|
||||
static void BufferFrontierTrainerName(void);
|
||||
static void ResetSketchedMoves(void);
|
||||
static void SetFacilityBrainEventObject(void);
|
||||
@@ -591,7 +591,9 @@ static const u8 sBattlePointAwards[][NUM_FRONTIER_FACILITIES][FRONTIER_MODE_COUN
|
||||
},
|
||||
};
|
||||
|
||||
static const u16 sFacilitySymbolBitFlags[NUM_FRONTIER_FACILITIES][2] =
|
||||
// Flags to change the conversation when the Frontier Brain is encountered for a battle
|
||||
// First bit is has battled them before and not won yet, second bit is has battled them and won (obtained a Symbol)
|
||||
static const u16 sBattledBrainBitFlags[NUM_FRONTIER_FACILITIES][2] =
|
||||
{
|
||||
[FRONTIER_FACILITY_TOWER] = {0x0001, 0x0002},
|
||||
[FRONTIER_FACILITY_DOME] = {0x0004, 0x0008},
|
||||
@@ -607,29 +609,29 @@ static void (* const sFrontierUtilFuncs[])(void) =
|
||||
[FRONTIER_UTIL_FUNC_GET_STATUS] = GetChallengeStatus,
|
||||
[FRONTIER_UTIL_FUNC_GET_DATA] = GetFrontierData,
|
||||
[FRONTIER_UTIL_FUNC_SET_DATA] = SetFrontierData,
|
||||
[FRONTIER_UTIL_FUNC_LOAD_SELECTED_PARTY] = LoadSelectedParty,
|
||||
[FRONTIER_UTIL_FUNC_SET_PARTY_ORDER] = SetSelectedPartyOrder,
|
||||
[FRONTIER_UTIL_FUNC_SOFT_RESET] = DoSoftReset_,
|
||||
[FRONTIER_UTIL_FUNC_SET_FRONTIER_TRAINERS] = SetFrontierTrainers,
|
||||
[FRONTIER_UTIL_FUNC_6] = sub_81A1B38,
|
||||
[FRONTIER_UTIL_FUNC_SET_TRAINERS] = SetFrontierTrainers,
|
||||
[FRONTIER_UTIL_FUNC_SAVE_PARTY] = SaveSelectedParty,
|
||||
[FRONTIER_UTIL_FUNC_RESULTS_WINDOW] = ShowFacilityResultsWindow,
|
||||
[FRONTIER_UTIL_FUNC_8] = sub_81A31FC,
|
||||
[FRONTIER_UTIL_FUNC_CHECK_AIR_TV_SHOW] = CheckPutFrontierTVShowOnAir,
|
||||
[FRONTIER_UTIL_FUNC_GET_BRAIN_STATUS] = Script_GetFrontierBrainStatus,
|
||||
[FRONTIER_UTIL_FUNC_IS_FRONTIER_BRAIN] = IsTrainerFrontierBrain,
|
||||
[FRONTIER_UTIL_FUNC_11] = sub_81A3B64,
|
||||
[FRONTIER_UTIL_FUNC_IS_BRAIN] = IsTrainerFrontierBrain,
|
||||
[FRONTIER_UTIL_FUNC_GIVE_BATTLE_POINTS] = GiveBattlePoints,
|
||||
[FRONTIER_UTIL_FUNC_GET_FACILITY_SYMBOLS] = GetFacilitySymbolCount,
|
||||
[FRONTIER_UTIL_FUNC_GIVE_FACILITY_SYMBOL] = GiveFacilitySymbol,
|
||||
[FRONTIER_UTIL_FUNC_CHECK_BATTLE_TYPE] = CheckBattleTypeFlag,
|
||||
[FRONTIER_UTIL_FUNC_15] = sub_81A3FD4,
|
||||
[FRONTIER_UTIL_FUNC_CHECK_INELIGIBLE] = CheckPartyIneligibility,
|
||||
[FRONTIER_UTIL_FUNC_CHECK_VISIT_TRAINER] = ValidateVisitingTrainer,
|
||||
[FRONTIER_UTIL_FUNC_17] = sub_81A4230,
|
||||
[FRONTIER_UTIL_FUNC_18] = sub_81A43A8,
|
||||
[FRONTIER_UTIL_FUNC_19] = sub_81A4410,
|
||||
[FRONTIER_UTIL_FUNC_INCREMENT_STREAK] = IncrementWinStreak,
|
||||
[FRONTIER_UTIL_FUNC_RESTORE_HELD_ITEMS] = RestoreHeldItems,
|
||||
[FRONTIER_UTIL_FUNC_SAVE_BATTLE] = SaveRecordBattle,
|
||||
[FRONTIER_UTIL_FUNC_BUFFER_TRAINER_NAME] = BufferFrontierTrainerName,
|
||||
[FRONTIER_UTIL_FUNC_RESET_SKETCH_MOVES] = ResetSketchedMoves,
|
||||
[FRONTIER_UTIL_FUNC_SET_BRAIN_OBJECT] = SetFacilityBrainEventObject,
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gUnknown_08611C74 =
|
||||
static const struct WindowTemplate sFrontierResultsWindowTemplate =
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 1,
|
||||
@@ -640,7 +642,7 @@ static const struct WindowTemplate gUnknown_08611C74 =
|
||||
.baseBlock = 1
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gUnknown_08611C7C =
|
||||
static const struct WindowTemplate sLinkContestResultsWindowTemplate =
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 2,
|
||||
@@ -651,7 +653,7 @@ static const struct WindowTemplate gUnknown_08611C7C =
|
||||
.baseBlock = 1
|
||||
};
|
||||
|
||||
static const struct WindowTemplate gUnknown_08611C84 =
|
||||
static const struct WindowTemplate sRankingHallRecordsWindowTemplate =
|
||||
{
|
||||
.bg = 0,
|
||||
.tilemapLeft = 2,
|
||||
@@ -787,29 +789,28 @@ void CallFrontierUtilFunc(void)
|
||||
sFrontierUtilFuncs[gSpecialVar_0x8004]();
|
||||
}
|
||||
|
||||
// Buffers into VAR_TEMP_0 specifically because this is used to react to the outcome in OnFrame map scripts
|
||||
// TODO: use constants, fix name, rename field, compare to get/set data 0
|
||||
// Buffers into VAR_TEMP_0 specifically because this is used to react to the status in OnFrame map scripts
|
||||
static void GetChallengeStatus(void)
|
||||
{
|
||||
VarSet(VAR_TEMP_0, 0xFF);
|
||||
switch (gSaveBlock2Ptr->frontier.challengeOutcome)
|
||||
switch (gSaveBlock2Ptr->frontier.challengeStatus)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
case CHALLENGE_STATUS_SAVING:
|
||||
FrontierGamblerSetWonOrLost(FALSE);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
case 4:
|
||||
case CHALLENGE_STATUS_LOST:
|
||||
FrontierGamblerSetWonOrLost(FALSE);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
case 3:
|
||||
case CHALLENGE_STATUS_WON:
|
||||
FrontierGamblerSetWonOrLost(TRUE);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome);
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
case 2:
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeOutcome);
|
||||
case CHALLENGE_STATUS_PAUSED:
|
||||
VarSet(VAR_TEMP_0, gSaveBlock2Ptr->frontier.challengeStatus);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -823,27 +824,27 @@ static void GetFrontierData(void)
|
||||
|
||||
switch (gSpecialVar_0x8005)
|
||||
{
|
||||
case 0:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengeOutcome;
|
||||
case FRONTIER_DATA_CHALLENGE_STATUS:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengeStatus;
|
||||
break;
|
||||
case 1:
|
||||
case FRONTIER_DATA_LVL_MODE:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
break;
|
||||
case 2:
|
||||
case FRONTIER_DATA_BATTLE_NUM:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.curChallengeBattleNum;
|
||||
break;
|
||||
case 3:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_a;
|
||||
case FRONTIER_DATA_PAUSED:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.challengePaused;
|
||||
break;
|
||||
case 5:
|
||||
case FRONTIER_DATA_BATTLE_OUTCOME:
|
||||
gSpecialVar_Result = gBattleOutcome;
|
||||
gBattleOutcome = 0;
|
||||
break;
|
||||
case 6:
|
||||
case FRONTIER_DATA_6:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_CA9_b;
|
||||
break;
|
||||
case 7:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.symbolFlags & sFacilitySymbolBitFlags[facility][hasSymbol];
|
||||
case FRONTIER_DATA_HEARD_BRAIN_SPEECH:
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.battledBrainFlags & sBattledBrainBitFlags[facility][hasSymbol];
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -858,32 +859,32 @@ static void SetFrontierData(void)
|
||||
|
||||
switch (gSpecialVar_0x8005)
|
||||
{
|
||||
case 0:
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = gSpecialVar_0x8006;
|
||||
case FRONTIER_DATA_CHALLENGE_STATUS:
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 1:
|
||||
case FRONTIER_DATA_LVL_MODE:
|
||||
gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 2:
|
||||
case FRONTIER_DATA_BATTLE_NUM:
|
||||
gSaveBlock2Ptr->frontier.curChallengeBattleNum = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 3:
|
||||
gSaveBlock2Ptr->frontier.field_CA9_a = gSpecialVar_0x8006;
|
||||
case FRONTIER_DATA_PAUSED:
|
||||
gSaveBlock2Ptr->frontier.challengePaused = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 4:
|
||||
for (i = 0; i < 4; i++)
|
||||
case FRONTIER_DATA_SELECTED_MON_ORDER:
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
gSaveBlock2Ptr->frontier.selectedPartyMons[i] = gSelectedOrderFromParty[i];
|
||||
break;
|
||||
case 6:
|
||||
case FRONTIER_DATA_6:
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = gSpecialVar_0x8006;
|
||||
break;
|
||||
case 7:
|
||||
gSaveBlock2Ptr->frontier.symbolFlags |= sFacilitySymbolBitFlags[facility][hasSymbol];
|
||||
case FRONTIER_DATA_HEARD_BRAIN_SPEECH:
|
||||
gSaveBlock2Ptr->frontier.battledBrainFlags |= sBattledBrainBitFlags[facility][hasSymbol];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void LoadSelectedParty(void)
|
||||
static void SetSelectedPartyOrder(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -903,11 +904,11 @@ static void SetFrontierTrainers(void)
|
||||
gFacilityTrainers = gBattleFrontierTrainers;
|
||||
}
|
||||
|
||||
static void sub_81A1B38(void)
|
||||
static void SaveSelectedParty(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
|
||||
if (monId < PARTY_SIZE)
|
||||
@@ -948,9 +949,9 @@ static void ShowFacilityResultsWindow(void)
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_81A1C24(u32 flags)
|
||||
static bool8 IsWinStreakActive(u32 challenge)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.field_CDC & flags)
|
||||
if (gSaveBlock2Ptr->frontier.winStreakActiveFlags & challenge)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
@@ -980,8 +981,8 @@ static void PrintHyphens(s32 y)
|
||||
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;
|
||||
if (num > MAX_STREAK)
|
||||
num = MAX_STREAK;
|
||||
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, gText_WinStreak);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
|
||||
@@ -996,8 +997,8 @@ static void TowerPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8 y
|
||||
static u16 TowerGetWinStreak(u8 battleMode, u8 lvlMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -1011,27 +1012,27 @@ static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x
|
||||
default:
|
||||
case FRONTIER_MODE_SINGLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(2);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_SINGLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(1);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_SINGLES_50);
|
||||
break;
|
||||
case FRONTIER_MODE_DOUBLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x8000);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_DOUBLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x4000);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_DOUBLES_50);
|
||||
break;
|
||||
case FRONTIER_MODE_MULTIS:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x20000);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_MULTIS_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x10000);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_MULTIS_50);
|
||||
break;
|
||||
case FRONTIER_MODE_LINK_MULTIS:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x80000);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_LINK_MULTIS_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x40000);
|
||||
isCurrent = IsWinStreakActive(STREAK_TOWER_LINK_MULTIS_50);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1043,7 +1044,7 @@ static void TowerPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x
|
||||
|
||||
static void ShowTowerResultsWindow(u8 battleMode)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C74);
|
||||
gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
@@ -1071,8 +1072,8 @@ static void ShowTowerResultsWindow(u8 battleMode)
|
||||
static u16 DomeGetWinStreak(u8 battleMode, u8 lvlMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -1094,15 +1095,15 @@ static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2
|
||||
default:
|
||||
case FRONTIER_MODE_SINGLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(8);
|
||||
isCurrent = IsWinStreakActive(STREAK_DOME_SINGLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(4);
|
||||
isCurrent = IsWinStreakActive(STREAK_DOME_SINGLES_50);
|
||||
break;
|
||||
case FRONTIER_MODE_DOUBLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x200000);
|
||||
isCurrent = IsWinStreakActive(STREAK_DOME_DOUBLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x100000);
|
||||
isCurrent = IsWinStreakActive(STREAK_DOME_DOUBLES_50);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1114,7 +1115,7 @@ static void DomePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2
|
||||
|
||||
static void ShowDomeResultsWindow(u8 battleMode)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C74);
|
||||
gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
@@ -1140,8 +1141,8 @@ static void ShowDomeResultsWindow(u8 battleMode)
|
||||
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;
|
||||
if (num > MAX_STREAK)
|
||||
num = MAX_STREAK;
|
||||
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, gText_WinStreak);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
|
||||
@@ -1156,8 +1157,8 @@ static void PalacePrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8
|
||||
static u16 PalaceGetWinStreak(u8 battleMode, u8 lvlMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -1171,15 +1172,15 @@ static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
|
||||
default:
|
||||
case FRONTIER_MODE_SINGLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x20);
|
||||
isCurrent = IsWinStreakActive(STREAK_PALACE_SINGLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x10);
|
||||
isCurrent = IsWinStreakActive(STREAK_PALACE_SINGLES_50);
|
||||
break;
|
||||
case FRONTIER_MODE_DOUBLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x800000);
|
||||
isCurrent = IsWinStreakActive(STREAK_PALACE_DOUBLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x400000);
|
||||
isCurrent = IsWinStreakActive(STREAK_PALACE_DOUBLES_50);
|
||||
}
|
||||
|
||||
if (isCurrent == TRUE)
|
||||
@@ -1190,7 +1191,7 @@ static void PalacePrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
|
||||
|
||||
static void ShowPalaceResultsWindow(u8 battleMode)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C74);
|
||||
gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
@@ -1214,8 +1215,8 @@ static void ShowPalaceResultsWindow(u8 battleMode)
|
||||
static u16 PikeGetWinStreak(u8 lvlMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -1234,9 +1235,9 @@ static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
u16 winStreak = PikeGetWinStreak(lvlMode);
|
||||
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x800);
|
||||
isCurrent = IsWinStreakActive(STREAK_PIKE_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x400);
|
||||
isCurrent = IsWinStreakActive(STREAK_PIKE_50);
|
||||
|
||||
if (isCurrent == TRUE)
|
||||
PrintTwoStrings(gText_Current, gText_RoomsCleared, winStreak, x1, x2, y);
|
||||
@@ -1246,7 +1247,7 @@ static void PikePrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
|
||||
static void ShowPikeResultsWindow(void)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C74);
|
||||
gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
StringExpandPlaceholders(gStringVar4, gText_BattleChoiceResults);
|
||||
@@ -1268,8 +1269,8 @@ static void ShowPikeResultsWindow(void)
|
||||
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;
|
||||
if (num > MAX_STREAK)
|
||||
num = MAX_STREAK;
|
||||
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, gText_KOsInARow);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
|
||||
@@ -1284,8 +1285,8 @@ static void ArenaPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
static u16 ArenaGetWinStreak(u8 lvlMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -1296,9 +1297,9 @@ static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
u16 winStreak = ArenaGetWinStreak(lvlMode);
|
||||
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x80);
|
||||
isCurrent = IsWinStreakActive(STREAK_ARENA_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x40);
|
||||
isCurrent = IsWinStreakActive(STREAK_ARENA_50);
|
||||
|
||||
if (isCurrent == TRUE)
|
||||
ArenaPrintStreak(gText_Current, winStreak, x1, x2, y);
|
||||
@@ -1308,7 +1309,7 @@ static void ArenaPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
|
||||
static void ShowArenaResultsWindow(void)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C74);
|
||||
gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
PrintHyphens(10);
|
||||
@@ -1328,8 +1329,8 @@ static void ShowArenaResultsWindow(void)
|
||||
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;
|
||||
if (num1 > MAX_STREAK)
|
||||
num1 = MAX_STREAK;
|
||||
ConvertIntToDecimalStringN(gStringVar1, num1, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, gText_WinStreak);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
|
||||
@@ -1349,8 +1350,8 @@ static void FactoryPrintRecordStreak(u8 battleMode, u8 lvlMode, u8 x1, u8 x2, u8
|
||||
static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode];
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -1358,8 +1359,8 @@ static u16 FactoryGetWinStreak(u8 battleMode, u8 lvlMode)
|
||||
static u16 FactoryGetRentsCount(u8 battleMode, u8 lvlMode)
|
||||
{
|
||||
u16 rents = gSaveBlock2Ptr->frontier.factoryRentsCount[battleMode][lvlMode];
|
||||
if (rents > 9999)
|
||||
return 9999;
|
||||
if (rents > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return rents;
|
||||
}
|
||||
@@ -1374,15 +1375,15 @@ static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
|
||||
default:
|
||||
case FRONTIER_MODE_SINGLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x200);
|
||||
isCurrent = IsWinStreakActive(STREAK_FACTORY_SINGLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x100);
|
||||
isCurrent = IsWinStreakActive(STREAK_FACTORY_SINGLES_50);
|
||||
break;
|
||||
case FRONTIER_MODE_DOUBLES:
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x2000000);
|
||||
isCurrent = IsWinStreakActive(STREAK_FACTORY_DOUBLES_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x1000000);
|
||||
isCurrent = IsWinStreakActive(STREAK_FACTORY_DOUBLES_50);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1394,7 +1395,7 @@ static void FactoryPrintPrevOrCurrentStreak(u8 battleMode, u8 lvlMode, u8 x1, u8
|
||||
|
||||
static void ShowFactoryResultsWindow(u8 battleMode)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C74);
|
||||
gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
@@ -1419,8 +1420,8 @@ static void ShowFactoryResultsWindow(u8 battleMode)
|
||||
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;
|
||||
if (num > MAX_STREAK)
|
||||
num = MAX_STREAK;
|
||||
ConvertIntToDecimalStringN(gStringVar1, num, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, gText_FloorsCleared);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, x2, y, TEXT_SPEED_FF, NULL);
|
||||
@@ -1435,8 +1436,8 @@ static void PyramidPrintRecordStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
static u16 PyramidGetWinStreak(u8 lvlMode)
|
||||
{
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
|
||||
if (winStreak > 9999)
|
||||
return 9999;
|
||||
if (winStreak > MAX_STREAK)
|
||||
return MAX_STREAK;
|
||||
else
|
||||
return winStreak;
|
||||
}
|
||||
@@ -1447,9 +1448,9 @@ static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
u16 winStreak = PyramidGetWinStreak(lvlMode);
|
||||
|
||||
if (lvlMode != FRONTIER_LVL_50)
|
||||
isCurrent = sub_81A1C24(0x2000);
|
||||
isCurrent = IsWinStreakActive(STREAK_PYRAMID_OPEN);
|
||||
else
|
||||
isCurrent = sub_81A1C24(0x1000);
|
||||
isCurrent = IsWinStreakActive(STREAK_PYRAMID_50);
|
||||
|
||||
if (isCurrent == TRUE)
|
||||
PyramidPrintStreak(gText_Current, winStreak, x1, x2, y);
|
||||
@@ -1459,7 +1460,7 @@ static void PyramidPrintPrevOrCurrentStreak(u8 lvlMode, u8 x1, u8 x2, u8 y)
|
||||
|
||||
static void ShowPyramidResultsWindow(void)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C74);
|
||||
gRecordsWindowId = AddWindow(&sFrontierResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
StringExpandPlaceholders(gStringVar4, gText_BattleQuestResults);
|
||||
@@ -1482,7 +1483,7 @@ static void ShowLinkContestResultsWindow(void)
|
||||
s32 i, j;
|
||||
s32 x;
|
||||
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C7C);
|
||||
gRecordsWindowId = AddWindow(&sLinkContestResultsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
|
||||
@@ -1526,7 +1527,7 @@ static void ShowLinkContestResultsWindow(void)
|
||||
CopyWindowToVram(gRecordsWindowId, 3);
|
||||
}
|
||||
|
||||
static void sub_81A31FC(void)
|
||||
static void CheckPutFrontierTVShowOnAir(void)
|
||||
{
|
||||
u8 name[32];
|
||||
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
@@ -1543,25 +1544,25 @@ static void sub_81A31FC(void)
|
||||
{
|
||||
StringCopy(name, gLinkPlayers[gBattleScripting.multiplayerId ^ 1].name);
|
||||
StripExtCtrlCodes(name);
|
||||
StringCopy(gSaveBlock2Ptr->frontier.opponentName[lvlMode], name);
|
||||
SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.field_EF1[lvlMode]);
|
||||
StringCopy(gSaveBlock2Ptr->frontier.opponentNames[lvlMode], name);
|
||||
SetTrainerId(gLinkPlayers[gBattleScripting.multiplayerId ^ 1].trainerId, gSaveBlock2Ptr->frontier.opponentTrainerIds[lvlMode]);
|
||||
}
|
||||
if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] > 1
|
||||
&& sub_80EE818())
|
||||
&& ShouldAirFrontierTVShow())
|
||||
{
|
||||
switch (battleMode)
|
||||
{
|
||||
case FRONTIER_MODE_SINGLES:
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 1);
|
||||
break;
|
||||
case FRONTIER_MODE_DOUBLES:
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 2);
|
||||
break;
|
||||
case FRONTIER_MODE_MULTIS:
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 3);
|
||||
break;
|
||||
case FRONTIER_MODE_LINK_MULTIS:
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode], 4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1572,12 +1573,12 @@ static void sub_81A31FC(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.domeRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode];
|
||||
if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] > 1
|
||||
&& sub_80EE818())
|
||||
&& ShouldAirFrontierTVShow())
|
||||
{
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 5);
|
||||
else
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode], 6);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1586,12 +1587,12 @@ static void sub_81A31FC(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.palaceRecordWinStreaks[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode];
|
||||
if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] > 1
|
||||
&& sub_80EE818())
|
||||
&& ShouldAirFrontierTVShow())
|
||||
{
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 11);
|
||||
else
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode], 12);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1600,9 +1601,9 @@ static void sub_81A31FC(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.arenaRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode];
|
||||
if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] > 1
|
||||
&& sub_80EE818())
|
||||
&& ShouldAirFrontierTVShow())
|
||||
{
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode], 10);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1612,12 +1613,12 @@ static void sub_81A31FC(void)
|
||||
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())
|
||||
&& ShouldAirFrontierTVShow())
|
||||
{
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 7);
|
||||
else
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode], 8);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1626,9 +1627,9 @@ static void sub_81A31FC(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.pikeRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
|
||||
if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] > 1
|
||||
&& sub_80EE818())
|
||||
&& ShouldAirFrontierTVShow())
|
||||
{
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode], 9);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1637,9 +1638,9 @@ static void sub_81A31FC(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.pyramidRecordStreaks[lvlMode] = gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode];
|
||||
if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] > 1
|
||||
&& sub_80EE818())
|
||||
&& ShouldAirFrontierTVShow())
|
||||
{
|
||||
sub_80EE8C8(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13);
|
||||
TryPutFrontierTVShowOnAir(gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode], 13);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1772,11 +1773,11 @@ void CopyFrontierTrainerText(u8 whichText, u16 trainerId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81A3908(void)
|
||||
void ResetWinStreaks(void)
|
||||
{
|
||||
s32 battleMode, lvlMode;
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_CDC = 0;
|
||||
gSaveBlock2Ptr->frontier.winStreakActiveFlags = 0;
|
||||
for (battleMode = 0; battleMode < 4; battleMode++)
|
||||
{
|
||||
for (lvlMode = 0; lvlMode < 2; lvlMode++)
|
||||
@@ -1796,8 +1797,8 @@ void sub_81A3908(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (gSaveBlock2Ptr->frontier.challengeOutcome != 0)
|
||||
gSaveBlock2Ptr->frontier.challengeOutcome = 1;
|
||||
if (gSaveBlock2Ptr->frontier.challengeStatus != 0)
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_SAVING;
|
||||
}
|
||||
|
||||
u32 GetCurrentFacilityWinStreak(void)
|
||||
@@ -1827,11 +1828,11 @@ u32 GetCurrentFacilityWinStreak(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81A3ACC(void)
|
||||
void ResetFrontierTrainerIds(void)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 20; i++)
|
||||
for (i = 0; i < (int)ARRAY_COUNT(gSaveBlock2Ptr->frontier.trainerIds); i++)
|
||||
gSaveBlock2Ptr->frontier.trainerIds[i] = 0xFFFF;
|
||||
}
|
||||
|
||||
@@ -1849,7 +1850,7 @@ u8 GetPlayerSymbolCountForFacility(u8 facility)
|
||||
+ FlagGet(FLAG_SYS_TOWER_GOLD + facility * 2);
|
||||
}
|
||||
|
||||
static void sub_81A3B64(void)
|
||||
static void GiveBattlePoints(void)
|
||||
{
|
||||
s32 challengeNum = 0;
|
||||
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
@@ -1895,7 +1896,7 @@ static void sub_81A3B64(void)
|
||||
if (gSaveBlock2Ptr->frontier.battlePoints > MAX_BATTLE_FRONTIER_POINTS)
|
||||
gSaveBlock2Ptr->frontier.battlePoints = MAX_BATTLE_FRONTIER_POINTS;
|
||||
|
||||
points = gSaveBlock2Ptr->frontier.field_EBA;
|
||||
points = gSaveBlock2Ptr->frontier.cardBattlePoints;
|
||||
points += sBattlePointAwards[challengeNum][facility][battleMode];
|
||||
IncrementDailyBattlePoints(sBattlePointAwards[challengeNum][facility][battleMode]);
|
||||
if (gTrainerBattleOpponent_A == TRAINER_FRONTIER_BRAIN)
|
||||
@@ -1905,7 +1906,7 @@ static void sub_81A3B64(void)
|
||||
}
|
||||
if (points > 0xFFFF)
|
||||
points = 0xFFFF;
|
||||
gSaveBlock2Ptr->frontier.field_EBA = points;
|
||||
gSaveBlock2Ptr->frontier.cardBattlePoints = points;
|
||||
}
|
||||
|
||||
static void GetFacilitySymbolCount(void)
|
||||
@@ -1931,7 +1932,7 @@ static void CheckBattleTypeFlag(void)
|
||||
gSpecialVar_Result = FALSE;
|
||||
}
|
||||
|
||||
static u8 AppendBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught)
|
||||
static u8 AppendCaughtBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught)
|
||||
{
|
||||
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
|
||||
{
|
||||
@@ -1961,7 +1962,7 @@ static u8 AppendBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCau
|
||||
StringAppend(gStringVar1, gText_SpaceAndSpace);
|
||||
else
|
||||
StringAppend(gStringVar1, gText_CommaSpace);
|
||||
StringAppend(gStringVar1, gText_ScrollTextUp);
|
||||
StringAppend(gStringVar1, gText_LineBreak);
|
||||
break;
|
||||
}
|
||||
StringAppend(gStringVar1, gSpeciesNames[species]);
|
||||
@@ -2003,7 +2004,10 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL
|
||||
(*count)++;
|
||||
}
|
||||
|
||||
static void sub_81A3FD4(void)
|
||||
// gSpecialVar_Result is the level mode before and after calls to this function
|
||||
// gSpecialVar_0x8004 is used to store the return value instead (TRUE if there are insufficient eligible mons)
|
||||
// The names of ineligible pokemon that have been caught are also buffered to print
|
||||
static void CheckPartyIneligibility(void)
|
||||
{
|
||||
u16 speciesArray[PARTY_SIZE];
|
||||
u16 itemArray[PARTY_SIZE];
|
||||
@@ -2013,20 +2017,23 @@ static void sub_81A3FD4(void)
|
||||
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
s32 monIdLooper;
|
||||
|
||||
// count is re-used, define for clarity
|
||||
#define numEligibleMons count
|
||||
|
||||
switch (battleMode)
|
||||
{
|
||||
case FRONTIER_MODE_SINGLES:
|
||||
toChoose = 3;
|
||||
toChoose = FRONTIER_PARTY_SIZE;
|
||||
break;
|
||||
case FRONTIER_MODE_MULTIS:
|
||||
case FRONTIER_MODE_LINK_MULTIS:
|
||||
toChoose = 2;
|
||||
toChoose = FRONTIER_MULTI_PARTY_SIZE;
|
||||
break;
|
||||
case FRONTIER_MODE_DOUBLES:
|
||||
if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_TOWER)
|
||||
toChoose = 4;
|
||||
toChoose = FRONTIER_DOUBLES_PARTY_SIZE;
|
||||
else
|
||||
toChoose = 3;
|
||||
toChoose = FRONTIER_PARTY_SIZE;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2034,7 +2041,7 @@ static void sub_81A3FD4(void)
|
||||
do
|
||||
{
|
||||
monId = monIdLooper;
|
||||
count = 0;
|
||||
numEligibleMons = 0;
|
||||
do
|
||||
{
|
||||
u16 species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2);
|
||||
@@ -2044,11 +2051,11 @@ static void sub_81A3FD4(void)
|
||||
if (VarGet(VAR_FRONTIER_FACILITY) == FRONTIER_FACILITY_PYRAMID)
|
||||
{
|
||||
if (heldItem == ITEM_NONE)
|
||||
AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count);
|
||||
AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &numEligibleMons);
|
||||
}
|
||||
else
|
||||
{
|
||||
AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &count);
|
||||
AppendIfValid(species, heldItem, hp, gSpecialVar_Result, level, speciesArray, itemArray, &numEligibleMons);
|
||||
}
|
||||
monId++;
|
||||
if (monId >= PARTY_SIZE)
|
||||
@@ -2056,9 +2063,9 @@ static void sub_81A3FD4(void)
|
||||
} while (monId != monIdLooper);
|
||||
|
||||
monIdLooper++;
|
||||
} while (monIdLooper < PARTY_SIZE && count < toChoose);
|
||||
} while (monIdLooper < PARTY_SIZE && numEligibleMons < toChoose);
|
||||
|
||||
if (count < toChoose)
|
||||
if (numEligibleMons < toChoose)
|
||||
{
|
||||
s32 i;
|
||||
s32 caughtBannedMons = 0;
|
||||
@@ -2069,10 +2076,10 @@ static void sub_81A3FD4(void)
|
||||
caughtBannedMons++;
|
||||
}
|
||||
gStringVar1[0] = EOS;
|
||||
gSpecialVar_0x8004 = 1;
|
||||
gSpecialVar_0x8004 = TRUE;
|
||||
count = 0;
|
||||
for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF; i++)
|
||||
count = AppendBannedMonSpeciesName(gFrontierBannedSpecies[i], count, caughtBannedMons);
|
||||
count = AppendCaughtBannedMonSpeciesName(gFrontierBannedSpecies[i], count, caughtBannedMons);
|
||||
|
||||
if (count == 0)
|
||||
{
|
||||
@@ -2082,7 +2089,7 @@ static void sub_81A3FD4(void)
|
||||
else
|
||||
{
|
||||
if (count & 1)
|
||||
StringAppend(gStringVar1, gText_ScrollTextUp);
|
||||
StringAppend(gStringVar1, gText_LineBreak);
|
||||
else
|
||||
StringAppend(gStringVar1, gText_Space2);
|
||||
StringAppend(gStringVar1, gText_Are2);
|
||||
@@ -2090,9 +2097,10 @@ static void sub_81A3FD4(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
gSpecialVar_0x8004 = 0;
|
||||
gSpecialVar_0x8004 = FALSE;
|
||||
gSaveBlock2Ptr->frontier.lvlMode = gSpecialVar_Result;
|
||||
}
|
||||
#undef numEligibleMons
|
||||
}
|
||||
|
||||
static void ValidateVisitingTrainer(void)
|
||||
@@ -2100,7 +2108,7 @@ static void ValidateVisitingTrainer(void)
|
||||
ValidateEReaderTrainer();
|
||||
}
|
||||
|
||||
static void sub_81A4230(void)
|
||||
static void IncrementWinStreak(void)
|
||||
{
|
||||
s32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
s32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
@@ -2109,50 +2117,50 @@ static void sub_81A4230(void)
|
||||
switch (facility)
|
||||
{
|
||||
case FRONTIER_FACILITY_TOWER:
|
||||
if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode] < MAX_STREAK)
|
||||
{
|
||||
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];
|
||||
gSaveBlock2Ptr->frontier.towerSinglesStreak = gSaveBlock2Ptr->frontier.towerWinStreaks[battleMode][lvlMode];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case FRONTIER_FACILITY_DOME:
|
||||
if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode] < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.domeWinStreaks[battleMode][lvlMode]++;
|
||||
if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode] < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.domeTotalChampionships[battleMode][lvlMode]++;
|
||||
break;
|
||||
case FRONTIER_FACILITY_PALACE:
|
||||
if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode] < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.palaceWinStreaks[battleMode][lvlMode]++;
|
||||
break;
|
||||
case FRONTIER_FACILITY_ARENA:
|
||||
if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode] < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.arenaWinStreaks[lvlMode]++;
|
||||
break;
|
||||
case FRONTIER_FACILITY_FACTORY:
|
||||
if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode] < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.factoryWinStreaks[battleMode][lvlMode]++;
|
||||
break;
|
||||
case FRONTIER_FACILITY_PIKE:
|
||||
if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode] < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode]++;
|
||||
break;
|
||||
case FRONTIER_FACILITY_PYRAMID:
|
||||
if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < 9999)
|
||||
if (gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode] < MAX_STREAK)
|
||||
gSaveBlock2Ptr->frontier.pyramidWinStreaks[lvlMode]++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81A43A8(void)
|
||||
static void RestoreHeldItems(void)
|
||||
{
|
||||
u8 i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.selectedPartyMons[i] != 0)
|
||||
{
|
||||
@@ -2162,7 +2170,7 @@ static void sub_81A43A8(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81A4410(void)
|
||||
static void SaveRecordBattle(void)
|
||||
{
|
||||
gSpecialVar_Result = MoveRecordedBattleToSaveData();
|
||||
gSaveBlock2Ptr->frontier.field_CA9_b = 1;
|
||||
@@ -2185,7 +2193,7 @@ static void ResetSketchedMoves(void)
|
||||
{
|
||||
u8 i, j, k;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < MAX_FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
u16 monId = gSaveBlock2Ptr->frontier.selectedPartyMons[i] - 1;
|
||||
if (monId < PARTY_SIZE)
|
||||
@@ -2224,8 +2232,8 @@ static void Print1PRecord(s32 position, s32 x, s32 y, struct RankingHall1P *hall
|
||||
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;
|
||||
if (winStreak > MAX_STREAK)
|
||||
winStreak = MAX_STREAK;
|
||||
ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[hallFacilityId]);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[hallFacilityId], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
|
||||
@@ -2251,8 +2259,8 @@ static void Print2PRecord(s32 position, s32 x, s32 y, struct RankingHall2P *hall
|
||||
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;
|
||||
if (winStreak > MAX_STREAK)
|
||||
winStreak = MAX_STREAK;
|
||||
ConvertIntToDecimalStringN(gStringVar2, winStreak, STR_CONV_MODE_RIGHT_ALIGN, 4);
|
||||
StringExpandPlaceholders(gStringVar4, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK]);
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, gStringVar4, GetStringRightAlignXOffset(1, sHallFacilityToRecordsText[RANKING_HALL_BATTLE_TOWER_LINK], 0xC8), (8 * (y + 5 * position)) + 1, TEXT_SPEED_FF, NULL);
|
||||
@@ -2341,8 +2349,8 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode)
|
||||
AddTextPrinterParameterized(gRecordsWindowId, 1, sLevelModeText[lvlMode], x, 1, TEXT_SPEED_FF, NULL);
|
||||
if (hallFacilityId == RANKING_HALL_BATTLE_TOWER_LINK)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.opponentName[0][PLAYER_NAME_LENGTH] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentName[1][PLAYER_NAME_LENGTH] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentNames[0][PLAYER_NAME_LENGTH] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentNames[1][PLAYER_NAME_LENGTH] = EOS;
|
||||
Fill2PRecords(records2P, lvlMode);
|
||||
for (i = 0; i < 3; i++)
|
||||
Print2PRecord(i, 1, 4, &records2P[i]);
|
||||
@@ -2357,7 +2365,7 @@ static void PrintHallRecords(s32 hallFacilityId, s32 lvlMode)
|
||||
|
||||
void ShowRankingHallRecordsWindow(void)
|
||||
{
|
||||
gRecordsWindowId = AddWindow(&gUnknown_08611C84);
|
||||
gRecordsWindowId = AddWindow(&sRankingHallRecordsWindowTemplate);
|
||||
DrawStdWindowFrame(gRecordsWindowId, FALSE);
|
||||
FillWindowPixelBuffer(gRecordsWindowId, PIXEL_FILL(1));
|
||||
PrintHallRecords(gSpecialVar_0x8005, FRONTIER_LVL_50);
|
||||
@@ -2402,7 +2410,7 @@ void ClearRankingHallRecords(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81A4C30(void)
|
||||
void SaveGameFrontier(void)
|
||||
{
|
||||
s32 i;
|
||||
struct Pokemon *monsParty = calloc(PARTY_SIZE, sizeof(struct Pokemon));
|
||||
|
||||
@@ -453,7 +453,7 @@ static void LinkTestProcessKeyInput(void)
|
||||
}
|
||||
if (gMain.newKeys & R_BUTTON)
|
||||
{
|
||||
TrySavingData(1);
|
||||
TrySavingData(SAVE_LINK);
|
||||
}
|
||||
if (gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
|
||||
@@ -921,7 +921,7 @@ static bool32 mevent_save_game(u8 * state)
|
||||
(*state)++;
|
||||
break;
|
||||
case 1:
|
||||
TrySavingData(0);
|
||||
TrySavingData(SAVE_NORMAL);
|
||||
(*state)++;
|
||||
break;
|
||||
case 2:
|
||||
|
||||
@@ -122,8 +122,8 @@ static void ClearFrontierRecord(void)
|
||||
{
|
||||
CpuFill32(0, &gSaveBlock2Ptr->frontier, sizeof(gSaveBlock2Ptr->frontier));
|
||||
|
||||
gSaveBlock2Ptr->frontier.opponentName[0][0] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentName[1][0] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentNames[0][0] = EOS;
|
||||
gSaveBlock2Ptr->frontier.opponentNames[1][0] = EOS;
|
||||
}
|
||||
|
||||
static void WarpToTruck(void)
|
||||
|
||||
@@ -1715,7 +1715,7 @@ void CB2_ContinueSavedGame(void)
|
||||
StopMapMusic();
|
||||
ResetSafariZoneFlag_();
|
||||
if (gSaveFileStatus == 0xFF)
|
||||
sub_81A3908();
|
||||
ResetWinStreaks();
|
||||
|
||||
LoadSaveblockMapHeader();
|
||||
ClearDiveAndHoleWarps();
|
||||
|
||||
@@ -1887,7 +1887,7 @@ const u16 gLinkPlayerFacilityClasses[] =
|
||||
FACILITY_CLASS_PKMN_BREEDER_M, FACILITY_CLASS_GUITARIST,
|
||||
FACILITY_CLASS_COOLTRAINER_F, FACILITY_CLASS_HEX_MANIAC, FACILITY_CLASS_PICNICKER,
|
||||
FACILITY_CLASS_LASS, FACILITY_CLASS_PSYCHIC_F, FACILITY_CLASS_BATTLE_GIRL,
|
||||
FACILITY_CLASS_POKEMON_BREEDER_F, FACILITY_CLASS_BEAUTY
|
||||
FACILITY_CLASS_PKMN_BREEDER_F, FACILITY_CLASS_BEAUTY
|
||||
};
|
||||
|
||||
static const u8 sHoldEffectToType[][2] =
|
||||
|
||||
@@ -1094,9 +1094,9 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst)
|
||||
{
|
||||
dst->twoPlayers[j].language = GAME_LANGUAGE;
|
||||
CopyTrainerId(dst->twoPlayers[j].id1, gSaveBlock2Ptr->playerTrainerId);
|
||||
CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.field_EF1[j]);
|
||||
CopyTrainerId(dst->twoPlayers[j].id2, gSaveBlock2Ptr->frontier.opponentTrainerIds[j]);
|
||||
StringCopy(dst->twoPlayers[j].name1, gSaveBlock2Ptr->playerName);
|
||||
StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentName[j]);
|
||||
StringCopy(dst->twoPlayers[j].name2, gSaveBlock2Ptr->frontier.opponentNames[j]);
|
||||
}
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
|
||||
@@ -334,9 +334,9 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
s32 i, j;
|
||||
bool32 ret;
|
||||
struct RecordedBattleSave *battleSave, *savSection;
|
||||
u8 var;
|
||||
u8 saveAttempts;
|
||||
|
||||
var = 0;
|
||||
saveAttempts = 0;
|
||||
battleSave = AllocZeroed(sizeof(struct RecordedBattleSave));
|
||||
savSection = AllocZeroed(0x1000);
|
||||
|
||||
@@ -480,8 +480,8 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
ret = RecordedBattleToSave(battleSave, savSection);
|
||||
if (ret == TRUE)
|
||||
break;
|
||||
var++;
|
||||
if (var >= 3)
|
||||
saveAttempts++;
|
||||
if (saveAttempts >= 3)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -608,7 +608,7 @@ static void Task_ResetRtcScreen(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
if (TrySavingData(0) == 1)
|
||||
if (TrySavingData(SAVE_NORMAL) == 1)
|
||||
{
|
||||
ShowMessage(gText_SaveCompleted);
|
||||
PlaySE(SE_PINPON);
|
||||
|
||||
@@ -683,8 +683,8 @@ u8 HandleSavingData(u8 saveType)
|
||||
SaveSerializedGame();
|
||||
save_write_to_flash(0xFFFF, gRamSaveSectionLocations);
|
||||
break;
|
||||
case SAVE_LINK: // _081532C4
|
||||
case SAVE_LINK2:
|
||||
case SAVE_LINK: // Link and Battle Frontier
|
||||
case SAVE_LINK2: // Unused
|
||||
SaveSerializedGame();
|
||||
for(i = 0; i < 5; i++)
|
||||
ClearSaveData_2(i, gRamSaveSectionLocations);
|
||||
|
||||
@@ -640,7 +640,7 @@ void CreateScriptedWildMon(u16 species, u8 level, u16 item)
|
||||
u8 heldItem[2];
|
||||
|
||||
ZeroEnemyPartyMons();
|
||||
CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
|
||||
if (item)
|
||||
{
|
||||
heldItem[0] = item;
|
||||
|
||||
@@ -728,7 +728,7 @@ static void TrainerCard_GenerateCardForLinkPlayer(struct TrainerCard *trainerCar
|
||||
trainerCard->version = GAME_VERSION;
|
||||
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
|
||||
trainerCard->hasAllSymbols = HasAllFrontierSymbols();
|
||||
trainerCard->frontierBP = gSaveBlock2Ptr->frontier.field_EBA;
|
||||
trainerCard->frontierBP = gSaveBlock2Ptr->frontier.cardBattlePoints;
|
||||
if (trainerCard->hasAllSymbols)
|
||||
trainerCard->stars++;
|
||||
|
||||
@@ -744,7 +744,7 @@ void TrainerCard_GenerateCardForPlayer(struct TrainerCard *trainerCard)
|
||||
trainerCard->version = GAME_VERSION;
|
||||
SetPlayerCardData(trainerCard, CARD_TYPE_EMERALD);
|
||||
trainerCard->var_3A = HasAllFrontierSymbols();
|
||||
*((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.field_EBA;
|
||||
*((u16*)&trainerCard->berryCrushPoints) = gSaveBlock2Ptr->frontier.cardBattlePoints;
|
||||
if (trainerCard->var_3A)
|
||||
trainerCard->stars++;
|
||||
|
||||
|
||||
31
src/tv.c
31
src/tv.c
@@ -1,7 +1,6 @@
|
||||
#include "global.h"
|
||||
#include "rtc.h"
|
||||
#include "overworld.h"
|
||||
#include "constants/maps.h"
|
||||
#include "random.h"
|
||||
#include "event_data.h"
|
||||
#include "fieldmap.h"
|
||||
@@ -14,12 +13,9 @@
|
||||
#include "pokemon_storage_system.h"
|
||||
#include "field_message_box.h"
|
||||
#include "easy_chat.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/moves.h"
|
||||
#include "battle.h"
|
||||
#include "battle_tower.h"
|
||||
#include "contest.h"
|
||||
#include "constants/items.h"
|
||||
#include "item.h"
|
||||
#include "link.h"
|
||||
#include "main.h"
|
||||
@@ -33,15 +29,20 @@
|
||||
#include "naming_screen.h"
|
||||
#include "malloc.h"
|
||||
#include "region_map.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
#include "decoration.h"
|
||||
#include "secret_base.h"
|
||||
#include "tv.h"
|
||||
#include "data.h"
|
||||
#include "constants/battle_frontier.h"
|
||||
#include "constants/contest.h"
|
||||
#include "constants/items.h"
|
||||
#include "constants/layouts.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/metatile_behaviors.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/region_map_sections.h"
|
||||
#include "constants/script_menu.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/tv.h"
|
||||
|
||||
// Static type declarations
|
||||
@@ -1538,12 +1539,12 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
|
||||
show->bravoTrainerTower.kind = TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE;
|
||||
show->bravoTrainerTower.active = TRUE;
|
||||
StringCopy(show->bravoTrainerTower.trainerName, gSaveBlock2Ptr->playerName);
|
||||
StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.field_BD8);
|
||||
show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.field_BD4;
|
||||
show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.field_BD6;
|
||||
show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.field_D07, 0);
|
||||
show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.field_D06;
|
||||
if (gSaveBlock2Ptr->frontier.field_D07 == 0)
|
||||
StringCopy(show->bravoTrainerTower.pokemonName, gSaveBlock2Ptr->frontier.towerInterview.opponentName);
|
||||
show->bravoTrainerTower.species = gSaveBlock2Ptr->frontier.towerInterview.playerSpecies;
|
||||
show->bravoTrainerTower.defeatedSpecies = gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies;
|
||||
show->bravoTrainerTower.numFights = GetCurrentBattleTowerWinStreak(gSaveBlock2Ptr->frontier.towerLvlMode, 0);
|
||||
show->bravoTrainerTower.wonTheChallenge = gSaveBlock2Ptr->frontier.towerBattleOutcome;
|
||||
if (gSaveBlock2Ptr->frontier.towerLvlMode == FRONTIER_LVL_50)
|
||||
{
|
||||
show->bravoTrainerTower.btLevel = 50;
|
||||
}
|
||||
@@ -1554,13 +1555,13 @@ static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
|
||||
show->bravoTrainerTower.interviewResponse = gSpecialVar_0x8004;
|
||||
tv_store_id_2x(show);
|
||||
show->bravoTrainerTower.language = gGameLanguage;
|
||||
if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.field_BEB == LANGUAGE_JAPANESE)
|
||||
if (show->bravoTrainerTower.language == LANGUAGE_JAPANESE || gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage == LANGUAGE_JAPANESE)
|
||||
{
|
||||
show->bravoTrainerTower.pokemonNameLanguage = LANGUAGE_JAPANESE;
|
||||
}
|
||||
else
|
||||
{
|
||||
show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.field_BEB;
|
||||
show->bravoTrainerTower.pokemonNameLanguage = gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2466,7 +2467,7 @@ bool8 ShouldHideFanClubInterviewer(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_80EE818(void)
|
||||
bool8 ShouldAirFrontierTVShow(void)
|
||||
{
|
||||
u32 playerId;
|
||||
u8 showIdx;
|
||||
@@ -2494,7 +2495,7 @@ bool8 sub_80EE818(void)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_80EE8C8(u16 winStreak, u8 facilityAndMode)
|
||||
void TryPutFrontierTVShowOnAir(u16 winStreak, u8 facilityAndMode)
|
||||
{
|
||||
TVShow *show;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user