Merge master into ObjEvent rename
This commit is contained in:
+485
-1370
File diff suppressed because it is too large
Load Diff
+4
-4
@@ -1355,7 +1355,7 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
|
||||
{gBattleAnimSpriteGfx_Spotlight, 0x0800, ANIM_TAG_SPOTLIGHT},
|
||||
{gBattleAnimSpriteGfx_LetterZ, 0x0200, ANIM_TAG_LETTER_Z},
|
||||
{gBattleAnimSpriteGfx_RapidSpin, 0x0300, ANIM_TAG_RAPID_SPIN},
|
||||
{gBattleAnimSpriteGfx_TriForceTriangle, 0x0800, ANIM_TAG_TRI_FORCE_TRIANGLE},
|
||||
{gBattleAnimSpriteGfx_TriAttackTriangle, 0x0800, ANIM_TAG_TRI_ATTACK_TRIANGLE},
|
||||
{gBattleAnimSpriteGfx_WispOrb, 0x0380, ANIM_TAG_WISP_ORB},
|
||||
{gBattleAnimSpriteGfx_WispFire, 0x0800, ANIM_TAG_WISP_FIRE},
|
||||
{gBattleAnimSpriteGfx_GoldStars, 0x00c0, ANIM_TAG_GOLD_STARS},
|
||||
@@ -1648,7 +1648,7 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
|
||||
{gBattleAnimSpritePal_Pokeball, ANIM_TAG_SPOTLIGHT},
|
||||
{gBattleAnimSpritePal_LetterZ, ANIM_TAG_LETTER_Z},
|
||||
{gBattleAnimSpritePal_RapidSpin, ANIM_TAG_RAPID_SPIN},
|
||||
{gBattleAnimSpritePal_TriForceTriangle, ANIM_TAG_TRI_FORCE_TRIANGLE},
|
||||
{gBattleAnimSpritePal_TriAttackTriangle, ANIM_TAG_TRI_ATTACK_TRIANGLE},
|
||||
{gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_ORB},
|
||||
{gBattleAnimSpritePal_WispOrb, ANIM_TAG_WISP_FIRE},
|
||||
{gBattleAnimSpritePal_GoldStars, ANIM_TAG_GOLD_STARS},
|
||||
@@ -2808,12 +2808,12 @@ static void LoadMoveBg(u16 bgId)
|
||||
void *dmaDest;
|
||||
|
||||
LZDecompressWram(tilemap, gDecompressionBuffer);
|
||||
sub_80A4720(sub_80A6D94(), (void*)(gDecompressionBuffer), 0x100, 0);
|
||||
sub_80A4720(GetBattleBgPaletteNum(), (void*)(gDecompressionBuffer), 0x100, 0);
|
||||
dmaSrc = gDecompressionBuffer;
|
||||
dmaDest = (void *)(BG_SCREEN_ADDR(26));
|
||||
DmaCopy32(3, dmaSrc, dmaDest, 0x800);
|
||||
LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(BG_SCREEN_ADDR(4)));
|
||||
LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80A6D94() * 16, 32);
|
||||
LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, GetBattleBgPaletteNum() * 16, 32);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
+254
-254
File diff suppressed because it is too large
Load Diff
@@ -966,7 +966,7 @@ void sub_80A6D60(struct BattleAnimBgData *unk, const void *src, u32 arg2)
|
||||
CopyBgTilemapBufferToVram(unk->bgId);
|
||||
}
|
||||
|
||||
u8 sub_80A6D94(void)
|
||||
u8 GetBattleBgPaletteNum(void)
|
||||
{
|
||||
if (IsContest())
|
||||
return 1;
|
||||
@@ -1353,7 +1353,7 @@ u32 sub_80A75AC(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner,
|
||||
if (!IsContest())
|
||||
selectedPalettes = 0xe;
|
||||
else
|
||||
selectedPalettes = 1 << sub_80A6D94();
|
||||
selectedPalettes = 1 << GetBattleBgPaletteNum();
|
||||
}
|
||||
if (attacker)
|
||||
{
|
||||
|
||||
@@ -403,7 +403,7 @@ const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C =
|
||||
.callback = sub_817330C,
|
||||
};
|
||||
|
||||
extern const struct SpriteTemplate gUnknown_085CE388;
|
||||
extern const struct SpriteTemplate gWishStarSpriteTemplate;
|
||||
extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate;
|
||||
|
||||
void unref_sub_8170478(u8 taskId)
|
||||
@@ -2081,7 +2081,7 @@ static void sub_8172FEC(u8 taskId)
|
||||
state = gTasks[taskId].data[11];
|
||||
if (state == 0)
|
||||
{
|
||||
spriteId = CreateSprite(&gUnknown_085CE388, x, y, 5);
|
||||
spriteId = CreateSprite(&gWishStarSpriteTemplate, x, y, 5);
|
||||
}
|
||||
else if (state >= 0 && gTasks[taskId].data[11] < 4)
|
||||
{
|
||||
|
||||
+14
-13
@@ -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.field_CA8 = 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.field_CA8 = 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)
|
||||
|
||||
+25
-24
@@ -30,6 +30,7 @@
|
||||
#include "scanline_effect.h"
|
||||
#include "script_pokemon_util_80F87D8.h"
|
||||
#include "graphics.h"
|
||||
#include "constants/frontier_util.h"
|
||||
#include "constants/species.h"
|
||||
#include "constants/moves.h"
|
||||
#include "constants/trainers.h"
|
||||
@@ -1103,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] =
|
||||
@@ -2261,11 +2262,11 @@ static void InitDomeChallenge(void)
|
||||
u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 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);
|
||||
@@ -2283,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;
|
||||
@@ -2331,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;
|
||||
@@ -2352,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;
|
||||
@@ -2401,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;
|
||||
}
|
||||
}
|
||||
@@ -2431,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]);
|
||||
@@ -2499,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);
|
||||
@@ -2575,7 +2576,7 @@ static void InitDomeTrainers(void)
|
||||
}
|
||||
}
|
||||
|
||||
if (sub_81A3610())
|
||||
if (GetFrontierBrainStatus() != FRONTIER_BRAIN_NOT_READY)
|
||||
{
|
||||
for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++)
|
||||
{
|
||||
@@ -3328,10 +3329,10 @@ static void SetDomeOpponentGraphicsId(void)
|
||||
|
||||
static void sub_81902F8(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 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)
|
||||
@@ -6016,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.field_CA8 != 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);
|
||||
|
||||
+16
-15
@@ -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.field_CA8 = 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.field_CA8 = 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");
|
||||
|
||||
+18
-16
@@ -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.field_CA8 = 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.field_CA8 = 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)
|
||||
|
||||
+104
-105
@@ -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"
|
||||
@@ -51,7 +52,7 @@ static u8 sNpcId;
|
||||
static void SetRoomType(void);
|
||||
static void GetBattlePikeData(void);
|
||||
static void SetBattlePikeData(void);
|
||||
static void GetInFinalRoom(void);
|
||||
static void IsNextRoomFinal(void);
|
||||
static void SetupRoomObjectEvents(void);
|
||||
static void GetRoomType(void);
|
||||
static void sub_81A7400(void);
|
||||
@@ -72,8 +73,8 @@ static void ClearPikeTrainerIds(void);
|
||||
static void BufferRecordMixingTrainerMessage(void);
|
||||
static void GetCurrentRoomPikeQueenFightType(void);
|
||||
static void HealSomeMonsBeforePikeQueen(void);
|
||||
static void SetHealingRoomsDisabled(void);
|
||||
static void CanAnyPartyMonsBeHealed(void);
|
||||
static void SetHealingroomTypesDisabled(void);
|
||||
static void IsPartyFullHealed(void);
|
||||
static void BackupMonHeldItems(void);
|
||||
static void RestoreMonHeldItems(void);
|
||||
static void InitPikeChallenge(void);
|
||||
@@ -419,7 +420,7 @@ static const struct PikeRoomNPC sNPCTable[] =
|
||||
}
|
||||
};
|
||||
|
||||
static const u16 sNPCSpeeches[][6] =
|
||||
static const u16 sNPCSpeeches[][EASY_CHAT_BATTLE_WORDS_COUNT] =
|
||||
{
|
||||
{EC_WORD_I_AM, EC_WORD_LOST, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_MOVE2(HELPING_HAND)},
|
||||
{EC_WORD_I_VE, EC_WORD_NO, EC_WORD_SENSE, EC_WORD_OF, EC_WORD_WHERE, EC_WORD_I_AM},
|
||||
@@ -465,61 +466,61 @@ static const u16 sNPCSpeeches[][6] =
|
||||
{EC_MOVE2(TOXIC), EC_WORD_IS, EC_WORD_A, EC_WORD_TERRIBLE, EC_WORD_THING, EC_WORD_ISN_T_IT_QUES},
|
||||
};
|
||||
|
||||
// Only the 5th array in this data is used by the code.
|
||||
static const u8 sPikeQueenWinStreakAppearances[][4] =
|
||||
// Table duplicated from frontier_util, only Battle Pike entry used
|
||||
static const u8 sFrontierBrainStreakAppearances[NUM_FRONTIER_FACILITIES][4] =
|
||||
{
|
||||
{35, 70, 35, 1},
|
||||
{ 4, 9, 5, 0},
|
||||
{21, 42, 21, 1},
|
||||
{28, 56, 28, 1},
|
||||
{21, 42, 21, 1},
|
||||
{28, 140, 56, 1},
|
||||
{21, 70, 35, 0},
|
||||
[FRONTIER_FACILITY_TOWER] = {35, 70, 35, 1},
|
||||
[FRONTIER_FACILITY_DOME] = { 4, 9, 5, 0},
|
||||
[FRONTIER_FACILITY_PALACE] = {21, 42, 21, 1},
|
||||
[FRONTIER_FACILITY_ARENA] = {28, 56, 28, 1},
|
||||
[FRONTIER_FACILITY_FACTORY] = {21, 42, 21, 1},
|
||||
[FRONTIER_FACILITY_PIKE] = {28, 140, 56, 1},
|
||||
[FRONTIER_FACILITY_PYRAMID] = {21, 70, 35, 0},
|
||||
};
|
||||
|
||||
static void (* const sBattlePikeFunctions[])(void) =
|
||||
{
|
||||
SetRoomType,
|
||||
GetBattlePikeData,
|
||||
SetBattlePikeData,
|
||||
GetInFinalRoom,
|
||||
SetupRoomObjectEvents,
|
||||
GetRoomType,
|
||||
sub_81A7400,
|
||||
sub_81A740C,
|
||||
sub_81A7418,
|
||||
nullsub_76,
|
||||
nullsub_124,
|
||||
GetRoomInflictedStatus,
|
||||
GetRoomInflictedStatusMon,
|
||||
HealOneOrTwoMons,
|
||||
BufferNPCMessage,
|
||||
StatusInflictionScreenFade,
|
||||
GetInBattlePike,
|
||||
SetHintedRoom,
|
||||
GetHintedRoomIndex,
|
||||
GetRoomTypeHint,
|
||||
ClearPikeTrainerIds,
|
||||
BufferRecordMixingTrainerMessage,
|
||||
GetCurrentRoomPikeQueenFightType,
|
||||
HealSomeMonsBeforePikeQueen,
|
||||
SetHealingRoomsDisabled,
|
||||
CanAnyPartyMonsBeHealed,
|
||||
BackupMonHeldItems,
|
||||
RestoreMonHeldItems,
|
||||
InitPikeChallenge
|
||||
[BATTLE_PIKE_FUNC_SET_ROOM_TYPE] = SetRoomType,
|
||||
[BATTLE_PIKE_FUNC_GET_DATA] = GetBattlePikeData,
|
||||
[BATTLE_PIKE_FUNC_SET_DATA] = SetBattlePikeData,
|
||||
[BATTLE_PIKE_FUNC_IS_FINAL_ROOM] = IsNextRoomFinal,
|
||||
[BATTLE_PIKE_FUNC_SET_ROOM_OBJECTS] = SetupRoomObjectEvents,
|
||||
[BATTLE_PIKE_FUNC_GET_ROOM_TYPE] = GetRoomType,
|
||||
[BATTLE_PIKE_FUNC_6] = sub_81A7400,
|
||||
[BATTLE_PIKE_FUNC_7] = sub_81A740C,
|
||||
[BATTLE_PIKE_FUNC_8] = sub_81A7418,
|
||||
[BATTLE_PIKE_FUNC_NULL_9] = nullsub_76,
|
||||
[BATTLE_PIKE_FUNC_NULL_10] = nullsub_124,
|
||||
[BATTLE_PIKE_FUNC_GET_ROOM_STATUS] = GetRoomInflictedStatus,
|
||||
[BATTLE_PIKE_FUNC_GET_ROOM_STATUS_MON] = GetRoomInflictedStatusMon,
|
||||
[BATTLE_PIKE_FUNC_HEAL_ONE_TWO_MONS] = HealOneOrTwoMons,
|
||||
[BATTLE_PIKE_FUNC_BUFFER_NPC_MSG] = BufferNPCMessage,
|
||||
[BATTLE_PIKE_FUNC_STATUS_SCREEN_FADE] = StatusInflictionScreenFade,
|
||||
[BATTLE_PIKE_FUNC_IS_IN] = GetInBattlePike,
|
||||
[BATTLE_PIKE_FUNC_SET_HINT_ROOM] = SetHintedRoom,
|
||||
[BATTLE_PIKE_FUNC_GET_HINT_ROOM_ID] = GetHintedRoomIndex,
|
||||
[BATTLE_PIKE_FUNC_GET_ROOM_TYPE_HINT] = GetRoomTypeHint,
|
||||
[BATTLE_PIKE_FUNC_CLEAR_TRAINER_IDS] = ClearPikeTrainerIds,
|
||||
[BATTLE_PIKE_FUNC_BUFFER_RECORD_MIX_MSG] = BufferRecordMixingTrainerMessage,
|
||||
[BATTLE_PIKE_FUNC_GET_QUEEN_FIGHT_TYPE] = GetCurrentRoomPikeQueenFightType,
|
||||
[BATTLE_PIKE_FUNC_HEAL_MONS_BEFORE_QUEEN] = HealSomeMonsBeforePikeQueen,
|
||||
[BATTLE_PIKE_FUNC_SET_HEALING_ROOMS_DISABLED] = SetHealingroomTypesDisabled,
|
||||
[BATTLE_PIKE_FUNC_IS_PARTY_FULL_HEALTH] = IsPartyFullHealed,
|
||||
[BATTLE_PIKE_FUNC_SAVE_MON_HELD_ITEMS] = BackupMonHeldItems,
|
||||
[BATTLE_PIKE_FUNC_LOAD_MON_HELD_ITEMS] = RestoreMonHeldItems,
|
||||
[BATTLE_PIKE_FUNC_INIT_CHALLENGE] = InitPikeChallenge
|
||||
};
|
||||
|
||||
static const u8 sRoomTypeHints[] = {
|
||||
3, // PIKE_ROOM_SINGLE_BATTLE
|
||||
3, // PIKE_ROOM_HEAL_FULL
|
||||
1, // PIKE_ROOM_NPC
|
||||
0, // PIKE_ROOM_STATUS
|
||||
0, // PIKE_ROOM_HEAL_PART
|
||||
2, // PIKE_ROOM_WILD_MONS
|
||||
2, // PIKE_ROOM_HARD_BATTLE
|
||||
1, // PIKE_ROOM_DOUBLE_BATTLE
|
||||
4, // PIKE_ROOM_BRAIN
|
||||
PIKE_HINT_PEOPLE, // PIKE_ROOM_SINGLE_BATTLE
|
||||
PIKE_HINT_PEOPLE, // PIKE_ROOM_HEAL_FULL
|
||||
PIKE_HINT_WHISPERING, // PIKE_ROOM_NPC
|
||||
PIKE_HINT_NOSTALGIA, // PIKE_ROOM_STATUS
|
||||
PIKE_HINT_NOSTALGIA, // PIKE_ROOM_HEAL_PART
|
||||
PIKE_HINT_POKEMON, // PIKE_ROOM_WILD_MONS
|
||||
PIKE_HINT_POKEMON, // PIKE_ROOM_HARD_BATTLE
|
||||
PIKE_HINT_WHISPERING, // PIKE_ROOM_DOUBLE_BATTLE
|
||||
PIKE_HINT_BRAIN, // PIKE_ROOM_BRAIN
|
||||
};
|
||||
|
||||
static const u8 sNumMonsToHealBeforePikeQueen[][3] =
|
||||
@@ -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,37 +654,37 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetInFinalRoom(void)
|
||||
static void IsNextRoomFinal(void)
|
||||
{
|
||||
if (gSaveBlock2Ptr->frontier.curChallengeBattleNum > 14)
|
||||
gSpecialVar_Result = TRUE;
|
||||
@@ -708,9 +709,9 @@ static void sub_81A740C(void)
|
||||
|
||||
static void sub_81A7418(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 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);
|
||||
}
|
||||
@@ -1014,10 +1015,10 @@ static bool8 AtLeastOneHealthyMon(void)
|
||||
|
||||
static u8 GetNextRoomType(void)
|
||||
{
|
||||
u8 roomTypesAvailability[8];
|
||||
bool8 roomTypesDisabled[NUM_PIKE_ROOM_TYPES - 1]; // excludes Brain room, which cant be disabled
|
||||
u8 i;
|
||||
u8 nextRoomType;
|
||||
u8 roomTypeGroup;
|
||||
u8 roomHint;
|
||||
u8 numRoomCandidates;
|
||||
u8 *roomCandidates;
|
||||
u8 id;
|
||||
@@ -1033,54 +1034,54 @@ static u8 GetNextRoomType(void)
|
||||
return gSaveBlock2Ptr->frontier.pikeHintedRoomType;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
roomTypesAvailability[i] = 0;
|
||||
for (i = 0; i < ARRAY_COUNT(roomTypesDisabled); i++)
|
||||
roomTypesDisabled[i] = FALSE;
|
||||
|
||||
numRoomCandidates = 8;
|
||||
numRoomCandidates = NUM_PIKE_ROOM_TYPES - 1;
|
||||
|
||||
// The room types associated with the lady's hint cannot be in the other two rooms.
|
||||
roomTypeGroup = sRoomTypeHints[gSaveBlock2Ptr->frontier.pikeHintedRoomType];
|
||||
for (i = 0; i < 8; i++)
|
||||
// The other two room types cannot be the same type as the one associated with the lady's hint
|
||||
roomHint = sRoomTypeHints[gSaveBlock2Ptr->frontier.pikeHintedRoomType];
|
||||
for (i = 0; i < ARRAY_COUNT(roomTypesDisabled); i++)
|
||||
{
|
||||
if (sRoomTypeHints[i] == roomTypeGroup)
|
||||
if (sRoomTypeHints[i] == roomHint)
|
||||
{
|
||||
roomTypesAvailability[i] = 1;
|
||||
roomTypesDisabled[i] = TRUE;
|
||||
numRoomCandidates--;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove room type candidates that would have no effect on the player's party.
|
||||
if (roomTypesAvailability[PIKE_ROOM_DOUBLE_BATTLE] != 1 && !AtLeastTwoAliveMons())
|
||||
if (roomTypesDisabled[PIKE_ROOM_DOUBLE_BATTLE] != TRUE && !AtLeastTwoAliveMons())
|
||||
{
|
||||
roomTypesAvailability[PIKE_ROOM_DOUBLE_BATTLE] = 1;
|
||||
roomTypesDisabled[PIKE_ROOM_DOUBLE_BATTLE] = TRUE;
|
||||
numRoomCandidates--;
|
||||
}
|
||||
if (roomTypesAvailability[PIKE_ROOM_STATUS] != 1 && !AtLeastOneHealthyMon())
|
||||
if (roomTypesDisabled[PIKE_ROOM_STATUS] != TRUE && !AtLeastOneHealthyMon())
|
||||
{
|
||||
roomTypesAvailability[PIKE_ROOM_STATUS] = 1;
|
||||
roomTypesDisabled[PIKE_ROOM_STATUS] = TRUE;
|
||||
numRoomCandidates--;
|
||||
}
|
||||
|
||||
// Remove healing room type candidates if healing rooms are disabled.
|
||||
if (gSaveBlock2Ptr->frontier.pikeHealingRoomsDisabled)
|
||||
{
|
||||
if (roomTypesAvailability[PIKE_ROOM_HEAL_FULL] != 1)
|
||||
if (roomTypesDisabled[PIKE_ROOM_HEAL_FULL] != TRUE)
|
||||
{
|
||||
roomTypesAvailability[PIKE_ROOM_HEAL_FULL] = 1;
|
||||
roomTypesDisabled[PIKE_ROOM_HEAL_FULL] = TRUE;
|
||||
numRoomCandidates--;
|
||||
}
|
||||
if (roomTypesAvailability[PIKE_ROOM_HEAL_PART] != 1)
|
||||
if (roomTypesDisabled[PIKE_ROOM_HEAL_PART] != TRUE)
|
||||
{
|
||||
roomTypesAvailability[PIKE_ROOM_HEAL_PART] = 1;
|
||||
roomTypesDisabled[PIKE_ROOM_HEAL_PART] = TRUE;
|
||||
numRoomCandidates--;
|
||||
}
|
||||
}
|
||||
|
||||
roomCandidates = AllocZeroed(numRoomCandidates);
|
||||
id = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < ARRAY_COUNT(roomTypesDisabled); i++)
|
||||
{
|
||||
if (roomTypesAvailability[i] == 0)
|
||||
if (roomTypesDisabled[i] == FALSE)
|
||||
roomCandidates[id++] = i;
|
||||
}
|
||||
|
||||
@@ -1098,6 +1099,7 @@ static u16 GetNPCRoomGraphicsId(void)
|
||||
return sNPCTable[sNpcId].graphicsId;
|
||||
}
|
||||
|
||||
// Unused
|
||||
static u8 sub_81A7B84(void)
|
||||
{
|
||||
return sUnknown_0300128E;
|
||||
@@ -1323,8 +1325,8 @@ static void GetInBattlePike(void)
|
||||
bool8 InBattlePike(void)
|
||||
{
|
||||
return gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM
|
||||
|| gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1
|
||||
|| gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3
|
||||
|| gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL
|
||||
|| gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS
|
||||
|| gMapHeader.mapLayoutId == LAYOUT_UNKNOWN_084693AC;
|
||||
}
|
||||
|
||||
@@ -1344,9 +1346,9 @@ static void SetHintedRoom(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.pikeHintedRoomIndex = Random() % 3;
|
||||
if (gSaveBlock2Ptr->frontier.pikeHealingRoomsDisabled)
|
||||
count = 6;
|
||||
count = NUM_PIKE_ROOM_TYPES - 3; // exclude healing rooms and Brain room
|
||||
else
|
||||
count = 8;
|
||||
count = NUM_PIKE_ROOM_TYPES - 1; // exclude Brain room
|
||||
|
||||
roomCandidates = AllocZeroed(count);
|
||||
for (i = 0, id = 0; i < count; i++)
|
||||
@@ -1373,9 +1375,6 @@ static void SetHintedRoom(void)
|
||||
|
||||
static void GetHintedRoomIndex(void)
|
||||
{
|
||||
// 0 = left room
|
||||
// 1 = center room
|
||||
// 2 = right room
|
||||
gSpecialVar_Result = gSaveBlock2Ptr->frontier.pikeHintedRoomIndex;
|
||||
}
|
||||
|
||||
@@ -1500,7 +1499,7 @@ static u8 GetPikeQueenFightType(u8 nextRoom)
|
||||
{
|
||||
u8 numPikeSymbols;
|
||||
|
||||
u8 var = 5;
|
||||
u8 facility = FRONTIER_FACILITY_PIKE;
|
||||
u8 ret = 0;
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
u16 winStreak = gSaveBlock2Ptr->frontier.pikeWinStreaks[lvlMode];
|
||||
@@ -1511,16 +1510,16 @@ static u8 GetPikeQueenFightType(u8 nextRoom)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
if (winStreak == sPikeQueenWinStreakAppearances[var][numPikeSymbols] - sPikeQueenWinStreakAppearances[var][3])
|
||||
if (winStreak == sFrontierBrainStreakAppearances[facility][numPikeSymbols] - sFrontierBrainStreakAppearances[facility][3])
|
||||
ret = numPikeSymbols + 1;
|
||||
break;
|
||||
case 2:
|
||||
default:
|
||||
if (winStreak == sPikeQueenWinStreakAppearances[var][0] - sPikeQueenWinStreakAppearances[var][3])
|
||||
if (winStreak == sFrontierBrainStreakAppearances[facility][0] - sFrontierBrainStreakAppearances[facility][3])
|
||||
ret = 3;
|
||||
else if (winStreak == sPikeQueenWinStreakAppearances[var][1] - sPikeQueenWinStreakAppearances[var][3]
|
||||
|| (winStreak > sPikeQueenWinStreakAppearances[var][1]
|
||||
&& (winStreak - sPikeQueenWinStreakAppearances[var][1] + sPikeQueenWinStreakAppearances[var][3]) % sPikeQueenWinStreakAppearances[var][2] == 0))
|
||||
else if (winStreak == sFrontierBrainStreakAppearances[facility][1] - sFrontierBrainStreakAppearances[facility][3]
|
||||
|| (winStreak > sFrontierBrainStreakAppearances[facility][1]
|
||||
&& (winStreak - sFrontierBrainStreakAppearances[facility][1] + sFrontierBrainStreakAppearances[facility][3]) % sFrontierBrainStreakAppearances[facility][2] == 0))
|
||||
ret = 4;
|
||||
break;
|
||||
}
|
||||
@@ -1541,17 +1540,17 @@ static void HealSomeMonsBeforePikeQueen(void)
|
||||
gSpecialVar_Result = toHealCount;
|
||||
}
|
||||
|
||||
static void SetHealingRoomsDisabled(void)
|
||||
static void SetHealingroomTypesDisabled(void)
|
||||
{
|
||||
gSaveBlock2Ptr->frontier.pikeHealingRoomsDisabled = gSpecialVar_0x8005;
|
||||
}
|
||||
|
||||
static void CanAnyPartyMonsBeHealed(void)
|
||||
static void IsPartyFullHealed(void)
|
||||
{
|
||||
u8 i, j;
|
||||
|
||||
gSpecialVar_Result = TRUE;
|
||||
for (i = 0; i < 3; i++)
|
||||
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
|
||||
{
|
||||
bool32 canBeHealed = FALSE;
|
||||
struct Pokemon *mon = &gPlayerParty[i];
|
||||
@@ -1589,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);
|
||||
@@ -1601,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,
|
||||
@@ -1613,10 +1612,10 @@ static void InitPikeChallenge(void)
|
||||
{
|
||||
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
|
||||
|
||||
gSaveBlock2Ptr->frontier.field_CA8 = 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;
|
||||
|
||||
+21
-20
@@ -30,6 +30,7 @@
|
||||
#include "constants/battle_pyramid.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/event_object_movement.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.field_CA8 = 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.field_CA8 = 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.field_CA8 = 2;
|
||||
gSaveBlock2Ptr->frontier.challengeStatus = CHALLENGE_STATUS_PAUSED;
|
||||
VarSet(VAR_TEMP_E, 0);
|
||||
LoadPlayerParty();
|
||||
}
|
||||
|
||||
@@ -4555,7 +4555,7 @@ static void Cmd_moveend(void)
|
||||
case MOVEEND_CHOICE_MOVE: // update choice band move
|
||||
if (gHitMarker & HITMARKER_OBEYS
|
||||
&& holdEffectAtk == HOLD_EFFECT_CHOICE_BAND
|
||||
&& gChosenMove != MOVE_STRUGGLE
|
||||
&& gChosenMove != MOVE_STRUGGLE
|
||||
&& (*choicedMoveAtk == 0 || *choicedMoveAtk == 0xFFFF))
|
||||
{
|
||||
if (gChosenMove == MOVE_BATON_PASS && !(gMoveResultFlags & MOVE_RESULT_FAILED))
|
||||
@@ -7826,7 +7826,7 @@ static void Cmd_weatherdamage(void)
|
||||
gBattleMoveDamage = 0;
|
||||
}
|
||||
}
|
||||
if (gBattleWeather & WEATHER_HAIL)
|
||||
if (gBattleWeather & WEATHER_HAIL_ANY)
|
||||
{
|
||||
if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
|
||||
&& !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
|
||||
|
||||
+24
-24
@@ -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.field_CA8 = 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.field_CA8 = 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.field_CA8 = 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.field_CA8 = 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.field_CA8 = 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.field_CA8 = 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)
|
||||
|
||||
+167
-161
@@ -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] =
|
||||
OBJ_EVENT_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.field_CA8 = 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
|
||||
@@ -1272,10 +1276,10 @@ static bool8 ChooseSpecialBattleTowerTrainer(void)
|
||||
if (battleMode == FRONTIER_MODE_SINGLES)
|
||||
{
|
||||
ValidateApprenticesChecksums();
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < APPRENTICE_COUNT; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->apprentices[i].lvlMode != 0
|
||||
&& gUnknown_085DF9EC[gSaveBlock2Ptr->apprentices[i].field_1] == winStreak
|
||||
&& gUnknown_085DF9EC[gSaveBlock2Ptr->apprentices[i].numQuestions] == winStreak
|
||||
&& gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode)
|
||||
{
|
||||
trainerIds[idsCount] = i + TRAINER_RECORD_MIXING_APPRENTICE;
|
||||
@@ -2000,7 +2004,7 @@ static void Unused_CreateApprenticeMons(u16 trainerId, u8 firstMonId)
|
||||
u8 fixedIV = 0;
|
||||
struct Apprentice *apprentice = &gSaveBlock2Ptr->apprentices[0];
|
||||
|
||||
if (apprentice->field_1 < 5)
|
||||
if (apprentice->numQuestions < 5)
|
||||
fixedIV = 6;
|
||||
else
|
||||
fixedIV = 9;
|
||||
@@ -2178,7 +2182,7 @@ static void sub_8163914(void)
|
||||
else if (trainerId < TRAINER_RECORD_MIXING_APPRENTICE)
|
||||
FrontierSpeechToString(gSaveBlock2Ptr->frontier.towerRecords[trainerId - TRAINER_RECORD_MIXING_FRIEND].greeting);
|
||||
else
|
||||
CopyFriendsApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE);
|
||||
BufferApprenticeChallengeText(trainerId - TRAINER_RECORD_MIXING_APPRENTICE);
|
||||
}
|
||||
|
||||
static void HandleSpecialTrainerBattleEnd(void)
|
||||
@@ -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.field_CA8 =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)
|
||||
@@ -2569,10 +2573,10 @@ static void sub_81642A0(void)
|
||||
|
||||
r10 = 0;
|
||||
ValidateApprenticesChecksums();
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < APPRENTICE_COUNT; i++)
|
||||
{
|
||||
if (gSaveBlock2Ptr->apprentices[i].lvlMode != 0
|
||||
&& gUnknown_085DF9EC[gSaveBlock2Ptr->apprentices[i].field_1] / 7 <= challengeNum
|
||||
&& gUnknown_085DF9EC[gSaveBlock2Ptr->apprentices[i].numQuestions] / 7 <= challengeNum
|
||||
&& gSaveBlock2Ptr->apprentices[i].lvlMode - 1 == lvlMode)
|
||||
{
|
||||
k = 0;
|
||||
@@ -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.field_CA8 == 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);
|
||||
@@ -3393,7 +3399,7 @@ static void ValidateApprenticesChecksums(void)
|
||||
{
|
||||
s32 i, j;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < APPRENTICE_COUNT; i++)
|
||||
{
|
||||
u32 *data = (u32*) &gSaveBlock2Ptr->apprentices[i];
|
||||
u32 checksum = 0;
|
||||
|
||||
@@ -0,0 +1,982 @@
|
||||
// data/text/apprentice.inc
|
||||
extern const u8 gText_ApprenticePleaseTeach0[];
|
||||
extern const u8 gText_ApprenticePleaseTeach1[];
|
||||
extern const u8 gText_ApprenticePleaseTeach2[];
|
||||
extern const u8 gText_ApprenticePleaseTeach3[];
|
||||
extern const u8 gText_ApprenticePleaseTeach4[];
|
||||
extern const u8 gText_ApprenticePleaseTeach5[];
|
||||
extern const u8 gText_ApprenticePleaseTeach6[];
|
||||
extern const u8 gText_ApprenticePleaseTeach7[];
|
||||
extern const u8 gText_ApprenticePleaseTeach8[];
|
||||
extern const u8 gText_ApprenticePleaseTeach9[];
|
||||
extern const u8 gText_ApprenticePleaseTeach10[];
|
||||
extern const u8 gText_ApprenticePleaseTeach11[];
|
||||
extern const u8 gText_ApprenticePleaseTeach12[];
|
||||
extern const u8 gText_ApprenticePleaseTeach13[];
|
||||
extern const u8 gText_ApprenticePleaseTeach14[];
|
||||
extern const u8 gText_ApprenticePleaseTeach15[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching0[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching1[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching2[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching3[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching4[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching5[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching6[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching7[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching8[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching9[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching10[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching11[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching12[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching13[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching14[];
|
||||
extern const u8 gText_ApprenticeRejectTeaching15[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode0[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode1[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode2[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode3[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode4[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode5[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode6[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode7[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode8[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode9[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode10[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode11[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode12[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode13[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode14[];
|
||||
extern const u8 gText_ApprenticeWhichLevelMode15[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks0[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks1[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks2[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks3[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks4[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks5[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks6[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks7[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks8[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks9[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks10[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks11[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks12[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks13[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks14[];
|
||||
extern const u8 gText_ApprenticeLevelModeThanks15[];
|
||||
|
||||
extern const u8 gText_ApprenticeWhichMon0[];
|
||||
extern const u8 gText_ApprenticeWhichMon1[];
|
||||
extern const u8 gText_ApprenticeWhichMon2[];
|
||||
extern const u8 gText_ApprenticeWhichMon3[];
|
||||
extern const u8 gText_ApprenticeWhichMon4[];
|
||||
extern const u8 gText_ApprenticeWhichMon5[];
|
||||
extern const u8 gText_ApprenticeWhichMon6[];
|
||||
extern const u8 gText_ApprenticeWhichMon7[];
|
||||
extern const u8 gText_ApprenticeWhichMon8[];
|
||||
extern const u8 gText_ApprenticeWhichMon9[];
|
||||
extern const u8 gText_ApprenticeWhichMon10[];
|
||||
extern const u8 gText_ApprenticeWhichMon11[];
|
||||
extern const u8 gText_ApprenticeWhichMon12[];
|
||||
extern const u8 gText_ApprenticeWhichMon13[];
|
||||
extern const u8 gText_ApprenticeWhichMon14[];
|
||||
extern const u8 gText_ApprenticeWhichMon15[];
|
||||
extern const u8 gText_ApprenticeMonThanks0[];
|
||||
extern const u8 gText_ApprenticeMonThanks1[];
|
||||
extern const u8 gText_ApprenticeMonThanks2[];
|
||||
extern const u8 gText_ApprenticeMonThanks3[];
|
||||
extern const u8 gText_ApprenticeMonThanks4[];
|
||||
extern const u8 gText_ApprenticeMonThanks5[];
|
||||
extern const u8 gText_ApprenticeMonThanks6[];
|
||||
extern const u8 gText_ApprenticeMonThanks7[];
|
||||
extern const u8 gText_ApprenticeMonThanks8[];
|
||||
extern const u8 gText_ApprenticeMonThanks9[];
|
||||
extern const u8 gText_ApprenticeMonThanks10[];
|
||||
extern const u8 gText_ApprenticeMonThanks11[];
|
||||
extern const u8 gText_ApprenticeMonThanks12[];
|
||||
extern const u8 gText_ApprenticeMonThanks13[];
|
||||
extern const u8 gText_ApprenticeMonThanks14[];
|
||||
extern const u8 gText_ApprenticeMonThanks15[];
|
||||
|
||||
extern const u8 gText_ApprenticeWhatHeldItem0[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem1[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem2[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem3[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem4[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem5[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem6[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem7[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem8[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem9[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem10[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem11[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem12[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem13[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem14[];
|
||||
extern const u8 gText_ApprenticeWhatHeldItem15[];
|
||||
extern const u8 gText_ApprenticeHoldNothing0[];
|
||||
extern const u8 gText_ApprenticeHoldNothing1[];
|
||||
extern const u8 gText_ApprenticeHoldNothing2[];
|
||||
extern const u8 gText_ApprenticeHoldNothing3[];
|
||||
extern const u8 gText_ApprenticeHoldNothing4[];
|
||||
extern const u8 gText_ApprenticeHoldNothing5[];
|
||||
extern const u8 gText_ApprenticeHoldNothing6[];
|
||||
extern const u8 gText_ApprenticeHoldNothing7[];
|
||||
extern const u8 gText_ApprenticeHoldNothing8[];
|
||||
extern const u8 gText_ApprenticeHoldNothing9[];
|
||||
extern const u8 gText_ApprenticeHoldNothing10[];
|
||||
extern const u8 gText_ApprenticeHoldNothing11[];
|
||||
extern const u8 gText_ApprenticeHoldNothing12[];
|
||||
extern const u8 gText_ApprenticeHoldNothing13[];
|
||||
extern const u8 gText_ApprenticeHoldNothing14[];
|
||||
extern const u8 gText_ApprenticeHoldNothing15[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem0[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem1[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem2[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem3[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem4[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem5[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem6[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem7[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem8[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem9[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem10[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem11[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem12[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem13[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem14[];
|
||||
extern const u8 gText_ApprenticeThanksNoHeldItem15[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem0[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem1[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem2[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem3[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem4[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem5[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem6[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem7[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem8[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem9[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem10[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem11[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem12[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem13[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem14[];
|
||||
extern const u8 gText_ApprenticeThanksHeldItem15[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended0[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended1[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended2[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended3[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended4[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended5[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended6[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended7[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended8[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended9[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended10[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended11[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended12[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended13[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended14[];
|
||||
extern const u8 gText_ApprenticeItemAlreadyRecommended15[];
|
||||
|
||||
extern const u8 gText_ApprenticeWhichMove0[];
|
||||
extern const u8 gText_ApprenticeWhichMove1[];
|
||||
extern const u8 gText_ApprenticeWhichMove2[];
|
||||
extern const u8 gText_ApprenticeWhichMove3[];
|
||||
extern const u8 gText_ApprenticeWhichMove4[];
|
||||
extern const u8 gText_ApprenticeWhichMove5[];
|
||||
extern const u8 gText_ApprenticeWhichMove6[];
|
||||
extern const u8 gText_ApprenticeWhichMove7[];
|
||||
extern const u8 gText_ApprenticeWhichMove8[];
|
||||
extern const u8 gText_ApprenticeWhichMove9[];
|
||||
extern const u8 gText_ApprenticeWhichMove10[];
|
||||
extern const u8 gText_ApprenticeWhichMove11[];
|
||||
extern const u8 gText_ApprenticeWhichMove12[];
|
||||
extern const u8 gText_ApprenticeWhichMove13[];
|
||||
extern const u8 gText_ApprenticeWhichMove14[];
|
||||
extern const u8 gText_ApprenticeWhichMove15[];
|
||||
extern const u8 gText_ApprenticeMoveThanks0[];
|
||||
extern const u8 gText_ApprenticeMoveThanks1[];
|
||||
extern const u8 gText_ApprenticeMoveThanks2[];
|
||||
extern const u8 gText_ApprenticeMoveThanks3[];
|
||||
extern const u8 gText_ApprenticeMoveThanks4[];
|
||||
extern const u8 gText_ApprenticeMoveThanks5[];
|
||||
extern const u8 gText_ApprenticeMoveThanks6[];
|
||||
extern const u8 gText_ApprenticeMoveThanks7[];
|
||||
extern const u8 gText_ApprenticeMoveThanks8[];
|
||||
extern const u8 gText_ApprenticeMoveThanks9[];
|
||||
extern const u8 gText_ApprenticeMoveThanks10[];
|
||||
extern const u8 gText_ApprenticeMoveThanks11[];
|
||||
extern const u8 gText_ApprenticeMoveThanks12[];
|
||||
extern const u8 gText_ApprenticeMoveThanks13[];
|
||||
extern const u8 gText_ApprenticeMoveThanks14[];
|
||||
extern const u8 gText_ApprenticeMoveThanks15[];
|
||||
|
||||
extern const u8 gText_ApprenticeWhichMonFirst0[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst1[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst2[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst3[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst4[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst5[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst6[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst7[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst8[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst9[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst10[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst11[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst12[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst13[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst14[];
|
||||
extern const u8 gText_ApprenticeWhichMonFirst15[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks0[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks1[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks2[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks3[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks4[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks5[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks6[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks7[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks8[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks9[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks10[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks11[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks12[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks13[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks14[];
|
||||
extern const u8 gText_ApprenticeMonFirstThanks15[];
|
||||
|
||||
extern const u8 gText_ApprenticePickWinSpeech0[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech1[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech2[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech3[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech4[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech5[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech6[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech7[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech8[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech9[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech10[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech11[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech12[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech13[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech14[];
|
||||
extern const u8 gText_ApprenticePickWinSpeech15[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks0[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks1[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks2[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks3[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks4[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks5[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks6[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks7[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks8[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks9[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks10[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks11[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks12[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks13[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks14[];
|
||||
extern const u8 gText_ApprenticeWinSpeechThanks15[];
|
||||
|
||||
extern const u8 gText_ApprenticeChallenge0[];
|
||||
extern const u8 gText_ApprenticeChallenge1[];
|
||||
extern const u8 gText_ApprenticeChallenge2[];
|
||||
extern const u8 gText_ApprenticeChallenge3[];
|
||||
extern const u8 gText_ApprenticeChallenge4[];
|
||||
extern const u8 gText_ApprenticeChallenge5[];
|
||||
extern const u8 gText_ApprenticeChallenge6[];
|
||||
extern const u8 gText_ApprenticeChallenge7[];
|
||||
extern const u8 gText_ApprenticeChallenge8[];
|
||||
extern const u8 gText_ApprenticeChallenge9[];
|
||||
extern const u8 gText_ApprenticeChallenge10[];
|
||||
extern const u8 gText_ApprenticeChallenge11[];
|
||||
extern const u8 gText_ApprenticeChallenge12[];
|
||||
extern const u8 gText_ApprenticeChallenge13[];
|
||||
extern const u8 gText_ApprenticeChallenge14[];
|
||||
extern const u8 gText_ApprenticeChallenge15[];
|
||||
|
||||
const struct ApprenticeTrainer gApprentices[NUM_APPRENTICES] =
|
||||
{
|
||||
{
|
||||
.name = {_("サダヒロ"), _("ALANN"), _("ALAIN"), _("ADELFO"), _("CLAUS"), _("TEO")},
|
||||
.otId = 0xBDC9,
|
||||
.facilityClass = FACILITY_CLASS_BUG_CATCHER,
|
||||
.species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT},
|
||||
.id = 0,
|
||||
.speechLost = {EC_WORD_NO, EC_WORD_MISTAKE, EC_WORD_EXCL, EC_WORD_I, EC_WORD_LOST, EC_WORD_BADLY},
|
||||
},
|
||||
{
|
||||
.name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")},
|
||||
.otId = 0xCF09,
|
||||
.facilityClass = FACILITY_CLASS_YOUNGSTER,
|
||||
.species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH},
|
||||
.id = 1,
|
||||
.speechLost = {EC_WORD_OKAY, EC_WORD_I, EC_WORD_LOST, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MASTER},
|
||||
},
|
||||
{
|
||||
.name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")},
|
||||
.otId = 0x2E34,
|
||||
.facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
|
||||
.species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP},
|
||||
.id = 2,
|
||||
.speechLost = {EC_WORD_I, EC_WORD_WENT, EC_WORD_AND, EC_WORD_LOST, EC_WORD_AWW, EC_WORD_ELLIPSIS},
|
||||
},
|
||||
{
|
||||
.name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")},
|
||||
.otId = 0x84EF,
|
||||
.facilityClass = FACILITY_CLASS_LASS,
|
||||
.species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA},
|
||||
.id = 3,
|
||||
.speechLost = {EC_WORD_IS, EC_WORD_THIS, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_QUES, 0xFFFF},
|
||||
},
|
||||
{
|
||||
.name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")},
|
||||
.otId = 0x1E43,
|
||||
.facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
|
||||
.species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY},
|
||||
.id = 4,
|
||||
.speechLost = {EC_WORD_THIS, EC_WORD_WON_T, EC_WORD_BE, EC_WORD_HAPPENING, EC_WORD_NEXT, EC_WORD_TIME},
|
||||
},
|
||||
{
|
||||
.name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")},
|
||||
.otId = 0x379F,
|
||||
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
|
||||
.species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA},
|
||||
.id = 5,
|
||||
.speechLost = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_RUN, EC_WORD_BYE_BYE, EC_WORD_EXCL},
|
||||
},
|
||||
{
|
||||
.name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")},
|
||||
.otId = 0xF555,
|
||||
.facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
|
||||
.species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO},
|
||||
.id = 6,
|
||||
.speechLost = {EC_WORD_AHAHA, EC_WORD_DEFEATED, EC_WORD_EXCL, EC_WORD_IT_S, EC_WORD_NOTHING, EC_WORD_EXCL},
|
||||
},
|
||||
{
|
||||
.name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")},
|
||||
.otId = 0x8D26,
|
||||
.facilityClass = FACILITY_CLASS_BEAUTY,
|
||||
.species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC},
|
||||
.id = 7,
|
||||
.speechLost = {EC_WORD_YOU_RE, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
|
||||
},
|
||||
{
|
||||
.name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")},
|
||||
.otId = 0x800C,
|
||||
.facilityClass = FACILITY_CLASS_AROMA_LADY,
|
||||
.species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY},
|
||||
.id = 8,
|
||||
.speechLost = {EC_WORD_WHAT, EC_WORD_TOUGH, EC_WORD_POKEMON, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_EXCL},
|
||||
},
|
||||
{
|
||||
.name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")},
|
||||
.otId = 0x469f,
|
||||
.facilityClass = FACILITY_CLASS_HIKER,
|
||||
.species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON},
|
||||
.id = 9,
|
||||
.speechLost = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_JUST, EC_WORD_SHREDDED, EC_WORD_ELLIPSIS, 0xFFFF},
|
||||
},
|
||||
{
|
||||
.name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")},
|
||||
.otId = 0x71FC,
|
||||
.facilityClass = FACILITY_CLASS_FISHERMAN,
|
||||
.species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA},
|
||||
.id = 10,
|
||||
.speechLost = {EC_WORD_YOUR, EC_WORD_WIN, EC_WORD_ANGERS, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
|
||||
},
|
||||
{
|
||||
.name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")},
|
||||
.otId = 0xA39E,
|
||||
.facilityClass = FACILITY_CLASS_SAILOR,
|
||||
.species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE},
|
||||
.id = 11,
|
||||
.speechLost = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_MOVE(CUT), EC_WORD_ME, EC_WORD_DEEP, EC_WORD_OK_QUES},
|
||||
},
|
||||
{
|
||||
.name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")},
|
||||
.otId = 0xE590,
|
||||
.facilityClass = FACILITY_CLASS_GUITARIST,
|
||||
.species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING},
|
||||
.id = 12,
|
||||
.speechLost = {EC_WORD_A, EC_WORD_LOSS, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_THIS, EC_WORD_IS},
|
||||
},
|
||||
{
|
||||
.name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")},
|
||||
.otId = 0xD018,
|
||||
.facilityClass = FACILITY_CLASS_BLACK_BELT,
|
||||
.species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING},
|
||||
.id = 13,
|
||||
.speechLost = {EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_WORD_AND, EC_WORD_LOW, EC_WORD_OF, EC_WORD_POWER},
|
||||
},
|
||||
{
|
||||
.name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")},
|
||||
.otId = 0xBC75,
|
||||
.facilityClass = FACILITY_CLASS_RUIN_MANIAC,
|
||||
.species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM},
|
||||
.id = 14,
|
||||
.speechLost = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_UNDERSTAND, EC_WORD_WHAT, EC_WORD_IS, EC_WORD_HAPPENING},
|
||||
},
|
||||
{
|
||||
.name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")},
|
||||
.otId = 0xFA02,
|
||||
.facilityClass = FACILITY_CLASS_GENTLEMAN,
|
||||
.species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS},
|
||||
.id = 15,
|
||||
.speechLost = {EC_WORD_THIS, EC_WORD_HAS, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_LIE},
|
||||
},
|
||||
};
|
||||
|
||||
// Sequence of 4 messages for the first meeting with the apprentice
|
||||
static const u8 *const sApprenticeFirstMeetingTexts[NUM_APPRENTICES][4] =
|
||||
{
|
||||
{gText_ApprenticePleaseTeach0, gText_ApprenticeRejectTeaching0, gText_ApprenticeWhichLevelMode0, gText_ApprenticeLevelModeThanks0},
|
||||
{gText_ApprenticePleaseTeach1, gText_ApprenticeRejectTeaching1, gText_ApprenticeWhichLevelMode1, gText_ApprenticeLevelModeThanks1},
|
||||
{gText_ApprenticePleaseTeach2, gText_ApprenticeRejectTeaching2, gText_ApprenticeWhichLevelMode2, gText_ApprenticeLevelModeThanks2},
|
||||
{gText_ApprenticePleaseTeach3, gText_ApprenticeRejectTeaching3, gText_ApprenticeWhichLevelMode3, gText_ApprenticeLevelModeThanks3},
|
||||
{gText_ApprenticePleaseTeach4, gText_ApprenticeRejectTeaching4, gText_ApprenticeWhichLevelMode4, gText_ApprenticeLevelModeThanks4},
|
||||
{gText_ApprenticePleaseTeach5, gText_ApprenticeRejectTeaching5, gText_ApprenticeWhichLevelMode5, gText_ApprenticeLevelModeThanks5},
|
||||
{gText_ApprenticePleaseTeach6, gText_ApprenticeRejectTeaching6, gText_ApprenticeWhichLevelMode6, gText_ApprenticeLevelModeThanks6},
|
||||
{gText_ApprenticePleaseTeach7, gText_ApprenticeRejectTeaching7, gText_ApprenticeWhichLevelMode7, gText_ApprenticeLevelModeThanks7},
|
||||
{gText_ApprenticePleaseTeach8, gText_ApprenticeRejectTeaching8, gText_ApprenticeWhichLevelMode8, gText_ApprenticeLevelModeThanks8},
|
||||
{gText_ApprenticePleaseTeach9, gText_ApprenticeRejectTeaching9, gText_ApprenticeWhichLevelMode9, gText_ApprenticeLevelModeThanks9},
|
||||
{gText_ApprenticePleaseTeach10, gText_ApprenticeRejectTeaching10, gText_ApprenticeWhichLevelMode10, gText_ApprenticeLevelModeThanks10},
|
||||
{gText_ApprenticePleaseTeach11, gText_ApprenticeRejectTeaching11, gText_ApprenticeWhichLevelMode11, gText_ApprenticeLevelModeThanks11},
|
||||
{gText_ApprenticePleaseTeach12, gText_ApprenticeRejectTeaching12, gText_ApprenticeWhichLevelMode12, gText_ApprenticeLevelModeThanks12},
|
||||
{gText_ApprenticePleaseTeach13, gText_ApprenticeRejectTeaching13, gText_ApprenticeWhichLevelMode13, gText_ApprenticeLevelModeThanks13},
|
||||
{gText_ApprenticePleaseTeach14, gText_ApprenticeRejectTeaching14, gText_ApprenticeWhichLevelMode14, gText_ApprenticeLevelModeThanks14},
|
||||
{gText_ApprenticePleaseTeach15, gText_ApprenticeRejectTeaching15, gText_ApprenticeWhichLevelMode15, gText_ApprenticeLevelModeThanks15},
|
||||
};
|
||||
|
||||
static const u8 *const sApprenticeWhichMonTexts[NUM_APPRENTICES][2] =
|
||||
{
|
||||
{gText_ApprenticeWhichMon0, gText_ApprenticeMonThanks0},
|
||||
{gText_ApprenticeWhichMon1, gText_ApprenticeMonThanks1},
|
||||
{gText_ApprenticeWhichMon2, gText_ApprenticeMonThanks2},
|
||||
{gText_ApprenticeWhichMon3, gText_ApprenticeMonThanks3},
|
||||
{gText_ApprenticeWhichMon4, gText_ApprenticeMonThanks4},
|
||||
{gText_ApprenticeWhichMon5, gText_ApprenticeMonThanks5},
|
||||
{gText_ApprenticeWhichMon6, gText_ApprenticeMonThanks6},
|
||||
{gText_ApprenticeWhichMon7, gText_ApprenticeMonThanks7},
|
||||
{gText_ApprenticeWhichMon8, gText_ApprenticeMonThanks8},
|
||||
{gText_ApprenticeWhichMon9, gText_ApprenticeMonThanks9},
|
||||
{gText_ApprenticeWhichMon10, gText_ApprenticeMonThanks10},
|
||||
{gText_ApprenticeWhichMon11, gText_ApprenticeMonThanks11},
|
||||
{gText_ApprenticeWhichMon12, gText_ApprenticeMonThanks12},
|
||||
{gText_ApprenticeWhichMon13, gText_ApprenticeMonThanks13},
|
||||
{gText_ApprenticeWhichMon14, gText_ApprenticeMonThanks14},
|
||||
{gText_ApprenticeWhichMon15, gText_ApprenticeMonThanks15},
|
||||
};
|
||||
|
||||
// Sequence of 5 messages for suggesting a held item to the apprentice
|
||||
static const u8 *const sApprenticeHeldItemTexts[NUM_APPRENTICES][5] =
|
||||
{
|
||||
{gText_ApprenticeWhatHeldItem0, gText_ApprenticeHoldNothing0, gText_ApprenticeThanksNoHeldItem0, gText_ApprenticeThanksHeldItem0, gText_ApprenticeItemAlreadyRecommended0},
|
||||
{gText_ApprenticeWhatHeldItem1, gText_ApprenticeHoldNothing1, gText_ApprenticeThanksNoHeldItem1, gText_ApprenticeThanksHeldItem1, gText_ApprenticeItemAlreadyRecommended1},
|
||||
{gText_ApprenticeWhatHeldItem2, gText_ApprenticeHoldNothing2, gText_ApprenticeThanksNoHeldItem2, gText_ApprenticeThanksHeldItem2, gText_ApprenticeItemAlreadyRecommended2},
|
||||
{gText_ApprenticeWhatHeldItem3, gText_ApprenticeHoldNothing3, gText_ApprenticeThanksNoHeldItem3, gText_ApprenticeThanksHeldItem3, gText_ApprenticeItemAlreadyRecommended3},
|
||||
{gText_ApprenticeWhatHeldItem4, gText_ApprenticeHoldNothing4, gText_ApprenticeThanksNoHeldItem4, gText_ApprenticeThanksHeldItem4, gText_ApprenticeItemAlreadyRecommended4},
|
||||
{gText_ApprenticeWhatHeldItem5, gText_ApprenticeHoldNothing5, gText_ApprenticeThanksNoHeldItem5, gText_ApprenticeThanksHeldItem5, gText_ApprenticeItemAlreadyRecommended5},
|
||||
{gText_ApprenticeWhatHeldItem6, gText_ApprenticeHoldNothing6, gText_ApprenticeThanksNoHeldItem6, gText_ApprenticeThanksHeldItem6, gText_ApprenticeItemAlreadyRecommended6},
|
||||
{gText_ApprenticeWhatHeldItem7, gText_ApprenticeHoldNothing7, gText_ApprenticeThanksNoHeldItem7, gText_ApprenticeThanksHeldItem7, gText_ApprenticeItemAlreadyRecommended7},
|
||||
{gText_ApprenticeWhatHeldItem8, gText_ApprenticeHoldNothing8, gText_ApprenticeThanksNoHeldItem8, gText_ApprenticeThanksHeldItem8, gText_ApprenticeItemAlreadyRecommended8},
|
||||
{gText_ApprenticeWhatHeldItem9, gText_ApprenticeHoldNothing9, gText_ApprenticeThanksNoHeldItem9, gText_ApprenticeThanksHeldItem9, gText_ApprenticeItemAlreadyRecommended9},
|
||||
{gText_ApprenticeWhatHeldItem10, gText_ApprenticeHoldNothing10, gText_ApprenticeThanksNoHeldItem10, gText_ApprenticeThanksHeldItem10, gText_ApprenticeItemAlreadyRecommended10},
|
||||
{gText_ApprenticeWhatHeldItem11, gText_ApprenticeHoldNothing11, gText_ApprenticeThanksNoHeldItem11, gText_ApprenticeThanksHeldItem11, gText_ApprenticeItemAlreadyRecommended11},
|
||||
{gText_ApprenticeWhatHeldItem12, gText_ApprenticeHoldNothing12, gText_ApprenticeThanksNoHeldItem12, gText_ApprenticeThanksHeldItem12, gText_ApprenticeItemAlreadyRecommended12},
|
||||
{gText_ApprenticeWhatHeldItem13, gText_ApprenticeHoldNothing13, gText_ApprenticeThanksNoHeldItem13, gText_ApprenticeThanksHeldItem13, gText_ApprenticeItemAlreadyRecommended13},
|
||||
{gText_ApprenticeWhatHeldItem14, gText_ApprenticeHoldNothing14, gText_ApprenticeThanksNoHeldItem14, gText_ApprenticeThanksHeldItem14, gText_ApprenticeItemAlreadyRecommended14},
|
||||
{gText_ApprenticeWhatHeldItem15, gText_ApprenticeHoldNothing15, gText_ApprenticeThanksNoHeldItem15, gText_ApprenticeThanksHeldItem15, gText_ApprenticeItemAlreadyRecommended15},
|
||||
};
|
||||
|
||||
static const u8 *const sApprenticeWhichMoveTexts[NUM_APPRENTICES][2] =
|
||||
{
|
||||
{gText_ApprenticeWhichMove0, gText_ApprenticeMoveThanks0},
|
||||
{gText_ApprenticeWhichMove1, gText_ApprenticeMoveThanks1},
|
||||
{gText_ApprenticeWhichMove2, gText_ApprenticeMoveThanks2},
|
||||
{gText_ApprenticeWhichMove3, gText_ApprenticeMoveThanks3},
|
||||
{gText_ApprenticeWhichMove4, gText_ApprenticeMoveThanks4},
|
||||
{gText_ApprenticeWhichMove5, gText_ApprenticeMoveThanks5},
|
||||
{gText_ApprenticeWhichMove6, gText_ApprenticeMoveThanks6},
|
||||
{gText_ApprenticeWhichMove7, gText_ApprenticeMoveThanks7},
|
||||
{gText_ApprenticeWhichMove8, gText_ApprenticeMoveThanks8},
|
||||
{gText_ApprenticeWhichMove9, gText_ApprenticeMoveThanks9},
|
||||
{gText_ApprenticeWhichMove10, gText_ApprenticeMoveThanks10},
|
||||
{gText_ApprenticeWhichMove11, gText_ApprenticeMoveThanks11},
|
||||
{gText_ApprenticeWhichMove12, gText_ApprenticeMoveThanks12},
|
||||
{gText_ApprenticeWhichMove13, gText_ApprenticeMoveThanks13},
|
||||
{gText_ApprenticeWhichMove14, gText_ApprenticeMoveThanks14},
|
||||
{gText_ApprenticeWhichMove15, gText_ApprenticeMoveThanks15},
|
||||
};
|
||||
|
||||
static const u8 *const sApprenticeWhichMonFirstTexts[NUM_APPRENTICES][2] =
|
||||
{
|
||||
{gText_ApprenticeWhichMonFirst0, gText_ApprenticeMonFirstThanks0},
|
||||
{gText_ApprenticeWhichMonFirst1, gText_ApprenticeMonFirstThanks1},
|
||||
{gText_ApprenticeWhichMonFirst2, gText_ApprenticeMonFirstThanks2},
|
||||
{gText_ApprenticeWhichMonFirst3, gText_ApprenticeMonFirstThanks3},
|
||||
{gText_ApprenticeWhichMonFirst4, gText_ApprenticeMonFirstThanks4},
|
||||
{gText_ApprenticeWhichMonFirst5, gText_ApprenticeMonFirstThanks5},
|
||||
{gText_ApprenticeWhichMonFirst6, gText_ApprenticeMonFirstThanks6},
|
||||
{gText_ApprenticeWhichMonFirst7, gText_ApprenticeMonFirstThanks7},
|
||||
{gText_ApprenticeWhichMonFirst8, gText_ApprenticeMonFirstThanks8},
|
||||
{gText_ApprenticeWhichMonFirst9, gText_ApprenticeMonFirstThanks9},
|
||||
{gText_ApprenticeWhichMonFirst10, gText_ApprenticeMonFirstThanks10},
|
||||
{gText_ApprenticeWhichMonFirst11, gText_ApprenticeMonFirstThanks11},
|
||||
{gText_ApprenticeWhichMonFirst12, gText_ApprenticeMonFirstThanks12},
|
||||
{gText_ApprenticeWhichMonFirst13, gText_ApprenticeMonFirstThanks13},
|
||||
{gText_ApprenticeWhichMonFirst14, gText_ApprenticeMonFirstThanks14},
|
||||
{gText_ApprenticeWhichMonFirst15, gText_ApprenticeMonFirstThanks15},
|
||||
};
|
||||
|
||||
static const u8 *const sApprenticePickWinSpeechTexts[NUM_APPRENTICES][2] =
|
||||
{
|
||||
{gText_ApprenticePickWinSpeech0, gText_ApprenticeWinSpeechThanks0},
|
||||
{gText_ApprenticePickWinSpeech1, gText_ApprenticeWinSpeechThanks1},
|
||||
{gText_ApprenticePickWinSpeech2, gText_ApprenticeWinSpeechThanks2},
|
||||
{gText_ApprenticePickWinSpeech3, gText_ApprenticeWinSpeechThanks3},
|
||||
{gText_ApprenticePickWinSpeech4, gText_ApprenticeWinSpeechThanks4},
|
||||
{gText_ApprenticePickWinSpeech5, gText_ApprenticeWinSpeechThanks5},
|
||||
{gText_ApprenticePickWinSpeech6, gText_ApprenticeWinSpeechThanks6},
|
||||
{gText_ApprenticePickWinSpeech7, gText_ApprenticeWinSpeechThanks7},
|
||||
{gText_ApprenticePickWinSpeech8, gText_ApprenticeWinSpeechThanks8},
|
||||
{gText_ApprenticePickWinSpeech9, gText_ApprenticeWinSpeechThanks9},
|
||||
{gText_ApprenticePickWinSpeech10, gText_ApprenticeWinSpeechThanks10},
|
||||
{gText_ApprenticePickWinSpeech11, gText_ApprenticeWinSpeechThanks11},
|
||||
{gText_ApprenticePickWinSpeech12, gText_ApprenticeWinSpeechThanks12},
|
||||
{gText_ApprenticePickWinSpeech13, gText_ApprenticeWinSpeechThanks13},
|
||||
{gText_ApprenticePickWinSpeech14, gText_ApprenticeWinSpeechThanks14},
|
||||
{gText_ApprenticePickWinSpeech15, gText_ApprenticeWinSpeechThanks15},
|
||||
};
|
||||
|
||||
static const u8 *const sApprenticeChallengeTexts[NUM_APPRENTICES] =
|
||||
{
|
||||
gText_ApprenticeChallenge0,
|
||||
gText_ApprenticeChallenge1,
|
||||
gText_ApprenticeChallenge2,
|
||||
gText_ApprenticeChallenge3,
|
||||
gText_ApprenticeChallenge4,
|
||||
gText_ApprenticeChallenge5,
|
||||
gText_ApprenticeChallenge6,
|
||||
gText_ApprenticeChallenge7,
|
||||
gText_ApprenticeChallenge8,
|
||||
gText_ApprenticeChallenge9,
|
||||
gText_ApprenticeChallenge10,
|
||||
gText_ApprenticeChallenge11,
|
||||
gText_ApprenticeChallenge12,
|
||||
gText_ApprenticeChallenge13,
|
||||
gText_ApprenticeChallenge14,
|
||||
gText_ApprenticeChallenge15,
|
||||
};
|
||||
|
||||
// Unclear what the criteria are for valid moves
|
||||
// Notably, a large percentage of multi-strike moves are not valid
|
||||
static const bool8 sValidApprenticeMoves[MOVES_COUNT] =
|
||||
{
|
||||
[MOVE_NONE] = FALSE,
|
||||
[MOVE_POUND] = FALSE,
|
||||
[MOVE_KARATE_CHOP] = TRUE,
|
||||
[MOVE_DOUBLE_SLAP] = TRUE,
|
||||
[MOVE_COMET_PUNCH] = FALSE,
|
||||
[MOVE_MEGA_PUNCH] = TRUE,
|
||||
[MOVE_PAY_DAY] = FALSE,
|
||||
[MOVE_FIRE_PUNCH] = TRUE,
|
||||
[MOVE_ICE_PUNCH] = TRUE,
|
||||
[MOVE_THUNDER_PUNCH] = TRUE,
|
||||
[MOVE_SCRATCH] = FALSE,
|
||||
[MOVE_VICE_GRIP] = FALSE,
|
||||
[MOVE_GUILLOTINE] = TRUE,
|
||||
[MOVE_RAZOR_WIND] = FALSE,
|
||||
[MOVE_SWORDS_DANCE] = TRUE,
|
||||
[MOVE_CUT] = FALSE,
|
||||
[MOVE_GUST] = FALSE,
|
||||
[MOVE_WING_ATTACK] = FALSE,
|
||||
[MOVE_WHIRLWIND] = TRUE,
|
||||
[MOVE_FLY] = TRUE,
|
||||
[MOVE_BIND] = TRUE,
|
||||
[MOVE_SLAM] = TRUE,
|
||||
[MOVE_VINE_WHIP] = FALSE,
|
||||
[MOVE_STOMP] = TRUE,
|
||||
[MOVE_DOUBLE_KICK] = TRUE,
|
||||
[MOVE_MEGA_KICK] = TRUE,
|
||||
[MOVE_JUMP_KICK] = TRUE,
|
||||
[MOVE_ROLLING_KICK] = TRUE,
|
||||
[MOVE_SAND_ATTACK] = TRUE,
|
||||
[MOVE_HEADBUTT] = TRUE,
|
||||
[MOVE_HORN_ATTACK] = FALSE,
|
||||
[MOVE_FURY_ATTACK] = FALSE,
|
||||
[MOVE_HORN_DRILL] = TRUE,
|
||||
[MOVE_TACKLE] = FALSE,
|
||||
[MOVE_BODY_SLAM] = TRUE,
|
||||
[MOVE_WRAP] = TRUE,
|
||||
[MOVE_TAKE_DOWN] = TRUE,
|
||||
[MOVE_THRASH] = TRUE,
|
||||
[MOVE_DOUBLE_EDGE] = TRUE,
|
||||
[MOVE_TAIL_WHIP] = FALSE,
|
||||
[MOVE_POISON_STING] = FALSE,
|
||||
[MOVE_TWINEEDLE] = TRUE,
|
||||
[MOVE_PIN_MISSILE] = FALSE,
|
||||
[MOVE_LEER] = FALSE,
|
||||
[MOVE_BITE] = TRUE,
|
||||
[MOVE_GROWL] = FALSE,
|
||||
[MOVE_ROAR] = TRUE,
|
||||
[MOVE_SING] = TRUE,
|
||||
[MOVE_SUPERSONIC] = TRUE,
|
||||
[MOVE_SONIC_BOOM] = TRUE,
|
||||
[MOVE_DISABLE] = TRUE,
|
||||
[MOVE_ACID] = FALSE,
|
||||
[MOVE_EMBER] = FALSE,
|
||||
[MOVE_FLAMETHROWER] = TRUE,
|
||||
[MOVE_MIST] = TRUE,
|
||||
[MOVE_WATER_GUN] = FALSE,
|
||||
[MOVE_HYDRO_PUMP] = TRUE,
|
||||
[MOVE_SURF] = TRUE,
|
||||
[MOVE_ICE_BEAM] = TRUE,
|
||||
[MOVE_BLIZZARD] = TRUE,
|
||||
[MOVE_PSYBEAM] = TRUE,
|
||||
[MOVE_BUBBLE_BEAM] = FALSE,
|
||||
[MOVE_AURORA_BEAM] = FALSE,
|
||||
[MOVE_HYPER_BEAM] = TRUE,
|
||||
[MOVE_PECK] = FALSE,
|
||||
[MOVE_DRILL_PECK] = TRUE,
|
||||
[MOVE_SUBMISSION] = TRUE,
|
||||
[MOVE_LOW_KICK] = TRUE,
|
||||
[MOVE_COUNTER] = TRUE,
|
||||
[MOVE_SEISMIC_TOSS] = TRUE,
|
||||
[MOVE_STRENGTH] = TRUE,
|
||||
[MOVE_ABSORB] = FALSE,
|
||||
[MOVE_MEGA_DRAIN] = FALSE,
|
||||
[MOVE_LEECH_SEED] = TRUE,
|
||||
[MOVE_GROWTH] = TRUE,
|
||||
[MOVE_RAZOR_LEAF] = TRUE,
|
||||
[MOVE_SOLAR_BEAM] = TRUE,
|
||||
[MOVE_POISON_POWDER] = TRUE,
|
||||
[MOVE_STUN_SPORE] = TRUE,
|
||||
[MOVE_SLEEP_POWDER] = TRUE,
|
||||
[MOVE_PETAL_DANCE] = TRUE,
|
||||
[MOVE_STRING_SHOT] = FALSE,
|
||||
[MOVE_DRAGON_RAGE] = TRUE,
|
||||
[MOVE_FIRE_SPIN] = TRUE,
|
||||
[MOVE_THUNDER_SHOCK] = FALSE,
|
||||
[MOVE_THUNDERBOLT] = TRUE,
|
||||
[MOVE_THUNDER_WAVE] = TRUE,
|
||||
[MOVE_THUNDER] = TRUE,
|
||||
[MOVE_ROCK_THROW] = FALSE,
|
||||
[MOVE_EARTHQUAKE] = TRUE,
|
||||
[MOVE_FISSURE] = TRUE,
|
||||
[MOVE_DIG] = TRUE,
|
||||
[MOVE_TOXIC] = TRUE,
|
||||
[MOVE_CONFUSION] = FALSE,
|
||||
[MOVE_PSYCHIC] = TRUE,
|
||||
[MOVE_HYPNOSIS] = TRUE,
|
||||
[MOVE_MEDITATE] = TRUE,
|
||||
[MOVE_AGILITY] = TRUE,
|
||||
[MOVE_QUICK_ATTACK] = TRUE,
|
||||
[MOVE_RAGE] = FALSE,
|
||||
[MOVE_TELEPORT] = FALSE,
|
||||
[MOVE_NIGHT_SHADE] = TRUE,
|
||||
[MOVE_MIMIC] = TRUE,
|
||||
[MOVE_SCREECH] = TRUE,
|
||||
[MOVE_DOUBLE_TEAM] = TRUE,
|
||||
[MOVE_RECOVER] = TRUE,
|
||||
[MOVE_HARDEN] = TRUE,
|
||||
[MOVE_MINIMIZE] = TRUE,
|
||||
[MOVE_SMOKESCREEN] = TRUE,
|
||||
[MOVE_CONFUSE_RAY] = TRUE,
|
||||
[MOVE_WITHDRAW] = TRUE,
|
||||
[MOVE_DEFENSE_CURL] = TRUE,
|
||||
[MOVE_BARRIER] = TRUE,
|
||||
[MOVE_LIGHT_SCREEN] = TRUE,
|
||||
[MOVE_HAZE] = TRUE,
|
||||
[MOVE_REFLECT] = TRUE,
|
||||
[MOVE_FOCUS_ENERGY] = TRUE,
|
||||
[MOVE_BIDE] = FALSE,
|
||||
[MOVE_METRONOME] = TRUE,
|
||||
[MOVE_MIRROR_MOVE] = TRUE,
|
||||
[MOVE_SELF_DESTRUCT] = TRUE,
|
||||
[MOVE_EGG_BOMB] = TRUE,
|
||||
[MOVE_LICK] = TRUE,
|
||||
[MOVE_SMOG] = FALSE,
|
||||
[MOVE_SLUDGE] = FALSE,
|
||||
[MOVE_BONE_CLUB] = FALSE,
|
||||
[MOVE_FIRE_BLAST] = TRUE,
|
||||
[MOVE_WATERFALL] = TRUE,
|
||||
[MOVE_CLAMP] = TRUE,
|
||||
[MOVE_SWIFT] = TRUE,
|
||||
[MOVE_SKULL_BASH] = TRUE,
|
||||
[MOVE_SPIKE_CANNON] = FALSE,
|
||||
[MOVE_CONSTRICT] = FALSE,
|
||||
[MOVE_AMNESIA] = TRUE,
|
||||
[MOVE_KINESIS] = TRUE,
|
||||
[MOVE_SOFT_BOILED] = TRUE,
|
||||
[MOVE_HI_JUMP_KICK] = TRUE,
|
||||
[MOVE_GLARE] = TRUE,
|
||||
[MOVE_DREAM_EATER] = TRUE,
|
||||
[MOVE_POISON_GAS] = FALSE,
|
||||
[MOVE_BARRAGE] = FALSE,
|
||||
[MOVE_LEECH_LIFE] = FALSE,
|
||||
[MOVE_LOVELY_KISS] = TRUE,
|
||||
[MOVE_SKY_ATTACK] = TRUE,
|
||||
[MOVE_TRANSFORM] = TRUE,
|
||||
[MOVE_BUBBLE] = FALSE,
|
||||
[MOVE_DIZZY_PUNCH] = TRUE,
|
||||
[MOVE_SPORE] = TRUE,
|
||||
[MOVE_FLASH] = TRUE,
|
||||
[MOVE_PSYWAVE] = TRUE,
|
||||
[MOVE_SPLASH] = FALSE,
|
||||
[MOVE_ACID_ARMOR] = TRUE,
|
||||
[MOVE_CRABHAMMER] = TRUE,
|
||||
[MOVE_EXPLOSION] = TRUE,
|
||||
[MOVE_FURY_SWIPES] = FALSE,
|
||||
[MOVE_BONEMERANG] = TRUE,
|
||||
[MOVE_REST] = TRUE,
|
||||
[MOVE_ROCK_SLIDE] = TRUE,
|
||||
[MOVE_HYPER_FANG] = TRUE,
|
||||
[MOVE_SHARPEN] = TRUE,
|
||||
[MOVE_CONVERSION] = TRUE,
|
||||
[MOVE_TRI_ATTACK] = TRUE,
|
||||
[MOVE_SUPER_FANG] = TRUE,
|
||||
[MOVE_SLASH] = TRUE,
|
||||
[MOVE_SUBSTITUTE] = TRUE,
|
||||
[MOVE_STRUGGLE] = TRUE,
|
||||
[MOVE_SKETCH] = TRUE,
|
||||
[MOVE_TRIPLE_KICK] = TRUE,
|
||||
[MOVE_THIEF] = TRUE,
|
||||
[MOVE_SPIDER_WEB] = TRUE,
|
||||
[MOVE_MIND_READER] = TRUE,
|
||||
[MOVE_NIGHTMARE] = TRUE,
|
||||
[MOVE_FLAME_WHEEL] = FALSE,
|
||||
[MOVE_SNORE] = TRUE,
|
||||
[MOVE_CURSE] = TRUE,
|
||||
[MOVE_FLAIL] = TRUE,
|
||||
[MOVE_CONVERSION_2] = TRUE,
|
||||
[MOVE_AEROBLAST] = TRUE,
|
||||
[MOVE_COTTON_SPORE] = TRUE,
|
||||
[MOVE_REVERSAL] = TRUE,
|
||||
[MOVE_SPITE] = TRUE,
|
||||
[MOVE_POWDER_SNOW] = FALSE,
|
||||
[MOVE_PROTECT] = TRUE,
|
||||
[MOVE_MACH_PUNCH] = TRUE,
|
||||
[MOVE_SCARY_FACE] = TRUE,
|
||||
[MOVE_FAINT_ATTACK] = TRUE,
|
||||
[MOVE_SWEET_KISS] = TRUE,
|
||||
[MOVE_BELLY_DRUM] = TRUE,
|
||||
[MOVE_SLUDGE_BOMB] = TRUE,
|
||||
[MOVE_MUD_SLAP] = TRUE,
|
||||
[MOVE_OCTAZOOKA] = TRUE,
|
||||
[MOVE_SPIKES] = TRUE,
|
||||
[MOVE_ZAP_CANNON] = TRUE,
|
||||
[MOVE_FORESIGHT] = TRUE,
|
||||
[MOVE_DESTINY_BOND] = TRUE,
|
||||
[MOVE_PERISH_SONG] = TRUE,
|
||||
[MOVE_ICY_WIND] = TRUE,
|
||||
[MOVE_DETECT] = TRUE,
|
||||
[MOVE_BONE_RUSH] = FALSE,
|
||||
[MOVE_LOCK_ON] = TRUE,
|
||||
[MOVE_OUTRAGE] = TRUE,
|
||||
[MOVE_SANDSTORM] = TRUE,
|
||||
[MOVE_GIGA_DRAIN] = TRUE,
|
||||
[MOVE_ENDURE] = TRUE,
|
||||
[MOVE_CHARM] = TRUE,
|
||||
[MOVE_ROLLOUT] = TRUE,
|
||||
[MOVE_FALSE_SWIPE] = TRUE,
|
||||
[MOVE_SWAGGER] = TRUE,
|
||||
[MOVE_MILK_DRINK] = TRUE,
|
||||
[MOVE_SPARK] = FALSE,
|
||||
[MOVE_FURY_CUTTER] = TRUE,
|
||||
[MOVE_STEEL_WING] = TRUE,
|
||||
[MOVE_MEAN_LOOK] = TRUE,
|
||||
[MOVE_ATTRACT] = TRUE,
|
||||
[MOVE_SLEEP_TALK] = TRUE,
|
||||
[MOVE_HEAL_BELL] = TRUE,
|
||||
[MOVE_RETURN] = TRUE,
|
||||
[MOVE_PRESENT] = TRUE,
|
||||
[MOVE_FRUSTRATION] = TRUE,
|
||||
[MOVE_SAFEGUARD] = TRUE,
|
||||
[MOVE_PAIN_SPLIT] = TRUE,
|
||||
[MOVE_SACRED_FIRE] = TRUE,
|
||||
[MOVE_MAGNITUDE] = FALSE,
|
||||
[MOVE_DYNAMIC_PUNCH] = TRUE,
|
||||
[MOVE_MEGAHORN] = TRUE,
|
||||
[MOVE_DRAGON_BREATH] = TRUE,
|
||||
[MOVE_BATON_PASS] = TRUE,
|
||||
[MOVE_ENCORE] = TRUE,
|
||||
[MOVE_PURSUIT] = TRUE,
|
||||
[MOVE_RAPID_SPIN] = TRUE,
|
||||
[MOVE_SWEET_SCENT] = TRUE,
|
||||
[MOVE_IRON_TAIL] = TRUE,
|
||||
[MOVE_METAL_CLAW] = TRUE,
|
||||
[MOVE_VITAL_THROW] = TRUE,
|
||||
[MOVE_MORNING_SUN] = TRUE,
|
||||
[MOVE_SYNTHESIS] = TRUE,
|
||||
[MOVE_MOONLIGHT] = TRUE,
|
||||
[MOVE_HIDDEN_POWER] = TRUE,
|
||||
[MOVE_CROSS_CHOP] = TRUE,
|
||||
[MOVE_TWISTER] = FALSE,
|
||||
[MOVE_RAIN_DANCE] = TRUE,
|
||||
[MOVE_SUNNY_DAY] = TRUE,
|
||||
[MOVE_CRUNCH] = TRUE,
|
||||
[MOVE_MIRROR_COAT] = TRUE,
|
||||
[MOVE_PSYCH_UP] = TRUE,
|
||||
[MOVE_EXTREME_SPEED] = TRUE,
|
||||
[MOVE_ANCIENT_POWER] = TRUE,
|
||||
[MOVE_SHADOW_BALL] = TRUE,
|
||||
[MOVE_FUTURE_SIGHT] = TRUE,
|
||||
[MOVE_ROCK_SMASH] = TRUE,
|
||||
[MOVE_WHIRLPOOL] = TRUE,
|
||||
[MOVE_BEAT_UP] = TRUE,
|
||||
[MOVE_FAKE_OUT] = TRUE,
|
||||
[MOVE_UPROAR] = TRUE,
|
||||
[MOVE_STOCKPILE] = TRUE,
|
||||
[MOVE_SPIT_UP] = TRUE,
|
||||
[MOVE_SWALLOW] = TRUE,
|
||||
[MOVE_HEAT_WAVE] = TRUE,
|
||||
[MOVE_HAIL] = TRUE,
|
||||
[MOVE_TORMENT] = TRUE,
|
||||
[MOVE_FLATTER] = TRUE,
|
||||
[MOVE_WILL_O_WISP] = TRUE,
|
||||
[MOVE_MEMENTO] = TRUE,
|
||||
[MOVE_FACADE] = TRUE,
|
||||
[MOVE_FOCUS_PUNCH] = TRUE,
|
||||
[MOVE_SMELLING_SALT] = TRUE,
|
||||
[MOVE_FOLLOW_ME] = TRUE,
|
||||
[MOVE_NATURE_POWER] = TRUE,
|
||||
[MOVE_CHARGE] = TRUE,
|
||||
[MOVE_TAUNT] = TRUE,
|
||||
[MOVE_HELPING_HAND] = TRUE,
|
||||
[MOVE_TRICK] = TRUE,
|
||||
[MOVE_ROLE_PLAY] = TRUE,
|
||||
[MOVE_WISH] = TRUE,
|
||||
[MOVE_ASSIST] = TRUE,
|
||||
[MOVE_INGRAIN] = TRUE,
|
||||
[MOVE_SUPERPOWER] = TRUE,
|
||||
[MOVE_MAGIC_COAT] = TRUE,
|
||||
[MOVE_RECYCLE] = TRUE,
|
||||
[MOVE_REVENGE] = TRUE,
|
||||
[MOVE_BRICK_BREAK] = TRUE,
|
||||
[MOVE_YAWN] = TRUE,
|
||||
[MOVE_KNOCK_OFF] = TRUE,
|
||||
[MOVE_ENDEAVOR] = TRUE,
|
||||
[MOVE_ERUPTION] = TRUE,
|
||||
[MOVE_SKILL_SWAP] = TRUE,
|
||||
[MOVE_IMPRISON] = TRUE,
|
||||
[MOVE_REFRESH] = TRUE,
|
||||
[MOVE_GRUDGE] = TRUE,
|
||||
[MOVE_SNATCH] = TRUE,
|
||||
[MOVE_SECRET_POWER] = TRUE,
|
||||
[MOVE_DIVE] = TRUE,
|
||||
[MOVE_ARM_THRUST] = FALSE,
|
||||
[MOVE_CAMOUFLAGE] = TRUE,
|
||||
[MOVE_TAIL_GLOW] = TRUE,
|
||||
[MOVE_LUSTER_PURGE] = TRUE,
|
||||
[MOVE_MIST_BALL] = TRUE,
|
||||
[MOVE_FEATHER_DANCE] = TRUE,
|
||||
[MOVE_TEETER_DANCE] = TRUE,
|
||||
[MOVE_BLAZE_KICK] = TRUE,
|
||||
[MOVE_MUD_SPORT] = TRUE,
|
||||
[MOVE_ICE_BALL] = FALSE,
|
||||
[MOVE_NEEDLE_ARM] = TRUE,
|
||||
[MOVE_SLACK_OFF] = TRUE,
|
||||
[MOVE_HYPER_VOICE] = TRUE,
|
||||
[MOVE_POISON_FANG] = FALSE,
|
||||
[MOVE_CRUSH_CLAW] = TRUE,
|
||||
[MOVE_BLAST_BURN] = TRUE,
|
||||
[MOVE_HYDRO_CANNON] = TRUE,
|
||||
[MOVE_METEOR_MASH] = TRUE,
|
||||
[MOVE_ASTONISH] = TRUE,
|
||||
[MOVE_WEATHER_BALL] = TRUE,
|
||||
[MOVE_AROMATHERAPY] = TRUE,
|
||||
[MOVE_FAKE_TEARS] = TRUE,
|
||||
[MOVE_AIR_CUTTER] = TRUE,
|
||||
[MOVE_OVERHEAT] = TRUE,
|
||||
[MOVE_ODOR_SLEUTH] = TRUE,
|
||||
[MOVE_ROCK_TOMB] = TRUE,
|
||||
[MOVE_SILVER_WIND] = TRUE,
|
||||
[MOVE_METAL_SOUND] = TRUE,
|
||||
[MOVE_GRASS_WHISTLE] = TRUE,
|
||||
[MOVE_TICKLE] = TRUE,
|
||||
[MOVE_COSMIC_POWER] = TRUE,
|
||||
[MOVE_WATER_SPOUT] = TRUE,
|
||||
[MOVE_SIGNAL_BEAM] = TRUE,
|
||||
[MOVE_SHADOW_PUNCH] = TRUE,
|
||||
[MOVE_EXTRASENSORY] = TRUE,
|
||||
[MOVE_SKY_UPPERCUT] = TRUE,
|
||||
[MOVE_SAND_TOMB] = TRUE,
|
||||
[MOVE_SHEER_COLD] = TRUE,
|
||||
[MOVE_MUDDY_WATER] = TRUE,
|
||||
[MOVE_BULLET_SEED] = FALSE,
|
||||
[MOVE_AERIAL_ACE] = TRUE,
|
||||
[MOVE_ICICLE_SPEAR] = FALSE,
|
||||
[MOVE_IRON_DEFENSE] = TRUE,
|
||||
[MOVE_BLOCK] = TRUE,
|
||||
[MOVE_HOWL] = TRUE,
|
||||
[MOVE_DRAGON_CLAW] = TRUE,
|
||||
[MOVE_FRENZY_PLANT] = TRUE,
|
||||
[MOVE_BULK_UP] = TRUE,
|
||||
[MOVE_BOUNCE] = TRUE,
|
||||
[MOVE_MUD_SHOT] = FALSE,
|
||||
[MOVE_POISON_TAIL] = TRUE,
|
||||
[MOVE_COVET] = TRUE,
|
||||
[MOVE_VOLT_TACKLE] = TRUE,
|
||||
[MOVE_MAGICAL_LEAF] = TRUE,
|
||||
[MOVE_WATER_SPORT] = TRUE,
|
||||
[MOVE_CALM_MIND] = TRUE,
|
||||
[MOVE_LEAF_BLADE] = TRUE,
|
||||
[MOVE_DRAGON_DANCE] = TRUE,
|
||||
[MOVE_ROCK_BLAST] = FALSE,
|
||||
[MOVE_SHOCK_WAVE] = TRUE,
|
||||
[MOVE_WATER_PULSE] = TRUE,
|
||||
[MOVE_DOOM_DESIRE] = TRUE,
|
||||
[MOVE_PSYCHO_BOOST] = TRUE,
|
||||
};
|
||||
|
||||
// The possible questions to ask after the initial 3 WHICH MON questions. Retrieved from here and shuffled
|
||||
// WHAT_ITEM has max 3 occurrences, one for each party member
|
||||
// WHICH_MOVE has max 5 occurrences, defined as NUM_WHICH_MOVE_QUESTIONS
|
||||
// WHICH_FIRST has max 1 occurrence, lead mon should only be chosen once
|
||||
// WHICH_SPEECH has max 1 occurrence, as the apprentice leaves after its asked
|
||||
static const u8 sQuestionPossibilities[] =
|
||||
{
|
||||
QUESTION_ID_WHAT_ITEM,
|
||||
QUESTION_ID_WHAT_ITEM,
|
||||
QUESTION_ID_WHAT_ITEM,
|
||||
QUESTION_ID_WHICH_MOVE,
|
||||
QUESTION_ID_WHICH_MOVE,
|
||||
QUESTION_ID_WHICH_MOVE,
|
||||
QUESTION_ID_WHICH_MOVE,
|
||||
QUESTION_ID_WHICH_MOVE,
|
||||
QUESTION_ID_WHICH_FIRST,
|
||||
QUESTION_ID_WIN_SPEECH
|
||||
};
|
||||
|
||||
static void (* const sApprenticeFunctions[])(void) =
|
||||
{
|
||||
[APPRENTICE_FUNC_GAVE_LVLMODE] = Script_GivenApprenticeLvlMode,
|
||||
[APPRENTICE_FUNC_SET_LVLMODE] = Script_SetApprenticeLvlMode,
|
||||
[APPRENTICE_FUNC_SET_ID] = Script_SetApprenticeId,
|
||||
[APPRENTICE_FUNC_SHUFFLE_SPECIES] = ShuffleApprenticeSpecies,
|
||||
[APPRENTICE_FUNC_RANDOMIZE_QUESTIONS] = Script_SetRandomQuestionData,
|
||||
[APPRENTICE_FUNC_ANSWERED_QUESTION] = IncrementQuestionsAnswered,
|
||||
[APPRENTICE_FUNC_IS_FINAL_QUESTION] = IsFinalQuestion,
|
||||
[APPRENTICE_FUNC_MENU] = Script_CreateApprenticeMenu,
|
||||
[APPRENTICE_FUNC_PRINT_MSG] = Script_PrintApprenticeMessage,
|
||||
[APPRENTICE_FUNC_RESET] = Script_ResetPlayerApprentice,
|
||||
[APPRENTICE_FUNC_CHECK_GONE] = GetShouldCheckApprenticeGone,
|
||||
[APPRENTICE_FUNC_GET_QUESTION] = ApprenticeGetQuestion,
|
||||
[APPRENTICE_FUNC_GET_NUM_PARTY_MONS] = GetNumApprenticePartyMonsAssigned,
|
||||
[APPRENTICE_FUNC_SET_PARTY_MON] = SetApprenticePartyMon,
|
||||
[APPRENTICE_FUNC_INIT_QUESTION_DATA] = InitQuestionData,
|
||||
[APPRENTICE_FUNC_FREE_QUESTION_DATA] = FreeQuestionData,
|
||||
[APPRENTICE_FUNC_BUFFER_STRING] = ApprenticeBufferString,
|
||||
[APPRENTICE_FUNC_SET_MOVE] = SetApprenticeMonMove,
|
||||
[APPRENTICE_FUNC_SET_LEAD_MON] = SetLeadApprenticeMon,
|
||||
[APPRENTICE_FUNC_OPEN_BAG] = Script_ApprenticeOpenBagMenu,
|
||||
[APPRENTICE_FUNC_TRY_SET_HELD_ITEM] = TrySetApprenticeHeldItem,
|
||||
[APPRENTICE_FUNC_SAVE] = SaveApprentice,
|
||||
[APPRENTICE_FUNC_SET_GFX_SAVED] = SetSavedApprenticeTrainerGfxId,
|
||||
[APPRENTICE_FUNC_SET_GFX] = SetPlayerApprenticeTrainerGfxId,
|
||||
[APPRENTICE_FUNC_SHOULD_LEAVE] = GetShouldApprenticeLeave,
|
||||
[APPRENTICE_FUNC_SHIFT_SAVED] = ShiftSavedApprentices,
|
||||
};
|
||||
|
||||
// The first Apprentice can only be one of these
|
||||
static const u8 sInitialApprenticeIds[8] = {0, 1, 2, 3, 6, 7, 8, 9};
|
||||
@@ -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},
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
#define LEVEL_UP_MOVE(lvl, move) ((lvl << 9) | move)
|
||||
#define LEVEL_UP_END 0xffff
|
||||
|
||||
static const u16 sBulbasaurLevelUpLearnset[] = {
|
||||
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
|
||||
|
||||
@@ -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,
|
||||
|
||||
+1
-1
@@ -1320,7 +1320,7 @@ void ShowEasyChatScreen(void)
|
||||
words = &gSaveBlock1Ptr->lilycoveLady.quiz.correctAnswer;
|
||||
break;
|
||||
case EASY_CHAT_TYPE_APPRENTICE:
|
||||
words = gSaveBlock2Ptr->apprentices[0].easyChatWords;
|
||||
words = gSaveBlock2Ptr->apprentices[0].speechWon;
|
||||
break;
|
||||
case EASY_CHAT_TYPE_QUESTIONNAIRE:
|
||||
words = sub_801B058();
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "wild_encounter.h"
|
||||
#include "constants/event_bg.h"
|
||||
#include "constants/event_objects.h"
|
||||
#include "constants/field_poison.h"
|
||||
#include "constants/map_types.h"
|
||||
#include "constants/maps.h"
|
||||
#include "constants/songs.h"
|
||||
@@ -647,11 +648,11 @@ static bool8 UpdatePoisonStepCounter(void)
|
||||
{
|
||||
switch (DoPoisonFieldEffect())
|
||||
{
|
||||
case 0:
|
||||
case FLDPSN_NONE:
|
||||
return FALSE;
|
||||
case 1:
|
||||
case FLDPSN_PSN:
|
||||
return FALSE;
|
||||
case 2:
|
||||
case FLDPSN_FNT:
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -1553,9 +1553,9 @@ static u8 MapNumToFrontierFacilityId(u16 mapNum) // id + 1, zero means not a fro
|
||||
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_LOBBY)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM1)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM2)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3))
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS))
|
||||
return FRONTIER_FACILITY_PIKE + 1;
|
||||
else if (mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY)
|
||||
|| mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_EMPTY_SQUARE)
|
||||
|
||||
+366
-350
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -777,8 +777,8 @@ const u32 gBattleAnimSpriteGfx_Roots[] = INCBIN_U32("graphics/battle_anims/sprit
|
||||
const u32 gBattleAnimSpritePal_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_ItemBag[] = INCBIN_U32("graphics/battle_anims/sprites/item_bag.4bpp.lz");
|
||||
|
||||
const u32 gBattleAnimSpritePal_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_force_triangle.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_TriForceTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_force_triangle.4bpp.lz");
|
||||
const u32 gBattleAnimSpritePal_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_TriAttackTriangle[] = INCBIN_U32("graphics/battle_anims/sprites/tri_attack_triangle.4bpp.lz");
|
||||
|
||||
const u32 gBattleAnimSpritePal_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.gbapal.lz");
|
||||
const u32 gBattleAnimSpriteGfx_LetterZ[] = INCBIN_U32("graphics/battle_anims/sprites/letter_z.4bpp.lz");
|
||||
|
||||
+8
-8
@@ -119,7 +119,7 @@ void sub_81AD9C0(u8);
|
||||
void sub_81ADB14(u8);
|
||||
void sub_81ADA7C(u8);
|
||||
void sub_81ADC0C(u8);
|
||||
void bag_menu_leave_maybe(void);
|
||||
void CB2_ApprenticeExitBagMenu(void);
|
||||
void CB2_FavorLadyExitBagMenu(void);
|
||||
void CB2_QuizLadyExitBagMenu(void);
|
||||
void sub_81ABA6C(void);
|
||||
@@ -492,23 +492,23 @@ void sub_81AAC14(void)
|
||||
GoToBagMenu(RETURN_LOCATION_PC, POCKETS_COUNT, sub_816B31C);
|
||||
}
|
||||
|
||||
void sub_81AAC28(void)
|
||||
void ApprenticeOpenBagMenu(void)
|
||||
{
|
||||
GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, bag_menu_leave_maybe);
|
||||
gSpecialVar_0x8005 = 0;
|
||||
gSpecialVar_Result = 0;
|
||||
GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, CB2_ApprenticeExitBagMenu);
|
||||
gSpecialVar_0x8005 = ITEM_NONE;
|
||||
gSpecialVar_Result = FALSE;
|
||||
}
|
||||
|
||||
void FavorLadyOpenBagMenu(void)
|
||||
{
|
||||
GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, CB2_FavorLadyExitBagMenu);
|
||||
gSpecialVar_Result = 0;
|
||||
gSpecialVar_Result = FALSE;
|
||||
}
|
||||
|
||||
void QuizLadyOpenBagMenu(void)
|
||||
{
|
||||
GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, CB2_QuizLadyExitBagMenu);
|
||||
gSpecialVar_Result = 0;
|
||||
gSpecialVar_Result = FALSE;
|
||||
}
|
||||
|
||||
void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)())
|
||||
@@ -2203,7 +2203,7 @@ void unknown_ItemMenu_Show(u8 taskId)
|
||||
unknown_ItemMenu_Confirm(taskId);
|
||||
}
|
||||
|
||||
void bag_menu_leave_maybe(void)
|
||||
void CB2_ApprenticeExitBagMenu(void)
|
||||
{
|
||||
gFieldCallback = Apprentice_EnableBothScriptContexts;
|
||||
SetMainCallback2(CB2_ReturnToField);
|
||||
|
||||
+1
-1
@@ -453,7 +453,7 @@ static void LinkTestProcessKeyInput(void)
|
||||
}
|
||||
if (gMain.newKeys & R_BUTTON)
|
||||
{
|
||||
TrySavingData(1);
|
||||
TrySavingData(SAVE_LINK);
|
||||
}
|
||||
if (gMain.newKeys & SELECT_BUTTON)
|
||||
{
|
||||
|
||||
+8
-2
@@ -62,7 +62,13 @@ static EWRAM_DATA u16 gUnknown_0203CDA8 = 0;
|
||||
static EWRAM_DATA void *gUnknown_0203CDAC[0x20] = {NULL};
|
||||
|
||||
const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal");
|
||||
static const u8 gUnknown_0860F094[] = { 8, 4, 1 };
|
||||
|
||||
static const u8 sTextSpeedFrameDelays[] =
|
||||
{
|
||||
[OPTIONS_TEXT_SPEED_SLOW] = 8,
|
||||
[OPTIONS_TEXT_SPEED_MID] = 4,
|
||||
[OPTIONS_TEXT_SPEED_FAST] = 1
|
||||
};
|
||||
|
||||
static const struct WindowTemplate sStandardTextBox_WindowTemplates[] =
|
||||
{
|
||||
@@ -480,7 +486,7 @@ u8 GetPlayerTextSpeedDelay(void)
|
||||
if (gSaveBlock2Ptr->optionsTextSpeed > OPTIONS_TEXT_SPEED_FAST)
|
||||
gSaveBlock2Ptr->optionsTextSpeed = OPTIONS_TEXT_SPEED_MID;
|
||||
speed = GetPlayerTextSpeed();
|
||||
return gUnknown_0860F094[speed];
|
||||
return sTextSpeedFrameDelays[speed];
|
||||
}
|
||||
|
||||
u8 sub_81979C4(u8 a1)
|
||||
|
||||
+1
-1
@@ -921,7 +921,7 @@ static bool32 mevent_save_game(u8 * state)
|
||||
(*state)++;
|
||||
break;
|
||||
case 1:
|
||||
TrySavingData(0);
|
||||
TrySavingData(SAVE_NORMAL);
|
||||
(*state)++;
|
||||
break;
|
||||
case 2:
|
||||
|
||||
+2
-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)
|
||||
|
||||
+1
-1
@@ -1715,7 +1715,7 @@ void CB2_ContinueSavedGame(void)
|
||||
StopMapMusic();
|
||||
ResetSafariZoneFlag_();
|
||||
if (gSaveFileStatus == 0xFF)
|
||||
sub_81A3908();
|
||||
ResetWinStreaks();
|
||||
|
||||
LoadSaveblockMapHeader();
|
||||
ClearDiveAndHoleWarps();
|
||||
|
||||
+19
-19
@@ -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] =
|
||||
@@ -2943,12 +2943,12 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
|
||||
u16 moveLevel;
|
||||
u16 move;
|
||||
|
||||
moveLevel = (gLevelUpLearnsets[species][i] & 0xFE00);
|
||||
moveLevel = (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV);
|
||||
|
||||
if (moveLevel > (level << 9))
|
||||
break;
|
||||
|
||||
move = (gLevelUpLearnsets[species][i] & 0x1FF);
|
||||
move = (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID);
|
||||
|
||||
if (GiveMoveToBoxMon(boxMon, move) == MON_HAS_MAX_MOVES)
|
||||
DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, move);
|
||||
@@ -2969,7 +2969,7 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
|
||||
{
|
||||
sLearningMoveTableID = 0;
|
||||
|
||||
while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9))
|
||||
while ((gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_LV) != (level << 9))
|
||||
{
|
||||
sLearningMoveTableID++;
|
||||
if (gLevelUpLearnsets[species][sLearningMoveTableID] == LEVEL_UP_END)
|
||||
@@ -2977,9 +2977,9 @@ u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove)
|
||||
}
|
||||
}
|
||||
|
||||
if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9))
|
||||
if ((gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_LV) == (level << 9))
|
||||
{
|
||||
gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF);
|
||||
gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & LEVEL_UP_MOVE_ID);
|
||||
sLearningMoveTableID++;
|
||||
retVal = GiveMoveToMon(mon, gMoveToLearn);
|
||||
}
|
||||
@@ -3271,7 +3271,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
|
||||
}
|
||||
|
||||
// any weather except sun weakens solar beam
|
||||
if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL)) && gCurrentMove == MOVE_SOLAR_BEAM)
|
||||
if ((gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SANDSTORM_ANY | WEATHER_HAIL_ANY)) && gCurrentMove == MOVE_SOLAR_BEAM)
|
||||
damage /= 2;
|
||||
|
||||
// sunny
|
||||
@@ -6112,23 +6112,23 @@ u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves)
|
||||
{
|
||||
u16 moveLevel;
|
||||
|
||||
if (gLevelUpLearnsets[species][i] == 0xFFFF)
|
||||
if (gLevelUpLearnsets[species][i] == LEVEL_UP_END)
|
||||
break;
|
||||
|
||||
moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
|
||||
moveLevel = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV;
|
||||
|
||||
if (moveLevel <= (level << 9))
|
||||
{
|
||||
for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
|
||||
for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); j++)
|
||||
;
|
||||
|
||||
if (j == MAX_MON_MOVES)
|
||||
{
|
||||
for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
|
||||
for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); k++)
|
||||
;
|
||||
|
||||
if (k == numMoves)
|
||||
moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
|
||||
moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -6141,8 +6141,8 @@ u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves)
|
||||
u8 numMoves = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != 0xFFFF; i++)
|
||||
moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
|
||||
for (i = 0; i < 20 && gLevelUpLearnsets[species][i] != LEVEL_UP_END; i++)
|
||||
moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
|
||||
|
||||
return numMoves;
|
||||
}
|
||||
@@ -6166,23 +6166,23 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon)
|
||||
{
|
||||
u16 moveLevel;
|
||||
|
||||
if (gLevelUpLearnsets[species][i] == 0xFFFF)
|
||||
if (gLevelUpLearnsets[species][i] == LEVEL_UP_END)
|
||||
break;
|
||||
|
||||
moveLevel = gLevelUpLearnsets[species][i] & 0xFE00;
|
||||
moveLevel = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_LV;
|
||||
|
||||
if (moveLevel <= (level << 9))
|
||||
{
|
||||
for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & 0x1FF); j++)
|
||||
for (j = 0; j < MAX_MON_MOVES && learnedMoves[j] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); j++)
|
||||
;
|
||||
|
||||
if (j == MAX_MON_MOVES)
|
||||
{
|
||||
for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & 0x1FF); k++)
|
||||
for (k = 0; k < numMoves && moves[k] != (gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID); k++)
|
||||
;
|
||||
|
||||
if (k == numMoves)
|
||||
moves[numMoves++] = gLevelUpLearnsets[species][i] & 0x1FF;
|
||||
moves[numMoves++] = gLevelUpLearnsets[species][i] & LEVEL_UP_MOVE_ID;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+51
-49
@@ -69,7 +69,7 @@ struct PlayerRecordsEmerald
|
||||
/* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord;
|
||||
/* 0x1210 */ u16 giftItem;
|
||||
/* 0x1214 */ LilycoveLady lilycoveLady;
|
||||
/* 0x1254 */ struct Apprentice apprentice[2];
|
||||
/* 0x1254 */ struct Apprentice apprentices[2];
|
||||
/* 0x12dc */ struct PlayerHallRecords hallRecords;
|
||||
/* 0x1434 */ u8 field_1434[0x10];
|
||||
}; // 0x1444
|
||||
@@ -120,8 +120,8 @@ static void sub_80E7B2C(const u8 *);
|
||||
static void ReceiveDaycareMailData(struct RecordMixingDayCareMail *, size_t, u8, TVShow *);
|
||||
static void ReceiveGiftItem(u16 *item, u8 which);
|
||||
static void Task_DoRecordMixing(u8 taskId);
|
||||
static void sub_80E8110(struct Apprentice *arg0, struct Apprentice *arg1);
|
||||
static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2);
|
||||
static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src);
|
||||
static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recordSize, u32 multiplayerId);
|
||||
static void ReceiveRankingHallRecords(struct PlayerHallRecords *hallRecords, size_t arg1, u32 arg2);
|
||||
static void sub_80E89F8(struct RecordMixingDayCareMail *dst);
|
||||
static void SanitizeDayCareMailForRuby(struct RecordMixingDayCareMail *src);
|
||||
@@ -252,7 +252,7 @@ static void PrepareExchangePacket(void)
|
||||
if (GetMultiplayerId() == 0)
|
||||
sSentRecord->emerald.giftItem = GetRecordMixingGift();
|
||||
|
||||
sub_80E8110(sSentRecord->emerald.apprentice, sApprenticesSave);
|
||||
GetSavedApprentices(sSentRecord->emerald.apprentices, sApprenticesSave);
|
||||
GetPlayerHallRecords(&sSentRecord->emerald.hallRecords);
|
||||
}
|
||||
}
|
||||
@@ -285,7 +285,7 @@ static void ReceiveExchangePacket(u32 which)
|
||||
ReceiveBattleTowerData(&sReceivedRecords->emerald.battleTowerRecord, sizeof(struct PlayerRecordsEmerald), which);
|
||||
ReceiveGiftItem(&sReceivedRecords->emerald.giftItem, which);
|
||||
ReceiveLilycoveLadyData(&sReceivedRecords->emerald.lilycoveLady, sizeof(struct PlayerRecordsEmerald), which);
|
||||
ReceiveApprenticeData(sReceivedRecords->emerald.apprentice, sizeof(struct PlayerRecordsEmerald), (u8) which);
|
||||
ReceiveApprenticeData(sReceivedRecords->emerald.apprentices, sizeof(struct PlayerRecordsEmerald), (u8) which);
|
||||
ReceiveRankingHallRecords(&sReceivedRecords->emerald.hallRecords, sizeof(struct PlayerRecordsEmerald), (u8) which);
|
||||
}
|
||||
}
|
||||
@@ -651,7 +651,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
|
||||
{
|
||||
struct EmeraldBattleTowerRecord *dest;
|
||||
struct BattleTowerPokemon *btPokemon;
|
||||
u32 mixIndices[4];
|
||||
u32 mixIndices[MAX_LINK_PLAYERS];
|
||||
s32 i;
|
||||
|
||||
ShufflePlayerIndices(mixIndices);
|
||||
@@ -682,7 +682,7 @@ static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u
|
||||
static void ReceiveLilycoveLadyData(LilycoveLady *lilycoveLady, size_t recordSize, u8 which)
|
||||
{
|
||||
LilycoveLady *dest;
|
||||
u32 mixIndices[4];
|
||||
u32 mixIndices[MAX_LINK_PLAYERS];
|
||||
|
||||
ShufflePlayerIndices(mixIndices);
|
||||
memcpy((void *)lilycoveLady + recordSize * which, sLilycoveLadySave, sizeof(LilycoveLady));
|
||||
@@ -1018,57 +1018,59 @@ static void Task_DoRecordMixing(u8 taskId)
|
||||
|
||||
// New Emerald functions
|
||||
|
||||
static void sub_80E8110(struct Apprentice *dst, struct Apprentice *src)
|
||||
static void GetSavedApprentices(struct Apprentice *dst, struct Apprentice *src)
|
||||
{
|
||||
s32 i, id;
|
||||
s32 var_2C, var_28, var_24, r8;
|
||||
s32 apprenticeSaveId, oldPlayerApprenticeSaveId;
|
||||
s32 numOldPlayerApprentices, numMixApprentices;
|
||||
|
||||
dst[0].playerName[0] = EOS;
|
||||
dst[1].playerName[0] = EOS;
|
||||
|
||||
dst[0] = src[0];
|
||||
|
||||
var_28 = 0;
|
||||
var_24 = 0;
|
||||
var_2C = 0;
|
||||
r8 = 0;
|
||||
oldPlayerApprenticeSaveId = 0;
|
||||
numOldPlayerApprentices = 0;
|
||||
apprenticeSaveId = 0;
|
||||
numMixApprentices = 0;
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
id = ((i + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3) + 1;
|
||||
id = ((i + gSaveBlock2Ptr->playerApprentice.saveId) % (APPRENTICE_COUNT - 1)) + 1;
|
||||
if (src[id].playerName[0] != EOS)
|
||||
{
|
||||
if (GetTrainerId(src[id].playerId) != GetTrainerId(gSaveBlock2Ptr->playerTrainerId))
|
||||
{
|
||||
r8++;
|
||||
var_2C = id;
|
||||
numMixApprentices++;
|
||||
apprenticeSaveId = id;
|
||||
}
|
||||
if (GetTrainerId(src[id].playerId) == GetTrainerId(gSaveBlock2Ptr->playerTrainerId))
|
||||
{
|
||||
var_24++;
|
||||
var_28 = id;
|
||||
numOldPlayerApprentices++;
|
||||
oldPlayerApprenticeSaveId = id;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (r8 == 0 && var_24 != 0)
|
||||
// Prefer passing on other mixed Apprentices rather than old player's Apprentices
|
||||
if (numMixApprentices == 0 && numOldPlayerApprentices != 0)
|
||||
{
|
||||
r8 = var_24;
|
||||
var_2C = var_28;
|
||||
numMixApprentices = numOldPlayerApprentices;
|
||||
apprenticeSaveId = oldPlayerApprenticeSaveId;
|
||||
}
|
||||
|
||||
switch (r8)
|
||||
switch (numMixApprentices)
|
||||
{
|
||||
case 1:
|
||||
dst[1] = src[var_2C];
|
||||
dst[1] = src[apprenticeSaveId];
|
||||
break;
|
||||
case 2:
|
||||
if (Random2() > 0x3333)
|
||||
{
|
||||
dst[1] = src[gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1];
|
||||
dst[1] = src[gSaveBlock2Ptr->playerApprentice.saveId + 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
dst[1] = src[((gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1) % 3 + 1)];
|
||||
dst[1] = src[((gSaveBlock2Ptr->playerApprentice.saveId + 1) % (APPRENTICE_COUNT - 1) + 1)];
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1092,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++)
|
||||
@@ -1113,14 +1115,14 @@ void GetPlayerHallRecords(struct PlayerHallRecords *dst)
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1)
|
||||
static bool32 IsApprenticeAlreadySaved(struct Apprentice *mixApprentice, struct Apprentice *apprentices)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
for (i = 0; i < APPRENTICE_COUNT; i++)
|
||||
{
|
||||
if (GetTrainerId(arg0->playerId) == GetTrainerId(arg1[i].playerId)
|
||||
&& arg0->number == arg1[i].number)
|
||||
if (GetTrainerId(mixApprentice->playerId) == GetTrainerId(apprentices[i].playerId)
|
||||
&& mixApprentice->number == apprentices[i].number)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1129,40 +1131,40 @@ static bool32 sub_80E841C(struct Apprentice *arg0, struct Apprentice *arg1)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void ReceiveApprenticeData(struct Apprentice *arg0, size_t arg1, u32 arg2)
|
||||
static void ReceiveApprenticeData(struct Apprentice *mixApprentice, size_t recordSize, u32 multiplayerId)
|
||||
{
|
||||
s32 i, r7, r8;
|
||||
struct Apprentice *structPtr;
|
||||
u32 mixIndices[4];
|
||||
u32 structId;
|
||||
s32 i, numApprentices, apprenticeId;
|
||||
struct Apprentice *mixApprenticePtr;
|
||||
u32 mixIndices[MAX_LINK_PLAYERS];
|
||||
u32 apprenticeSaveId;
|
||||
|
||||
ShufflePlayerIndices(mixIndices);
|
||||
structPtr = (void*)(arg0) + (arg1 * mixIndices[arg2]);
|
||||
r7 = 0;
|
||||
r8 = 0;
|
||||
mixApprenticePtr = (void*)(mixApprentice) + (recordSize * mixIndices[multiplayerId]);
|
||||
numApprentices = 0;
|
||||
apprenticeId = 0;
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
if (structPtr[i].playerName[0] != EOS && !sub_80E841C(&structPtr[i], &gSaveBlock2Ptr->apprentices[0]))
|
||||
if (mixApprenticePtr[i].playerName[0] != EOS && !IsApprenticeAlreadySaved(&mixApprenticePtr[i], &gSaveBlock2Ptr->apprentices[0]))
|
||||
{
|
||||
r7++;
|
||||
r8 = i;
|
||||
numApprentices++;
|
||||
apprenticeId = i;
|
||||
}
|
||||
}
|
||||
|
||||
switch (r7)
|
||||
switch (numApprentices)
|
||||
{
|
||||
case 1:
|
||||
structId = gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1;
|
||||
gSaveBlock2Ptr->apprentices[structId] = structPtr[r8];
|
||||
gSaveBlock2Ptr->playerApprentice.field_B2_1 = (gSaveBlock2Ptr->playerApprentice.field_B2_1 + 1) % 3;
|
||||
apprenticeSaveId = gSaveBlock2Ptr->playerApprentice.saveId + 1;
|
||||
gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprenticePtr[apprenticeId];
|
||||
gSaveBlock2Ptr->playerApprentice.saveId = (gSaveBlock2Ptr->playerApprentice.saveId + 1) % (APPRENTICE_COUNT - 1);
|
||||
break;
|
||||
case 2:
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
structId = ((i ^ 1) + gSaveBlock2Ptr->playerApprentice.field_B2_1) % 3 + 1;
|
||||
gSaveBlock2Ptr->apprentices[structId] = structPtr[i];
|
||||
apprenticeSaveId = ((i ^ 1) + gSaveBlock2Ptr->playerApprentice.saveId) % (APPRENTICE_COUNT - 1) + 1;
|
||||
gSaveBlock2Ptr->apprentices[apprenticeSaveId] = mixApprenticePtr[i];
|
||||
}
|
||||
gSaveBlock2Ptr->playerApprentice.field_B2_1 = (gSaveBlock2Ptr->playerApprentice.field_B2_1 + 2) % 3;
|
||||
gSaveBlock2Ptr->playerApprentice.saveId = (gSaveBlock2Ptr->playerApprentice.saveId + 2) % (APPRENTICE_COUNT - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+12
-12
@@ -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);
|
||||
|
||||
@@ -409,12 +409,12 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
|
||||
if (sBattleOutcome == B_OUTCOME_WON)
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechLost[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].speechWon[i];
|
||||
}
|
||||
battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_FRIEND].language;
|
||||
@@ -427,12 +427,12 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
|
||||
if (sBattleOutcome == B_OUTCOME_WON)
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechLost[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 6; i++)
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].speechWon[i];
|
||||
}
|
||||
battleSave->recordMixFriendLanguage = gSaveBlock2Ptr->frontier.towerRecords[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_FRIEND].language;
|
||||
@@ -449,15 +449,15 @@ bool32 MoveRecordedBattleToSaveData(void)
|
||||
if (gTrainerBattleOpponent_A >= TRAINER_RECORD_MIXING_APPRENTICE)
|
||||
{
|
||||
battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].id;
|
||||
for (i = 0; i < 6; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords[i];
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i];
|
||||
battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_A - TRAINER_RECORD_MIXING_APPRENTICE].language;
|
||||
}
|
||||
else if (gTrainerBattleOpponent_B >= TRAINER_RECORD_MIXING_APPRENTICE)
|
||||
{
|
||||
battleSave->apprenticeId = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].id;
|
||||
for (i = 0; i < 6; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].easyChatWords[i];
|
||||
for (i = 0; i < EASY_CHAT_BATTLE_WORDS_COUNT; i++)
|
||||
battleSave->easyChatSpeech[i] = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].speechWon[i];
|
||||
battleSave->apprenticeLanguage = gSaveBlock2Ptr->apprentices[gTrainerBattleOpponent_B - TRAINER_RECORD_MIXING_APPRENTICE].language;
|
||||
}
|
||||
else if (gPartnerTrainerId >= TRAINER_RECORD_MIXING_APPRENTICE)
|
||||
@@ -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);
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
+17
-17
@@ -4,46 +4,46 @@
|
||||
#include "sprite.h"
|
||||
#include "util.h"
|
||||
|
||||
static void sub_8075370(struct Sprite *);
|
||||
static void SmokescreenImpact_Callback(struct Sprite *);
|
||||
|
||||
extern const struct CompressedSpriteSheet gUnknown_0831C620;
|
||||
extern const struct CompressedSpritePalette gUnknown_0831C628;
|
||||
extern const struct SpriteTemplate gUnknown_0831C688;
|
||||
extern const struct CompressedSpriteSheet gSmokescreenImpactSpriteSheet;
|
||||
extern const struct CompressedSpritePalette gSmokescreenlImpactSpritePalette;
|
||||
extern const struct SpriteTemplate gSmokescreenImpactSpriteTemplate;
|
||||
|
||||
u8 sub_807521C(s16 x, s16 y, u8 a3)
|
||||
u8 SmokescreenImpact(s16 x, s16 y, u8 a3)
|
||||
{
|
||||
u8 mainSpriteId;
|
||||
u8 spriteId1, spriteId2, spriteId3, spriteId4;
|
||||
struct Sprite *mainSprite;
|
||||
|
||||
if (GetSpriteTileStartByTag(gUnknown_0831C620.tag) == 0xFFFF)
|
||||
if (GetSpriteTileStartByTag(gSmokescreenImpactSpriteSheet.tag) == 0xFFFF)
|
||||
{
|
||||
LoadCompressedSpriteSheetUsingHeap(&gUnknown_0831C620);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gUnknown_0831C628);
|
||||
LoadCompressedSpriteSheetUsingHeap(&gSmokescreenImpactSpriteSheet);
|
||||
LoadCompressedSpritePaletteUsingHeap(&gSmokescreenlImpactSpritePalette);
|
||||
}
|
||||
|
||||
mainSpriteId = CreateInvisibleSpriteWithCallback(sub_8075370);
|
||||
mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback);
|
||||
mainSprite = &gSprites[mainSpriteId];
|
||||
mainSprite->data[1] = a3;
|
||||
|
||||
spriteId1 = CreateSprite(&gUnknown_0831C688, x - 16, y - 16, 2);
|
||||
spriteId1 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2);
|
||||
gSprites[spriteId1].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
AnimateSprite(&gSprites[spriteId1]);
|
||||
|
||||
spriteId2 = CreateSprite(&gUnknown_0831C688, x, y - 16, 2);
|
||||
spriteId2 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y - 16, 2);
|
||||
gSprites[spriteId2].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
StartSpriteAnim(&gSprites[spriteId2], 1);
|
||||
AnimateSprite(&gSprites[spriteId2]);
|
||||
|
||||
spriteId3 = CreateSprite(&gUnknown_0831C688, x - 16, y, 2);
|
||||
spriteId3 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y, 2);
|
||||
gSprites[spriteId3].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
StartSpriteAnim(&gSprites[spriteId3], 2);
|
||||
AnimateSprite(&gSprites[spriteId3]);
|
||||
|
||||
spriteId4 = CreateSprite(&gUnknown_0831C688, x, y, 2);
|
||||
spriteId4 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y, 2);
|
||||
gSprites[spriteId4].data[0] = mainSpriteId;
|
||||
mainSprite->data[0]++;
|
||||
StartSpriteAnim(&gSprites[spriteId4], 3);
|
||||
@@ -52,12 +52,12 @@ u8 sub_807521C(s16 x, s16 y, u8 a3)
|
||||
return mainSpriteId;
|
||||
}
|
||||
|
||||
static void sub_8075370(struct Sprite *sprite)
|
||||
static void SmokescreenImpact_Callback(struct Sprite *sprite)
|
||||
{
|
||||
if (!sprite->data[0])
|
||||
{
|
||||
FreeSpriteTilesByTag(gUnknown_0831C620.tag);
|
||||
FreeSpritePaletteByTag(gUnknown_0831C628.tag);
|
||||
FreeSpriteTilesByTag(gSmokescreenImpactSpriteSheet.tag);
|
||||
FreeSpritePaletteByTag(gSmokescreenlImpactSpritePalette.tag);
|
||||
if (!sprite->data[1])
|
||||
DestroySprite(sprite);
|
||||
else
|
||||
@@ -65,7 +65,7 @@ static void sub_8075370(struct Sprite *sprite)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80753B4(struct Sprite *sprite)
|
||||
void SpriteCB_DestroySprite(struct Sprite *sprite)
|
||||
{
|
||||
if (sprite->animEnded)
|
||||
{
|
||||
|
||||
+2
-2
@@ -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++;
|
||||
|
||||
|
||||
+17
-17
@@ -223,24 +223,24 @@ static const u8 *const sFloorStrings[] =
|
||||
|
||||
static void (* const sHillFunctions[])(void) =
|
||||
{
|
||||
[TRAINER_HILL_FUNC_START] = TrainerHillStartChallenge,
|
||||
[TRAINER_HILL_FUNC_GET_OWNER_STATE] = GetOwnerState,
|
||||
[TRAINER_HILL_FUNC_GIVE_PRIZE] = GiveChallengePrize,
|
||||
[TRAINER_HILL_FUNC_CHECK_FINAL_TIME] = CheckFinalTime,
|
||||
[TRAINER_HILL_FUNC_RESUME_TIMER] = TrainerHillResumeTimer,
|
||||
[TRAINER_HILL_FUNC_SET_LOST] = TrainerHillSetPlayerLost,
|
||||
[TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS] = TrainerHillGetChallengeStatus,
|
||||
[TRAINER_HILL_FUNC_GET_CHALLENGE_TIME] = BufferChallengeTime,
|
||||
[TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED] = GetAllFloorsUsed,
|
||||
[TRAINER_HILL_FUNC_CLEAR_RESULT] = ClearVarResult,
|
||||
[TRAINER_HILL_FUNC_IN_CHALLENGE] = IsTrainerHillChallengeActive,
|
||||
[TRAINER_HILL_FUNC_POST_BATTLE_TEXT] = ShowTrainerHillPostBattleText,
|
||||
[TRAINER_HILL_FUNC_START] = TrainerHillStartChallenge,
|
||||
[TRAINER_HILL_FUNC_GET_OWNER_STATE] = GetOwnerState,
|
||||
[TRAINER_HILL_FUNC_GIVE_PRIZE] = GiveChallengePrize,
|
||||
[TRAINER_HILL_FUNC_CHECK_FINAL_TIME] = CheckFinalTime,
|
||||
[TRAINER_HILL_FUNC_RESUME_TIMER] = TrainerHillResumeTimer,
|
||||
[TRAINER_HILL_FUNC_SET_LOST] = TrainerHillSetPlayerLost,
|
||||
[TRAINER_HILL_FUNC_GET_CHALLENGE_STATUS] = TrainerHillGetChallengeStatus,
|
||||
[TRAINER_HILL_FUNC_GET_CHALLENGE_TIME] = BufferChallengeTime,
|
||||
[TRAINER_HILL_FUNC_GET_ALL_FLOORS_USED] = GetAllFloorsUsed,
|
||||
[TRAINER_HILL_FUNC_CLEAR_RESULT] = ClearVarResult,
|
||||
[TRAINER_HILL_FUNC_IN_CHALLENGE] = IsTrainerHillChallengeActive,
|
||||
[TRAINER_HILL_FUNC_POST_BATTLE_TEXT] = ShowTrainerHillPostBattleText,
|
||||
[TRAINER_HILL_FUNC_SET_ALL_TRAINER_FLAGS] = SetAllTrainerFlags,
|
||||
[TRAINER_HILL_FUNC_GET_GAME_SAVED] = GetGameSaved,
|
||||
[TRAINER_HILL_FUNC_SET_GAME_SAVED] = SetGameSaved,
|
||||
[TRAINER_HILL_FUNC_CLEAR_GAME_SAVED] = ClearGameSaved,
|
||||
[TRAINER_HILL_FUNC_GET_WON] = GetChallengeWon,
|
||||
[TRAINER_HILL_FUNC_SET_TAG] = TrainerHillSetTag,
|
||||
[TRAINER_HILL_FUNC_GET_GAME_SAVED] = GetGameSaved,
|
||||
[TRAINER_HILL_FUNC_SET_GAME_SAVED] = SetGameSaved,
|
||||
[TRAINER_HILL_FUNC_CLEAR_GAME_SAVED] = ClearGameSaved,
|
||||
[TRAINER_HILL_FUNC_GET_WON] = GetChallengeWon,
|
||||
[TRAINER_HILL_FUNC_SET_TAG] = TrainerHillSetTag,
|
||||
};
|
||||
|
||||
static const u8 *const sTagMatchStrings[] =
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -424,7 +424,7 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar
|
||||
level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]);
|
||||
if (flags & WILD_CHECK_REPEL && !IsWildLevelAllowedByRepel(level))
|
||||
return FALSE;
|
||||
if (gMapHeader.mapLayoutId != LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3 && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level))
|
||||
if (gMapHeader.mapLayoutId != LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS && flags & WILD_CHECK_KEEN_EYE && !IsAbilityAllowingEncounter(level))
|
||||
return FALSE;
|
||||
|
||||
CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level);
|
||||
@@ -533,7 +533,7 @@ bool8 StandardWildEncounter(u16 currMetaTileBehavior, u16 previousMetaTileBehavi
|
||||
headerId = GetCurrentMapWildMonHeaderId();
|
||||
if (headerId == 0xFFFF)
|
||||
{
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3)
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS)
|
||||
{
|
||||
headerId = GetBattlePikeWildMonHeaderId();
|
||||
if (previousMetaTileBehavior != currMetaTileBehavior && !DoGlobalWildEncounterDiceRoll())
|
||||
@@ -676,7 +676,7 @@ bool8 SweetScentWildEncounter(void)
|
||||
headerId = GetCurrentMapWildMonHeaderId();
|
||||
if (headerId == 0xFFFF)
|
||||
{
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_RANDOM_ROOM3)
|
||||
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS)
|
||||
{
|
||||
headerId = GetBattlePikeWildMonHeaderId();
|
||||
if (TryGenerateWildMon(gBattlePikeWildMonHeaders[headerId].landMonsInfo, WILD_AREA_LAND, 0) != TRUE)
|
||||
|
||||
Reference in New Issue
Block a user