summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_anim.c20
-rw-r--r--src/battle_anim_80A5C6C.c444
-rw-r--r--src/battle_anim_80A9C70.c2
-rw-r--r--src/battle_anim_80D51AC.c24
-rwxr-xr-xsrc/battle_anim_8170478.c2267
-rw-r--r--src/battle_anim_effects_1.c5609
-rwxr-xr-xsrc/battle_anim_effects_2.c3884
-rwxr-xr-xsrc/battle_anim_effects_3.c4889
-rw-r--r--src/battle_anim_utility_funcs.c10
-rw-r--r--src/battle_controller_link_opponent.c6
-rw-r--r--src/battle_controller_link_partner.c6
-rw-r--r--src/battle_controller_opponent.c6
-rw-r--r--src/battle_controller_player.c6
-rw-r--r--src/battle_controller_player_partner.c8
-rw-r--r--src/battle_controller_recorded_opponent.c8
-rw-r--r--src/battle_controller_recorded_player.c8
-rw-r--r--src/battle_controller_wally.c2
-rw-r--r--src/battle_dome.c11
-rw-r--r--src/battle_factory.c13
-rw-r--r--src/battle_gfx_sfx_util.c6
-rw-r--r--src/battle_intro.c741
-rw-r--r--src/battle_main.c23
-rw-r--r--src/battle_pike.c2
-rw-r--r--src/battle_pyramid.c3
-rw-r--r--src/battle_script_commands.c10
-rw-r--r--src/battle_setup.c4
-rw-r--r--src/battle_tent.c11
-rw-r--r--src/battle_tower.c1022
-rw-r--r--src/battle_transition.c4
-rw-r--r--src/battle_util.c18
-rw-r--r--src/battle_util2.c2
-rw-r--r--src/birch_pc.c14
-rw-r--r--src/blit.c10
-rw-r--r--src/bug.c16
-rwxr-xr-xsrc/cable_car.c1006
-rw-r--r--src/clock.c2
-rw-r--r--src/contest.c2
-rw-r--r--src/contest_painting.c711
-rw-r--r--src/credits.c12
-rw-r--r--src/data/battle_frontier/battle_frontier_mons.h6177
-rw-r--r--src/data/battle_frontier/battle_frontier_trainer_mons.h15229
-rw-r--r--src/data/battle_frontier/battle_frontier_trainers.h2403
-rw-r--r--src/data/battle_frontier/battle_tent.h3005
-rw-r--r--src/data/graphics/berry_fix.h2
-rw-r--r--src/data/pokemon_graphics/front_anims.h885
-rw-r--r--src/data/pokemon_graphics/still_front_pic_table.h884
-rw-r--r--src/data/wild_encounters.h4573
-rw-r--r--src/decoration.c2
-rw-r--r--src/dragon.c14
-rw-r--r--src/easy_chat.c3
-rw-r--r--src/effects_1.c2093
-rw-r--r--src/effects_2.c1197
-rw-r--r--src/egg_hatch.c6
-rw-r--r--src/electric.c1089
-rw-r--r--src/event_data.c3
-rw-r--r--src/event_object_movement.c2
-rw-r--r--src/field_control_avatar.c9
-rw-r--r--src/field_effect.c26
-rw-r--r--src/field_poison.c4
-rw-r--r--src/field_screen.c15
-rw-r--r--src/field_screen_effect.c1261
-rw-r--r--src/field_specials.c10
-rw-r--r--src/field_weather.c1095
-rw-r--r--src/field_weather_effect.c2471
-rw-r--r--src/fieldmap.c2
-rw-r--r--src/fight.c40
-rw-r--r--src/fire.c40
-rw-r--r--src/fldeff_flash.c4
-rw-r--r--src/fldeff_groundshake.c16
-rw-r--r--src/fldeff_misc.c1525
-rw-r--r--src/fldeff_softboiled.c2
-rw-r--r--src/fldeff_sweetscent.c5
-rw-r--r--src/frontier_util.c2
-rw-r--r--src/ghost.c1161
-rw-r--r--src/graphics.c6
-rw-r--r--src/ground.c12
-rw-r--r--src/hall_of_fame.c2
-rw-r--r--src/item.c2
-rwxr-xr-xsrc/item_menu.c260
-rw-r--r--src/item_menu_icons.c32
-rwxr-xr-xsrc/item_use.c19
-rw-r--r--src/learn_move.c34
-rw-r--r--src/load_save.c1
-rw-r--r--src/mauville_old_man.c16
-rw-r--r--src/normal.c36
-rw-r--r--src/overworld.c16
-rwxr-xr-xsrc/party_menu.c7164
-rw-r--r--src/player_pc.c3
-rw-r--r--src/poison.c8
-rw-r--r--src/pokeball.c14
-rw-r--r--src/pokedex.c164
-rw-r--r--src/pokemon.c44
-rw-r--r--src/pokemon_storage_system.c8
-rw-r--r--src/pokemon_summary_screen.c6
-rw-r--r--src/record_mixing.c8
-rw-r--r--src/reshow_battle_screen.c8
-rw-r--r--src/rock.c12
-rw-r--r--src/rom_8011DC0.c2
-rw-r--r--src/save.c1
-rw-r--r--src/scrcmd.c3
-rwxr-xr-xsrc/script_pokemon_util_80F87D8.c6
-rw-r--r--src/secret_base.c80
-rwxr-xr-xsrc/shop.c2
-rw-r--r--src/start_menu.c18
-rw-r--r--src/tv.c10
-rw-r--r--src/walda_phrase.c2
-rw-r--r--src/water.c2185
-rw-r--r--src/wild_encounter.c4553
-rw-r--r--src/window.c2
109 files changed, 71125 insertions, 9711 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 18099091c..2d211c411 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -26,8 +26,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern const u16 gMovesWithQuietBGM[];
extern const u8 *const gBattleAnims_Moves[];
-extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
-extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
extern const struct BattleAnimBackground gBattleAnimBackgroundTable[];
// this file's functions
@@ -1658,7 +1656,7 @@ static void ScriptCmd_createsprite(void)
else
argVar *= -1;
- subpriority = sub_80A82E4(gBattleAnimTarget) + (s8)(argVar);
+ subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (s8)(argVar);
}
else
{
@@ -1667,13 +1665,17 @@ static void ScriptCmd_createsprite(void)
else
argVar *= -1;
- subpriority = sub_80A82E4(gBattleAnimAttacker) + (s8)(argVar);
+ subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + (s8)(argVar);
}
if (subpriority < 3)
subpriority = 3;
- CreateSpriteAndAnimate(template, GetBattlerSpriteCoord(gBattleAnimTarget, 2), GetBattlerSpriteCoord(gBattleAnimTarget, 3), subpriority);
+ CreateSpriteAndAnimate(
+ template,
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2),
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET),
+ subpriority);
gAnimVisualTaskCount++;
}
@@ -3031,12 +3033,12 @@ static void ScriptCmd_doublebattle_2D(void)
{
if (wantedBattler == ANIM_ATTACKER)
{
- r4 = sub_80A8364(gBattleAnimAttacker);
+ r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
}
else
{
- r4 = sub_80A8364(gBattleAnimTarget);
+ r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
}
if (spriteId != 0xFF)
@@ -3066,12 +3068,12 @@ static void ScriptCmd_doublebattle_2E(void)
{
if (wantedBattler == ANIM_ATTACKER)
{
- r4 = sub_80A8364(gBattleAnimAttacker);
+ r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
}
else
{
- r4 = sub_80A8364(gBattleAnimTarget);
+ r4 = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
}
diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c
index 8ba1a8222..e17dde078 100644
--- a/src/battle_anim_80A5C6C.c
+++ b/src/battle_anim_80A5C6C.c
@@ -35,24 +35,22 @@ extern const union AffineAnimCmd *gUnknown_082FF6C0[];
// This file's functions.
void sub_80A64EC(struct Sprite *sprite);
-void sub_80A653C(struct Sprite *sprite);
void sub_80A6FB4(struct Sprite *sprite);
void sub_80A7144(struct Sprite *sprite);
void sub_80A791C(struct Sprite *sprite);
void sub_80A8DFC(struct Sprite *sprite);
void sub_80A8E88(struct Sprite *sprite);
-void sub_80A7E6C(u8 spriteId);
-u16 sub_80A7F18(u8 spriteId);
+void SetBattlerSpriteYOffsetFromYScale(u8 spriteId);
+u16 GetBattlerYDeltaFromSpriteId(u8 spriteId);
void AnimTask_BlendMonInAndOutSetup(struct Task *task);
void sub_80A7AFC(u8 taskId);
void sub_80A8CAC(u8 taskId);
void AnimTask_BlendMonInAndOutStep(u8 taskId);
bool8 sub_80A7238(void);
-u8 sub_80A82E4(u8 battlerId);
void sub_80A8D78(struct Task *task, u8 taskId);
// EWRAM vars
-EWRAM_DATA static union AffineAnimCmd *gUnknown_02038444 = NULL;
+EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL;
// Const rom data
static const struct UCoords8 sBattlerCoords[][4] =
@@ -125,8 +123,7 @@ static const struct SpriteSheet sUnknown_08525FC0[] =
{ gMiscBlank_Gfx, 0x800, 55126, },
};
-// code
-u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
+u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType)
{
u8 retVal;
u16 species;
@@ -134,11 +131,11 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
if (IsContest())
{
- if (attributeId == BATTLER_COORD_3 && battlerId == 3)
- attributeId = BATTLER_COORD_Y;
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET && battlerId == 3)
+ coordType = BATTLER_COORD_Y;
}
- switch (attributeId)
+ switch (coordType)
{
case BATTLER_COORD_X:
case BATTLER_COORD_X_2:
@@ -147,15 +144,15 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
case BATTLER_COORD_Y:
retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y;
break;
- case BATTLER_COORD_3:
- case BATTLER_COORD_4:
+ case BATTLER_COORD_Y_PIC_OFFSET:
+ case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT:
default:
if (IsContest())
{
- if (shared19348.unk4_0)
- species = shared19348.unk2;
+ if (gContestResources->field_18->unk4_0)
+ species = gContestResources->field_18->unk2;
else
- species = shared19348.species;
+ species = gContestResources->field_18->species;
}
else
{
@@ -176,7 +173,7 @@ u8 GetBattlerSpriteCoord(u8 battlerId, u8 attributeId)
species = spriteInfo[battlerId].transformSpecies;
}
}
- if (attributeId == BATTLER_COORD_3)
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET)
retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE);
else
retVal = GetBattlerSpriteFinal_Y(battlerId, species, FALSE);
@@ -200,10 +197,10 @@ u8 GetBattlerYDelta(u8 battlerId, u16 species)
{
if (IsContest())
{
- if (shared19348.unk4_0)
- personality = shared19348.unk10;
+ if (gContestResources->field_18->unk4_0)
+ personality = gContestResources->field_18->unk10;
else
- personality = shared19348.unk8;
+ personality = gContestResources->field_18->unk8;
}
else
{
@@ -308,19 +305,19 @@ u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3)
return y;
}
-u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId)
+u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType)
{
u16 species;
struct BattleSpriteInfo *spriteInfo;
- if (attributeId == BATTLER_COORD_3 || attributeId == BATTLER_COORD_4)
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET || coordType == BATTLER_COORD_Y_PIC_OFFSET_DEFAULT)
{
if (IsContest())
{
- if (shared19348.unk4_0)
- species = shared19348.unk2;
+ if (gContestResources->field_18->unk4_0)
+ species = gContestResources->field_18->unk2;
else
- species = shared19348.species;
+ species = gContestResources->field_18->species;
}
else
{
@@ -330,20 +327,20 @@ u8 GetBattlerSpriteCoord2(u8 battlerId, u8 attributeId)
else
species = spriteInfo[battlerId].transformSpecies;
}
- if (attributeId == BATTLER_COORD_3)
+ if (coordType == BATTLER_COORD_Y_PIC_OFFSET)
return GetBattlerSpriteFinal_Y(battlerId, species, TRUE);
else
return GetBattlerSpriteFinal_Y(battlerId, species, FALSE);
}
else
{
- return GetBattlerSpriteCoord(battlerId, attributeId);
+ return GetBattlerSpriteCoord(battlerId, coordType);
}
}
u8 GetBattlerSpriteDefault_Y(u8 battlerId)
{
- return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_4);
+ return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT);
}
u8 GetSubstituteSpriteDefault_Y(u8 battlerId)
@@ -387,11 +384,11 @@ u8 GetBattlerYCoordWithElevation(u8 battlerId)
return y;
}
-u8 GetAnimBattlerSpriteId(u8 which)
+u8 GetAnimBattlerSpriteId(u8 animBattler)
{
u8 *sprites;
- if (which == ANIM_ATTACKER)
+ if (animBattler == ANIM_ATTACKER)
{
if (IsBattlerSpritePresent(gBattleAnimAttacker))
{
@@ -403,7 +400,7 @@ u8 GetAnimBattlerSpriteId(u8 which)
return 0xff;
}
}
- else if (which == ANIM_TARGET)
+ else if (animBattler == ANIM_TARGET)
{
if (IsBattlerSpritePresent(gBattleAnimTarget))
{
@@ -415,7 +412,7 @@ u8 GetAnimBattlerSpriteId(u8 which)
return 0xff;
}
}
- else if (which == ANIM_ATK_PARTNER)
+ else if (animBattler == ANIM_ATK_PARTNER)
{
if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
return 0xff;
@@ -443,7 +440,7 @@ void SetCallbackToStoredInData6(struct Sprite *sprite)
sprite->callback = (void (*)(struct Sprite *))callback;
}
-void sub_80A62EC(struct Sprite *sprite)
+void TranslateSpriteInCircleOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
{
@@ -462,7 +459,7 @@ void sub_80A62EC(struct Sprite *sprite)
}
}
-void sub_80A634C(struct Sprite *sprite)
+void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite)
{
if (sprite->data[3])
{
@@ -539,7 +536,7 @@ void WaitAnimForDuration(struct Sprite *sprite)
void sub_80A64D0(struct Sprite *sprite)
{
sub_80A64EC(sprite);
- sprite->callback = sub_80A653C;
+ sprite->callback = TranslateSpriteOverDuration;
sprite->callback(sprite);
}
@@ -557,7 +554,7 @@ void sub_80A64EC(struct Sprite *sprite)
sprite->data[1] = old;
}
-void sub_80A653C(struct Sprite *sprite)
+void TranslateSpriteOverDuration(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -571,7 +568,7 @@ void sub_80A653C(struct Sprite *sprite)
}
}
-void sub_80A656C(struct Sprite *sprite)
+void AnimTranslateLinearSimple(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -613,7 +610,7 @@ void sub_80A65EC(struct Sprite *sprite)
sprite->callback = sub_80A64D0;
}
-void sub_80A6630(struct Sprite *sprite)
+void TranslateMonBGUntil(struct Sprite *sprite)
{
if (sprite->data[0] > 0)
{
@@ -627,7 +624,7 @@ void sub_80A6630(struct Sprite *sprite)
}
}
-// Same as sub_80A6630, but it operates on sub-pixel values
+// Same as TranslateMonBGUntil, but it operates on sub-pixel values
// to handle slower translations.
void sub_80A6680(struct Sprite *sprite)
{
@@ -666,7 +663,7 @@ void sub_80A66DC(struct Sprite *sprite)
}
}
-void move_anim_8074EE0(struct Sprite *sprite)
+void DestroySpriteAndMatrix(struct Sprite *sprite)
{
FreeSpriteOamMatrix(sprite);
DestroyAnimSprite(sprite);
@@ -684,16 +681,16 @@ void sub_80A6760(struct Sprite *sprite)
void sub_80A67A4(struct Sprite *sprite)
{
ResetPaletteStructByUid(sprite->data[5]);
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
-void sub_80A67BC(struct Sprite *sprite)
+void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite)
{
if (sprite->affineAnimEnded)
SetCallbackToStoredInData6(sprite);
}
-void sub_80A67D8(struct Sprite *sprite)
+void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite)
{
if (sprite->animEnded)
SetCallbackToStoredInData6(sprite);
@@ -713,31 +710,33 @@ void sub_80A6814(u8 taskId)
DestroyAnimVisualTask(taskId);
}
-void sub_80A6838(struct Sprite *sprite)
+void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite)
{
- sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
-void sub_80A6864(struct Sprite *sprite, s16 a2)
+// Sets the initial x offset of the anim sprite depending on the horizontal orientation
+// of the two involved mons.
+void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset)
{
- u16 v1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
- u16 v2 = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ u16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ u16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
- if (v1 > v2)
+ if (attackerX > targetX)
{
- sprite->pos1.x -= a2;
+ sprite->pos1.x -= xOffset;
}
- else if (v1 < v2)
+ else if (attackerX < targetX)
{
- sprite->pos1.x += a2;
+ sprite->pos1.x += xOffset;
}
else
{
- if (GetBattlerSide(gBattleAnimAttacker) != 0)
- sprite->pos1.x -= a2;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= xOffset;
else
- sprite->pos1.x += a2;
+ sprite->pos1.x += xOffset;
}
}
@@ -752,7 +751,7 @@ void InitAnimArcTranslation(struct Sprite *sprite)
bool8 TranslateAnimArc(struct Sprite *sprite)
{
- if (TranslateAnimLinear(sprite))
+ if (AnimTranslateLinear(sprite))
return TRUE;
sprite->data[7] += sprite->data[6];
sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]);
@@ -761,7 +760,7 @@ bool8 TranslateAnimArc(struct Sprite *sprite)
bool8 sub_80A6934(struct Sprite *sprite)
{
- if (TranslateAnimLinear(sprite))
+ if (AnimTranslateLinear(sprite))
return TRUE;
sprite->data[7] += sprite->data[6];
sprite->pos2.x += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]);
@@ -776,30 +775,32 @@ void oamt_add_pos2_onto_pos1(struct Sprite *sprite)
sprite->pos2.y = 0;
}
-void sub_80A6980(struct Sprite *sprite, bool8 a2)
+void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets)
{
- if (!a2)
+ // Battle anim sprites are automatically created at the anim target's center, which
+ // is why there is no else clause for the "respectMonPicOffsets" check.
+ if (!respectMonPicOffsets)
{
- sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, 0);
- sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y);
}
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
}
-void InitAnimSpritePos(struct Sprite *sprite, u8 a2)
+void InitSpritePosToAnimAttacker(struct Sprite *sprite, u8 respectMonPicOffsets)
{
- if (!a2)
+ if (!respectMonPicOffsets)
{
- sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0);
- sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y);
}
else
{
- sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 2);
- sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 3);
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
}
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
}
@@ -909,7 +910,7 @@ void sub_80A6B90(struct UnknownAnimStruct2 *unk, u32 arg1)
}
}
-void sub_80A6BFC(struct UnknownAnimStruct2 *unk)
+void sub_80A6BFC(struct UnknownAnimStruct2 *unk, u8 unused)
{
unk->bgTiles = gUnknown_0202305C;
unk->unk4 = (u16 *)gUnknown_02023060;
@@ -920,7 +921,7 @@ void sub_80A6BFC(struct UnknownAnimStruct2 *unk)
unk->tilesOffset = 0;
unk->unkC = 0;
}
- else if (sub_80A8364(gBattleAnimAttacker) == 1)
+ else if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
{
unk->unk8 = 8;
unk->bgId = 1;
@@ -1061,7 +1062,7 @@ void sub_80A6F14(struct Sprite *sprite)
sprite->callback(sprite);
}
-bool8 TranslateAnimLinear(struct Sprite *sprite)
+bool8 AnimTranslateLinear(struct Sprite *sprite)
{
u16 v1, v2, x, y;
@@ -1093,14 +1094,14 @@ bool8 TranslateAnimLinear(struct Sprite *sprite)
void sub_80A6F98(struct Sprite *sprite)
{
- if (TranslateAnimLinear(sprite))
+ if (AnimTranslateLinear(sprite))
SetCallbackToStoredInData6(sprite);
}
void sub_80A6FB4(struct Sprite *sprite)
{
sub_8039E9C(sprite);
- if (TranslateAnimLinear(sprite))
+ if (AnimTranslateLinear(sprite))
SetCallbackToStoredInData6(sprite);
}
@@ -1120,14 +1121,14 @@ void sub_80A7000(struct Sprite *sprite)
sprite->callback(sprite);
}
-void sub_80A7028(struct Sprite *sprite)
+static void InitAnimFastLinearTranslation(struct Sprite *sprite)
{
- int x = sprite->data[2] - sprite->data[1];
- int y = sprite->data[4] - sprite->data[3];
- bool8 x_sign = x < 0;
- bool8 y_sign = y < 0;
- u16 x2 = abs(x) << 4;
- u16 y2 = abs(y) << 4;
+ int xDiff = sprite->data[2] - sprite->data[1];
+ int yDiff = sprite->data[4] - sprite->data[3];
+ bool8 x_sign = xDiff < 0;
+ bool8 y_sign = yDiff < 0;
+ u16 x2 = abs(xDiff) << 4;
+ u16 y2 = abs(yDiff) << 4;
x2 /= sprite->data[0];
y2 /= sprite->data[0];
@@ -1148,16 +1149,16 @@ void sub_80A7028(struct Sprite *sprite)
sprite->data[3] = 0;
}
-void sub_80A70C0(struct Sprite *sprite)
+void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
- sub_80A7028(sprite);
+ InitAnimFastLinearTranslation(sprite);
sprite->callback = sub_80A7144;
sprite->callback(sprite);
}
-bool8 sub_80A70E8(struct Sprite *sprite)
+bool8 AnimFastTranslateLinear(struct Sprite *sprite)
{
u16 v1, v2, x, y;
@@ -1189,27 +1190,27 @@ bool8 sub_80A70E8(struct Sprite *sprite)
void sub_80A7144(struct Sprite *sprite)
{
- if (sub_80A70E8(sprite))
+ if (AnimFastTranslateLinear(sprite))
SetCallbackToStoredInData6(sprite);
}
-void sub_80A7160(struct Sprite *sprite)
+void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite)
{
- int v1 = abs(sprite->data[2] - sprite->data[1]) << 4;
- sprite->data[0] = v1 / sprite->data[0];
- sub_80A7028(sprite);
+ int xDiff = abs(sprite->data[2] - sprite->data[1]) << 4;
+ sprite->data[0] = xDiff / sprite->data[0];
+ InitAnimFastLinearTranslation(sprite);
}
void sub_80A718C(struct Sprite *sprite)
{
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
- sub_80A7160(sprite);
+ InitAnimFastLinearTranslationWithSpeed(sprite);
sprite->callback = sub_80A7144;
sprite->callback(sprite);
}
-void obj_id_set_rotscale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation)
+void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation)
{
int i;
struct ObjAffineSrcData src;
@@ -1243,7 +1244,7 @@ bool8 sub_80A7238(void)
}
}
-void sub_80A7270(u8 spriteId, u8 objMode)
+void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode)
{
u8 battlerId = gSprites[spriteId].data[0];
@@ -1252,32 +1253,34 @@ void sub_80A7270(u8 spriteId, u8 objMode)
gSprites[spriteId].oam.objMode = objMode;
gSprites[spriteId].affineAnimPaused = TRUE;
if (!IsContest() && !gSprites[spriteId].oam.affineMode)
- gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].field_6;
- gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].matrixNum;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
}
-void sub_80A7344(u8 spriteId)
+void ResetSpriteRotScale(u8 spriteId)
{
- obj_id_set_rotscale(spriteId, 0x100, 0x100, 0);
- gSprites[spriteId].oam.affineMode = 1;
+ SetSpriteRotScale(spriteId, 0x100, 0x100, 0);
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL;
gSprites[spriteId].oam.objMode = 0;
gSprites[spriteId].affineAnimPaused = FALSE;
CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
}
-void sub_80A73A0(u8 spriteId)
+// Sets the sprite's y offset equal to the y displacement caused by the
+// matrix's rotation.
+void SetBattlerSpriteYOffsetFromRotation(u8 spriteId)
{
- u16 matrix = gSprites[spriteId].oam.matrixNum;
- s16 c = gOamMatrices[matrix].c;
-
+ u16 matrixNum = gSprites[spriteId].oam.matrixNum;
+ // The "c" component of the battler sprite matrix contains the sine of the rotation angle divided by some scale amount.
+ s16 c = gOamMatrices[matrixNum].c;
if (c < 0)
c = -c;
+
gSprites[spriteId].pos2.y = c >> 3;
}
-// related to obj_id_set_rotscale
-void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 rotation)
+void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation)
{
int i;
struct ObjAffineSrcData src;
@@ -1286,7 +1289,7 @@ void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro
if (sprite->oam.affineMode & 1)
{
sprite->affineAnimPaused = TRUE;
- if (a2)
+ if (recalcCenterVector)
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
src.xScale = xScale;
src.yScale = yScale;
@@ -1304,7 +1307,7 @@ void sub_80A73E0(struct Sprite *sprite, bool8 a2, s16 xScale, s16 yScale, u16 ro
void sub_80A749C(struct Sprite *sprite)
{
- sub_80A73E0(sprite, TRUE, 0x100, 0x100, 0);
+ TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, 0);
sprite->affineAnimPaused = FALSE;
CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode);
}
@@ -1320,32 +1323,32 @@ u16 ArcTan2Neg(s16 a, s16 b)
return -var;
}
-void sub_80A750C(u16 a1, bool8 a2)
+void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor)
{
int i;
- struct PlttData *c;
- struct PlttData *c2;
+ struct PlttData *originalColor;
+ struct PlttData *destColor;
u16 average;
- a1 *= 0x10;
+ paletteNum *= 16;
- if (!a2)
+ if (!restoreOriginalColor)
{
- for (i = 0; i < 0x10; i++)
+ for (i = 0; i < 16; i++)
{
- c = (struct PlttData *)&gPlttBufferUnfaded[a1 + i];
- average = c->r + c->g + c->b;
+ originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i];
+ average = originalColor->r + originalColor->g + originalColor->b;
average /= 3;
- c2 = (struct PlttData *)&gPlttBufferFaded[a1 + i];
- c2->r = average;
- c2->g = average;
- c2->b = average;
+ destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i];
+ destColor->r = average;
+ destColor->g = average;
+ destColor->b = average;
}
}
else
{
- CpuCopy32(&gPlttBufferUnfaded[a1], &gPlttBufferFaded[a1], 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32);
}
}
@@ -1472,15 +1475,15 @@ void sub_80A77C8(struct Sprite *sprite)
else
var = FALSE;
if (!gBattleAnimArgs[2])
- InitAnimSpritePos(sprite, var);
+ InitSpritePosToAnimAttacker(sprite, var);
else
- sub_80A6980(sprite, var);
+ InitSpritePosToAnimTarget(sprite, var);
sprite->data[0]++;
}
else if (sprite->animEnded || sprite->affineAnimEnded)
{
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
}
@@ -1495,7 +1498,7 @@ void sub_80A77C8(struct Sprite *sprite)
void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
{
bool8 v1;
- u8 attributeId;
+ u8 coordType;
if (!(gBattleAnimArgs[5] & 0xff00))
v1 = TRUE;
@@ -1503,24 +1506,24 @@ void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite)
v1 = FALSE;
if (!(gBattleAnimArgs[5] & 0xff))
- attributeId = BATTLER_COORD_3;
+ coordType = BATTLER_COORD_Y_PIC_OFFSET;
else
- attributeId = BATTLER_COORD_Y;
+ coordType = BATTLER_COORD_Y;
- InitAnimSpritePos(sprite, v1);
+ InitSpritePosToAnimAttacker(sprite, v1);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
- sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, attributeId) + gBattleAnimArgs[3];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3];
sprite->callback = StartAnimLinearTranslation;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
void sub_80A78AC(struct Sprite *sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[4];
@@ -1545,7 +1548,7 @@ void sub_80A7938(struct Sprite *sprite)
if (!gBattleAnimArgs[6])
{
r4 = TRUE;
- attributeId = BATTLER_COORD_3;
+ attributeId = BATTLER_COORD_Y_PIC_OFFSET;
}
else
{
@@ -1554,17 +1557,17 @@ void sub_80A7938(struct Sprite *sprite)
}
if (!gBattleAnimArgs[5])
{
- InitAnimSpritePos(sprite, r4);
+ InitSpritePosToAnimAttacker(sprite, r4);
battlerId = gBattleAnimAttacker;
}
else
{
- sub_80A6980(sprite, r4);
+ InitSpritePosToAnimTarget(sprite, r4);
battlerId = gBattleAnimTarget;
}
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
- sub_80A6980(sprite, r4);
+ InitSpritePosToAnimTarget(sprite, r4);
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
sprite->data[4] = GetBattlerSpriteCoord(battlerId, attributeId) + gBattleAnimArgs[3];
@@ -1572,19 +1575,19 @@ void sub_80A7938(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
-s16 duplicate_obj_of_side_rel2move_in_transparent_mode(u8 whichBattler)
+s16 CloneBattlerSpriteWithBlend(u8 animBattler)
{
u16 i;
- u8 spriteId = GetAnimBattlerSpriteId(whichBattler);
+ u8 spriteId = GetAnimBattlerSpriteId(animBattler);
- if (spriteId != 0xff)
+ if (spriteId != 0xFF)
{
for (i = 0; i < MAX_SPRITES; i++)
{
if (!gSprites[i].inUse)
{
gSprites[i] = gSprites[spriteId];
- gSprites[i].oam.objMode = 1;
+ gSprites[i].oam.objMode = ST_OAM_OBJ_BLEND;
gSprites[i].invisible = FALSE;
return i;
}
@@ -1731,49 +1734,49 @@ void sub_80A7CB4(u8 task)
AnimTask_BlendMonInAndOutSetup(&gTasks[task]);
}
-void sub_80A7CFC(struct Task *task, u8 a2, const void *a3)
+void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds)
{
task->data[7] = 0;
task->data[8] = 0;
task->data[9] = 0;
- task->data[15] = a2;
+ task->data[15] = spriteId;
task->data[10] = 0x100;
task->data[11] = 0x100;
task->data[12] = 0;
- sub_80A8048(&task->data[13], &task->data[14], a3);
- sub_80A7270(a2, 0);
+ StorePointerInVars(&task->data[13], &task->data[14], affineAnimCmds);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
}
-bool8 sub_80A7D34(struct Task *task)
+bool8 RunAffineAnimFromTaskData(struct Task *task)
{
- gUnknown_02038444 = sub_80A8050(task->data[13], task->data[14]) + (task->data[7] << 3);
- switch (gUnknown_02038444->type)
+ gAnimTaskAffineAnim = LoadPointerFromVars(task->data[13], task->data[14]) + (task->data[7] << 3);
+ switch (gAnimTaskAffineAnim->type)
{
default:
- if (!gUnknown_02038444->frame.duration)
+ if (!gAnimTaskAffineAnim->frame.duration)
{
- task->data[10] = gUnknown_02038444->frame.xScale;
- task->data[11] = gUnknown_02038444->frame.yScale;
- task->data[12] = gUnknown_02038444->frame.rotation;
+ task->data[10] = gAnimTaskAffineAnim->frame.xScale;
+ task->data[11] = gAnimTaskAffineAnim->frame.yScale;
+ task->data[12] = gAnimTaskAffineAnim->frame.rotation;
task->data[7]++;
- gUnknown_02038444++;
+ gAnimTaskAffineAnim++;
}
- task->data[10] += gUnknown_02038444->frame.xScale;
- task->data[11] += gUnknown_02038444->frame.yScale;
- task->data[12] += gUnknown_02038444->frame.rotation;
- obj_id_set_rotscale(task->data[15], task->data[10], task->data[11], task->data[12]);
- sub_80A7E6C(task->data[15]);
- if (++task->data[8] >= gUnknown_02038444->frame.duration)
+ task->data[10] += gAnimTaskAffineAnim->frame.xScale;
+ task->data[11] += gAnimTaskAffineAnim->frame.yScale;
+ task->data[12] += gAnimTaskAffineAnim->frame.rotation;
+ SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]);
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
+ if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration)
{
task->data[8] = 0;
task->data[7]++;
}
break;
case AFFINEANIMCMDTYPE_JUMP:
- task->data[7] = gUnknown_02038444->jump.target;
+ task->data[7] = gAnimTaskAffineAnim->jump.target;
break;
case AFFINEANIMCMDTYPE_LOOP:
- if (gUnknown_02038444->loop.count)
+ if (gAnimTaskAffineAnim->loop.count)
{
if (task->data[9])
{
@@ -1785,7 +1788,7 @@ bool8 sub_80A7D34(struct Task *task)
}
else
{
- task->data[9] = gUnknown_02038444->loop.count;
+ task->data[9] = gAnimTaskAffineAnim->loop.count;
}
if (!task->data[7])
{
@@ -1794,8 +1797,8 @@ bool8 sub_80A7D34(struct Task *task)
for (;;)
{
task->data[7]--;
- gUnknown_02038444--;
- if (gUnknown_02038444->type == AFFINEANIMCMDTYPE_LOOP)
+ gAnimTaskAffineAnim--;
+ if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP)
{
task->data[7]++;
return TRUE;
@@ -1808,36 +1811,40 @@ bool8 sub_80A7D34(struct Task *task)
break;
case AFFINEANIMCMDTYPE_END:
gSprites[task->data[15]].pos2.y = 0;
- sub_80A7344(task->data[15]);
+ ResetSpriteRotScale(task->data[15]);
return FALSE;
}
return TRUE;
}
-void sub_80A7E6C(u8 spriteId)
+// Sets the sprite's y offset equal to the y displacement caused by the
+// matrix's scale in the y dimension.
+void SetBattlerSpriteYOffsetFromYScale(u8 spriteId)
{
- int var = 0x40 - sub_80A7F18(spriteId) * 2;
+ int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2;
u16 matrix = gSprites[spriteId].oam.matrixNum;
int var2 = (var << 8) / gOamMatrices[matrix].d;
- if (var2 > 0x80)
- var2 = 0x80;
+ if (var2 > 128)
+ var2 = 128;
gSprites[spriteId].pos2.y = (var - var2) / 2;
}
-void sub_80A7EC0(u8 spriteId, u8 spriteId2)
+// Sets the sprite's y offset equal to the y displacement caused by another sprite
+// matrix's scale in the y dimension.
+void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId)
{
- int var = 0x40 - sub_80A7F18(spriteId2) * 2;
+ int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2;
u16 matrix = gSprites[spriteId].oam.matrixNum;
int var2 = (var << 8) / gOamMatrices[matrix].d;
- if (var2 > 0x80)
- var2 = 0x80;
+ if (var2 > 128)
+ var2 = 128;
gSprites[spriteId].pos2.y = (var - var2) / 2;
}
-u16 sub_80A7F18(u8 spriteId)
+u16 GetBattlerYDeltaFromSpriteId(u8 spriteId)
{
struct BattleSpriteInfo *spriteInfo;
u8 battlerId = gSprites[spriteId].data[0];
@@ -1850,7 +1857,7 @@ u16 sub_80A7F18(u8 spriteId)
{
if (IsContest())
{
- species = shared19348.species;
+ species = gContestResources->field_18->species;
return gMonBackPicCoords[species].y_offset;
}
else
@@ -1884,18 +1891,18 @@ u16 sub_80A7F18(u8 spriteId)
}
}
}
- return 0x40;
+ return 64;
}
-void sub_80A8048(s16 *bottom, s16 *top, const void *ptr)
+void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr)
{
- *bottom = ((intptr_t) ptr) & 0xffff;
- *top = (((intptr_t) ptr) >> 16) & 0xffff;
+ *lo = ((intptr_t) ptr) & 0xffff;
+ *hi = (((intptr_t) ptr) >> 16) & 0xffff;
}
-void *sub_80A8050(s16 bottom, s16 top)
+void *LoadPointerFromVars(s16 lo, s16 hi)
{
- return (void *)((u16)bottom | ((u16)top << 16));
+ return (void *)((u16)lo | ((u16)hi << 16));
}
void sub_80A805C(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7)
@@ -1925,9 +1932,9 @@ u8 sub_80A80C8(struct Task *task)
task->data[9] = task->data[13];
task->data[10] = task->data[14];
}
- obj_id_set_rotscale(task->data[15], task->data[9], task->data[10], 0);
+ SetSpriteRotScale(task->data[15], task->data[9], task->data[10], 0);
if (task->data[8])
- sub_80A7E6C(task->data[15]);
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
else
gSprites[task->data[15]].pos2.y = 0;
return task->data[8];
@@ -1969,16 +1976,16 @@ void sub_80A8278(void)
{
if (IsBattlerSpriteVisible(i))
{
- gSprites[gBattlerSpriteIds[i]].subpriority = sub_80A82E4(i);
+ gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSpriteSubpriority(i);
gSprites[gBattlerSpriteIds[i]].oam.priority = 2;
}
}
}
-u8 sub_80A82E4(u8 battlerId)
+u8 GetBattlerSpriteSubpriority(u8 battlerId)
{
u8 position;
- u8 ret;
+ u8 subpriority;
if (IsContest())
{
@@ -1991,18 +1998,19 @@ u8 sub_80A82E4(u8 battlerId)
{
position = GetBattlerPosition(battlerId);
if (position == B_POSITION_PLAYER_LEFT)
- ret = 30;
+ subpriority = 30;
else if (position == B_POSITION_PLAYER_RIGHT)
- ret = 20;
+ subpriority = 20;
else if (position == B_POSITION_OPPONENT_LEFT)
- ret = 40;
+ subpriority = 40;
else
- ret = 50;
+ subpriority = 50;
}
- return ret;
+
+ return subpriority;
}
-u8 sub_80A8328(u8 battlerId)
+u8 GetBattlerSpriteBGPriority(u8 battlerId)
{
u8 position = GetBattlerPosition(battlerId);
@@ -2014,7 +2022,7 @@ u8 sub_80A8328(u8 battlerId)
return GetAnimBgAttribute(1, BG_ANIM_PRIORITY);
}
-u8 sub_80A8364(u8 battlerId)
+u8 GetBattlerSpriteBGPriorityRank(u8 battlerId)
{
if (!IsContest())
{
@@ -2101,15 +2109,15 @@ s16 sub_80A861C(u8 battlerId, u8 a2)
if (IsContest())
{
- if (shared19348.unk4_0)
+ if (gContestResources->field_18->unk4_0)
{
- species = shared19348.unk2;
- personality = shared19348.unk10;
+ species = gContestResources->field_18->unk2;
+ personality = gContestResources->field_18->unk10;
}
else
{
- species = shared19348.species;
- personality = shared19348.unk8;
+ species = gContestResources->field_18->species;
+ personality = gContestResources->field_18->unk8;
}
if (species == SPECIES_UNOWN)
{
@@ -2225,36 +2233,38 @@ s16 sub_80A861C(u8 battlerId, u8 a2)
}
}
-void SetAverageBattlerPositions(u8 battlerId, bool8 a2, s16 *x, s16 *y)
+void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y)
{
- u8 v1, v2;
- s16 v3, v4;
- s16 v5, v6;
+ u8 xCoordType, yCoordType;
+ s16 battlerX, battlerY;
+ s16 partnerX, partnerY;
- if (!a2)
+ if (!respectMonPicOffsets)
{
- v1 = 0;
- v2 = 1;
+ xCoordType = BATTLER_COORD_X;
+ yCoordType = BATTLER_COORD_Y;
}
else
{
- v1 = 2;
- v2 = 3;
+ xCoordType = BATTLER_COORD_X_2;
+ yCoordType = BATTLER_COORD_Y_PIC_OFFSET;
}
- v3 = GetBattlerSpriteCoord(battlerId, v1);
- v4 = GetBattlerSpriteCoord(battlerId, v2);
+
+ battlerX = GetBattlerSpriteCoord(battlerId, xCoordType);
+ battlerY = GetBattlerSpriteCoord(battlerId, yCoordType);
if (IsDoubleBattle() && !IsContest())
{
- v5 = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), v1);
- v6 = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), v2);
+ partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), xCoordType);
+ partnerY = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), yCoordType);
}
else
{
- v5 = v3;
- v6 = v4;
+ partnerX = battlerX;
+ partnerY = battlerY;
}
- *x = (v3 + v5) / 2;
- *y = (v4 + v6) / 2;
+
+ *x = (battlerX + partnerX) / 2;
+ *y = (battlerY + partnerY) / 2;
}
u8 sub_80A89C8(int battlerId, u8 spriteId, int species)
@@ -2271,7 +2281,7 @@ u8 sub_80A89C8(int battlerId, u8 spriteId, int species)
void sub_80A8A6C(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
{
sprite->pos1.x -= gBattleAnimArgs[0];
@@ -2287,7 +2297,7 @@ void sub_80A8A6C(struct Sprite *sprite)
sprite->data[1] = gBattleAnimArgs[3];
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A66DC;
}
@@ -2308,19 +2318,19 @@ void sub_80A8AEC(struct Sprite *sprite)
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
StartSpriteAnim(sprite, gBattleAnimArgs[6]);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A66DC;
}
void sub_80A8B64(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
sprite->pos1.x -= gBattleAnimArgs[0];
else
sprite->pos1.x += gBattleAnimArgs[0];
sprite->pos1.y += gBattleAnimArgs[1];
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -2340,7 +2350,7 @@ void sub_80A8BC4(u8 taskId)
dest = (task->data[4] + 0x10) * 0x10;
src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10;
- task->data[6] = sub_80A82E4(gBattleAnimAttacker);
+ task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
if (task->data[6] == 20 || task->data[6] == 40)
task->data[6] = 2;
else
@@ -2385,7 +2395,7 @@ void sub_80A8CAC(u8 taskId)
void sub_80A8D78(struct Task *task, u8 taskId)
{
- s16 spriteId = duplicate_obj_of_side_rel2move_in_transparent_mode(0);
+ s16 spriteId = CloneBattlerSpriteWithBlend(0);
if (spriteId >= 0)
{
gSprites[spriteId].oam.priority = task->data[6];
@@ -2411,7 +2421,7 @@ void sub_80A8DFC(struct Sprite *sprite)
void sub_80A8E30(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
- sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_3);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
if (!GetBattlerSide(gBattleAnimAttacker))
sprite->data[0] = 5;
else
diff --git a/src/battle_anim_80A9C70.c b/src/battle_anim_80A9C70.c
index 44c3ef79b..001f99d7f 100644
--- a/src/battle_anim_80A9C70.c
+++ b/src/battle_anim_80A9C70.c
@@ -175,7 +175,7 @@ static void sub_80A9E78(struct Sprite *sprite)
void sub_80A9EF4(u8 taskId)
{
s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32;
- s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_3) - 36;
+ s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) - 36;
u8 spriteId;
if (IsContest())
diff --git a/src/battle_anim_80D51AC.c b/src/battle_anim_80D51AC.c
index bfd0635f6..34eee7376 100644
--- a/src/battle_anim_80D51AC.c
+++ b/src/battle_anim_80D51AC.c
@@ -441,14 +441,14 @@ static void DoHorizontalLunge(struct Sprite *sprite)
sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection);
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
}
static void ReverseHorizontalLungeDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[1] = -sprite->data[1];
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -468,14 +468,14 @@ static void DoVerticalDip(struct Sprite *sprite)
sprite->data[3] = spriteId;
sprite->data[4] = gBattleAnimArgs[0];
StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection);
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
}
static void ReverseVerticalDipDirection(struct Sprite *sprite)
{
sprite->data[0] = sprite->data[4];
sprite->data[2] = -sprite->data[2];
- sprite->callback = sub_80A6630;
+ sprite->callback = TranslateMonBGUntil;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -834,7 +834,7 @@ void AnimTask_ScaleMonAndRestore(u8 taskId)
{
u8 spriteId;
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]);
- sub_80A7270(spriteId, gBattleAnimArgs[4]);
+ PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]);
gTasks[taskId].data[0] = gBattleAnimArgs[0];
gTasks[taskId].data[1] = gBattleAnimArgs[1];
gTasks[taskId].data[2] = gBattleAnimArgs[2];
@@ -851,7 +851,7 @@ void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
gTasks[taskId].data[10] += gTasks[taskId].data[0];
gTasks[taskId].data[11] += gTasks[taskId].data[1];
spriteId = gTasks[taskId].data[4];
- obj_id_set_rotscale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
if (--gTasks[taskId].data[2] == 0)
{
if (gTasks[taskId].data[3] > 0)
@@ -863,7 +863,7 @@ void AnimTask_ScaleMonAndRestoreStep(u8 taskId)
}
else
{
- sub_80A7344(spriteId);
+ ResetSpriteRotScale(spriteId);
DestroyAnimVisualTask(taskId);
return;
}
@@ -874,7 +874,7 @@ void sub_80D6134(u8 taskId)
{
u8 spriteId;
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
- sub_80A7270(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[3] != 1)
@@ -918,7 +918,7 @@ void sub_80D622C(u8 taskId)
{
u8 spriteId;
spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]);
- sub_80A7270(spriteId, 0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
gTasks[taskId].data[1] = 0;
gTasks[taskId].data[2] = gBattleAnimArgs[0];
if (gBattleAnimArgs[2] == 0)
@@ -955,17 +955,17 @@ void sub_80D622C(u8 taskId)
void sub_80D6308(u8 taskId)
{
gTasks[taskId].data[3] += gTasks[taskId].data[4];
- obj_id_set_rotscale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
+ SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]);
if (gTasks[taskId].data[7])
{
- sub_80A73A0(gTasks[taskId].data[5]);
+ SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].data[5]);
}
if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2])
{
switch (gTasks[taskId].data[6])
{
case 1:
- sub_80A7344(gTasks[taskId].data[5]);
+ ResetSpriteRotScale(gTasks[taskId].data[5]);
case 0:
default:
DestroyAnimVisualTask(taskId);
diff --git a/src/battle_anim_8170478.c b/src/battle_anim_8170478.c
new file mode 100755
index 000000000..502c4cdbb
--- /dev/null
+++ b/src/battle_anim_8170478.c
@@ -0,0 +1,2267 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "decompress.h"
+#include "dma3.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "m4a.h"
+#include "main.h"
+#include "palette.h"
+#include "pokeball.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/rgb.h"
+#include "constants/items.h"
+#include "constants/songs.h"
+
+// iwram
+int gUnknown_030062DC;
+u16 gUnknown_030062E0;
+u16 gUnknown_030062E4;
+
+static void sub_8170660(u8);
+static void sub_8170A38(u8);
+static void sub_8170EF0(u8);
+static void sub_8171104(struct Sprite *);
+static void sub_8171030(u8);
+static void sub_81710A8(u8);
+static void sub_8171134(struct Sprite *);
+static void sub_8171CAC(struct Sprite *);
+static void sub_81711E8(struct Sprite *);
+static void sub_8171240(struct Sprite *);
+static void sub_817138C(struct Sprite *);
+static void sub_81713D0(struct Sprite *);
+static void sub_81717B4(struct Sprite *);
+static void sub_81714D4(struct Sprite *);
+static void sub_8171520(struct Sprite *);
+static void sub_81717D8(struct Sprite *);
+static void sub_8171AE4(struct Sprite *);
+static void sub_81717F8(struct Sprite *);
+static void sub_81719EC(struct Sprite *);
+static void sub_81718D8(struct Sprite *);
+static void sub_81719C0(struct Sprite *);
+static void sub_8171D60(u8);
+static void sub_8171AAC(struct Sprite *);
+static void sub_8171BAC(struct Sprite *);
+static void sub_8171CE8(struct Sprite *);
+static void PokeBallOpenParticleAnimation_Step1(struct Sprite *);
+static void PokeBallOpenParticleAnimation_Step2(struct Sprite *);
+static void DestroyBallOpenAnimationParticle(struct Sprite *);
+static void FanOutBallOpenParticles_Step1(struct Sprite *);
+static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *);
+static void PremierBallOpenParticleAnimation_Step1(struct Sprite *);
+static void sub_8172AB0(u8);
+static void sub_8172B40(u8);
+static void sub_8172B90(u8);
+static void sub_8172FEC(u8);
+static void sub_81731FC(struct Sprite *);
+static void sub_8173250(struct Sprite *);
+static void sub_81731B0(u8);
+static void sub_817339C(struct Sprite *);
+static void sub_81733D4(struct Sprite *);
+static void sub_8173400(struct Sprite *);
+static void PokeBallOpenParticleAnimation(u8);
+static void GreatBallOpenParticleAnimation(u8);
+static void SafariBallOpenParticleAnimation(u8);
+static void UltraBallOpenParticleAnimation(u8);
+static void MasterBallOpenParticleAnimation(u8);
+static void DiveBallOpenParticleAnimation(u8);
+static void RepeatBallOpenParticleAnimation(u8);
+static void TimerBallOpenParticleAnimation(u8);
+static void PremierBallOpenParticleAnimation(u8);
+static void sub_817330C(struct Sprite *);
+
+struct BallCaptureSuccessStarData
+{
+ s8 xOffset;
+ s8 yOffset;
+ s8 unk2;
+};
+
+static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] =
+{
+ {
+ .xOffset = 10,
+ .yOffset = 2,
+ .unk2 = -3,
+ },
+ {
+ .xOffset = 15,
+ .yOffset = 0,
+ .unk2 = -4,
+ },
+ {
+ .xOffset = -10,
+ .yOffset = 2,
+ .unk2 = -4,
+ },
+};
+
+const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[] =
+{
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EC},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6ED},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EE},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EF},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F0},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F1},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F2},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F3},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F4},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F5},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F6},
+ {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F7},
+};
+
+const struct CompressedSpritePalette gBallOpenParticlePalettes[] =
+{
+ {gBattleAnimSpritePalette_136, 0xD6EC},
+ {gBattleAnimSpritePalette_136, 0xD6ED},
+ {gBattleAnimSpritePalette_136, 0xD6EE},
+ {gBattleAnimSpritePalette_136, 0xD6EF},
+ {gBattleAnimSpritePalette_136, 0xD6F0},
+ {gBattleAnimSpritePalette_136, 0xD6F1},
+ {gBattleAnimSpritePalette_136, 0xD6F2},
+ {gBattleAnimSpritePalette_136, 0xD6F3},
+ {gBattleAnimSpritePalette_136, 0xD6F4},
+ {gBattleAnimSpritePalette_136, 0xD6F5},
+ {gBattleAnimSpritePalette_136, 0xD6F6},
+ {gBattleAnimSpritePalette_136, 0xD6F7},
+};
+
+const union AnimCmd gUnknown_085E5154[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085E5170[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085E5178[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085E5180[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085E5188[] =
+{
+ ANIMCMD_FRAME(6, 4),
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085E5194[] =
+{
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085E519C[] =
+{
+ gUnknown_085E5154,
+ gUnknown_085E5170,
+ gUnknown_085E5178,
+ gUnknown_085E5180,
+ gUnknown_085E5188,
+ gUnknown_085E5194,
+};
+
+const u8 gBallOpenParticleAnimNums[] =
+{
+ 0,
+ 0,
+ 0,
+ 5,
+ 1,
+ 2,
+ 2,
+ 3,
+ 5,
+ 5,
+ 4,
+ 4,
+};
+
+const TaskFunc gBallOpenParticleAnimationFuncs[] =
+{
+ PokeBallOpenParticleAnimation,
+ GreatBallOpenParticleAnimation,
+ SafariBallOpenParticleAnimation,
+ UltraBallOpenParticleAnimation,
+ MasterBallOpenParticleAnimation,
+ SafariBallOpenParticleAnimation,
+ DiveBallOpenParticleAnimation,
+ UltraBallOpenParticleAnimation,
+ RepeatBallOpenParticleAnimation,
+ TimerBallOpenParticleAnimation,
+ GreatBallOpenParticleAnimation,
+ PremierBallOpenParticleAnimation,
+};
+
+const struct SpriteTemplate gUnknown_085E51F0[] =
+{
+ {
+ .tileTag = 55020,
+ .paletteTag = 55020,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55021,
+ .paletteTag = 55021,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55022,
+ .paletteTag = 55022,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55023,
+ .paletteTag = 55023,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55024,
+ .paletteTag = 55024,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55025,
+ .paletteTag = 55025,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55026,
+ .paletteTag = 55026,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55027,
+ .paletteTag = 55027,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55028,
+ .paletteTag = 55028,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55029,
+ .paletteTag = 55029,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55030,
+ .paletteTag = 55030,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+ {
+ .tileTag = 55031,
+ .paletteTag = 55031,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085E519C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ },
+};
+
+const u16 gUnknown_085E5310[] =
+{
+ RGB(31, 22, 30),
+ RGB(16, 23, 30),
+ RGB(23, 30, 20),
+ RGB(31, 31, 15),
+ RGB(23, 20, 28),
+ RGB(21, 31, 25),
+ RGB(12, 25, 30),
+ RGB(30, 27, 10),
+ RGB(31, 24, 16),
+ RGB(29, 30, 30),
+ RGB(31, 17, 10),
+ RGB(31, 9, 10),
+ RGB(0, 0, 0),
+ RGB(1, 16, 0),
+ RGB(3, 0, 1),
+ RGB(1, 8, 0),
+ RGB(0, 8, 0),
+ RGB(3, 8, 1),
+ RGB(6, 8, 1),
+ RGB(4, 0, 0),
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_85E5338 =
+{
+ .tileTag = ANIM_TAG_UNUSED_RED_BRICK,
+ .paletteTag = ANIM_TAG_UNUSED_RED_BRICK,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_817330C,
+};
+
+const union AnimCmd gUnknown_085E5350[] =
+{
+ ANIMCMD_FRAME(64, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085E5358[] = {
+ gUnknown_085E5350,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C =
+{
+ .tileTag = ANIM_TAG_ROCKS,
+ .paletteTag = ANIM_TAG_ROCKS,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085E5358,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_817330C,
+};
+
+extern const struct SpriteTemplate gUnknown_085CE388;
+extern const struct SpriteTemplate gUnknown_085CE3A0;
+
+void unref_sub_8170478(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+ u8 healthBoxSpriteId;
+ u8 battler;
+ u8 spriteId1, spriteId2, spriteId3, spriteId4;
+
+ battler = gBattleAnimAttacker;
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 1);
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ healthBoxSpriteId = gHealthboxSpriteIds[battler];
+ spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
+ spriteId2 = gSprites[healthBoxSpriteId].data[5];
+ spriteId3 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ spriteId4 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ gSprites[healthBoxSpriteId].oam.priority = 1;
+ gSprites[spriteId1].oam.priority = 1;
+ gSprites[spriteId2].oam.priority = 1;
+ gSprites[spriteId3] = gSprites[healthBoxSpriteId];
+ gSprites[spriteId4] = gSprites[spriteId1];
+ gSprites[spriteId3].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[spriteId4].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[spriteId3].callback = SpriteCallbackDummy;
+ gSprites[spriteId4].callback = SpriteCallbackDummy;
+
+ sub_80A6B30(&unknownStruct);
+ sub_80A6D48(unknownStruct.bgId, gUnknown_08C2EA9C);
+ sub_80A6CC0(unknownStruct.bgId, gUnknown_08C2EA50, unknownStruct.tilesOffset);
+ LoadCompressedPalette(gUnknown_08C2DDA4, unknownStruct.unk8 << 4, 32);
+
+ gBattle_BG1_X = -gSprites[spriteId3].pos1.x + 32;
+ gBattle_BG1_Y = -gSprites[spriteId3].pos1.y - 32;
+ gTasks[taskId].data[1] = 640;
+ gTasks[taskId].data[0] = spriteId3;
+ gTasks[taskId].data[2] = spriteId4;
+ gTasks[taskId].func = sub_8170660;
+}
+
+static void sub_8170660(u8 taskId)
+{
+ u8 spriteId1, spriteId2;
+ u8 battler;
+
+ battler = gBattleAnimAttacker;
+ gTasks[taskId].data[13] += gTasks[taskId].data[1];
+ gBattle_BG1_Y += (u16)gTasks[taskId].data[13] >> 8;
+ gTasks[taskId].data[13] &= 0xFF;
+
+ switch (gTasks[taskId].data[15])
+ {
+ case 0:
+ if (gTasks[taskId].data[11]++ > 1)
+ {
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[12]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
+ if (gTasks[taskId].data[12] == 8)
+ gTasks[taskId].data[15]++;
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[10] == 30)
+ gTasks[taskId].data[15]++;
+ break;
+ case 2:
+ if (gTasks[taskId].data[11]++ > 1)
+ {
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].data[12]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12]));
+ if (gTasks[taskId].data[12] == 0)
+ {
+ sub_80A477C(0);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ DestroySprite(&gSprites[gTasks[taskId].data[0]]);
+ DestroySprite(&gSprites[gTasks[taskId].data[2]]);
+ SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0);
+ spriteId1 = gSprites[gHealthboxSpriteIds[battler]].oam.affineParam;
+ spriteId2 = gSprites[gHealthboxSpriteIds[battler]].data[5];
+ gSprites[gHealthboxSpriteIds[battler]].oam.priority = 1;
+ gSprites[spriteId1].oam.priority = 1;
+ gSprites[spriteId2].oam.priority = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+static void sub_8170834(u8 *paletteId1, u8 *paletteId2, u8 battler)
+{
+ u8 healthBoxSpriteId;
+ u8 spriteId1, spriteId2;
+ u16 offset1, offset2;
+
+ healthBoxSpriteId = gHealthboxSpriteIds[battler];
+ spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
+ spriteId2 = gSprites[healthBoxSpriteId].data[5];
+ *paletteId1 = AllocSpritePalette(0xD709);
+ *paletteId2 = AllocSpritePalette(0xD70A);
+
+ offset1 = (gSprites[healthBoxSpriteId].oam.paletteNum * 16) + 0x100;
+ offset2 = (gSprites[spriteId2].oam.paletteNum * 16) + 0x100;
+ LoadPalette(&gPlttBufferUnfaded[offset1], *paletteId1 * 16 + 0x100, 0x20);
+ LoadPalette(&gPlttBufferUnfaded[offset2], *paletteId2 * 16 + 0x100, 0x20);
+
+ gSprites[healthBoxSpriteId].oam.paletteNum = *paletteId1;
+ gSprites[spriteId1].oam.paletteNum = *paletteId1;
+ gSprites[spriteId2].oam.paletteNum = *paletteId2;
+}
+
+void sub_8170920(u8 taskId)
+{
+ u8 paletteId1, paletteId2;
+ sub_8170834(&paletteId1, &paletteId2, gBattleAnimAttacker);
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_817094C(u8 battler)
+{
+ u8 healthBoxSpriteId;
+ u8 spriteId1, spriteId2;
+ u8 paletteId1, paletteId2;
+
+ healthBoxSpriteId = gHealthboxSpriteIds[battler];
+ spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam;
+ spriteId2 = gSprites[healthBoxSpriteId].data[5];
+
+ FreeSpritePaletteByTag(0xD709);
+ FreeSpritePaletteByTag(0xD70A);
+ paletteId1 = IndexOfSpritePaletteTag(0xD6FF);
+ paletteId2 = IndexOfSpritePaletteTag(0xD704);
+ gSprites[healthBoxSpriteId].oam.paletteNum = paletteId1;
+ gSprites[spriteId1].oam.paletteNum = paletteId1;
+ gSprites[spriteId2].oam.paletteNum = paletteId2;
+}
+
+void sub_81709EC(u8 taskId)
+{
+ sub_817094C(gBattleAnimAttacker);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8170A0C(u8 taskId)
+{
+ gTasks[taskId].data[10] = gBattleAnimArgs[0];
+ gTasks[taskId].data[11] = gBattleAnimArgs[1];
+ gTasks[taskId].func = sub_8170A38;
+}
+
+static void sub_8170A38(u8 taskId)
+{
+ u8 paletteNum;
+ int paletteOffset, colorOffset;
+
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11])
+ {
+ gTasks[taskId].data[0] = 0;
+ paletteNum = IndexOfSpritePaletteTag(0xD709);
+ colorOffset = gTasks[taskId].data[10] == 0 ? 6 : 2;
+ switch (gTasks[taskId].data[1])
+ {
+ case 0:
+ gTasks[taskId].data[2] += 2;
+ if (gTasks[taskId].data[2] > 16)
+ gTasks[taskId].data[2] = 16;
+
+ paletteOffset = paletteNum * 16 + 0x100;
+ BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31));
+ if (gTasks[taskId].data[2] == 16)
+ gTasks[taskId].data[1]++;
+ break;
+ case 1:
+ gTasks[taskId].data[2] -= 2;
+ if (gTasks[taskId].data[2] < 0)
+ gTasks[taskId].data[2] = 0;
+
+ paletteOffset = paletteNum * 16 + 0x100;
+ BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31));
+ if (gTasks[taskId].data[2] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+ }
+}
+
+void sub_8170B04(u8 taskId)
+{
+ u8 spriteId;
+
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+ gTasks[taskId].data[10] = 0x100;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10] += 0x30;
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ if (gTasks[taskId].data[10] >= 0x2D0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ ResetSpriteRotScale(spriteId);
+ gSprites[spriteId].invisible = 1;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8170BB0(u8 taskId)
+{
+ u8 spriteId;
+ u16 ball;
+ u8 ballId;
+ u8 x, y;
+ u8 priority, subpriority;
+ u32 selectedPalettes;
+
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL);
+ else
+ ball = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL);
+
+ ballId = ItemIdToBallId(ball);
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ priority = gSprites[spriteId].oam.priority;
+ subpriority = gSprites[spriteId].subpriority;
+ gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId);
+ selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0);
+ gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (!gTasks[gTasks[taskId].data[10]].isActive && !gTasks[gTasks[taskId].data[11]].isActive)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8170CFC(u8 taskId)
+{
+ u8 ballId = ItemIdToBallId(gLastUsedItem);
+ LoadBallGfx(ballId);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8170D24(u8 taskId)
+{
+ u8 ballId = ItemIdToBallId(gLastUsedItem);
+ FreeBallGfx(ballId);
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_IsBallBlockedByTrainer(u8 taskId)
+{
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK)
+ gBattleAnimArgs[7] = -1;
+ else
+ gBattleAnimArgs[7] = 0;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+u8 ItemIdToBallId(u16 ballItem)
+{
+ switch (ballItem)
+ {
+ case ITEM_MASTER_BALL:
+ return 4;
+ case ITEM_ULTRA_BALL:
+ return 3;
+ case ITEM_GREAT_BALL:
+ return 1;
+ case ITEM_SAFARI_BALL:
+ return 2;
+ case ITEM_NET_BALL:
+ return 5;
+ case ITEM_DIVE_BALL:
+ return 6;
+ case ITEM_NEST_BALL:
+ return 7;
+ case ITEM_REPEAT_BALL:
+ return 8;
+ case ITEM_TIMER_BALL:
+ return 9;
+ case ITEM_LUXURY_BALL:
+ return 10;
+ case ITEM_PREMIER_BALL:
+ return 11;
+ case ITEM_POKE_BALL:
+ default:
+ return 0;
+ }
+}
+
+void sub_8170E04(u8 taskId)
+{
+ u8 ballId;
+ u8 spriteId;
+
+ ballId = ItemIdToBallId(gLastUsedItem);
+ spriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29);
+ gSprites[spriteId].data[0] = 34;
+ gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
+ gSprites[spriteId].callback = sub_8171104;
+ gBattleSpritesDataPtr->animationData->field_9_x2 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible;
+ gTasks[taskId].data[0] = spriteId;
+ gTasks[taskId].func = sub_8170EF0;
+}
+
+static void sub_8170EF0(u8 taskId)
+{
+ u8 spriteId = gTasks[taskId].data[0];
+ if ((u16)gSprites[spriteId].data[0] == 0xFFFF)
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8170F2C(u8 taskId)
+{
+ int x, y;
+ u8 ballId;
+ u8 subpriority;
+ u8 spriteId;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
+ {
+ x = 32;
+ y = 11;
+ }
+ else
+ {
+ x = 23;
+ y = 5;
+ }
+
+ ballId = ItemIdToBallId(gLastUsedItem);
+ subpriority = GetBattlerSpriteSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1;
+ spriteId = CreateSprite(&gBallSpriteTemplates[ballId], x + 32, y | 80, subpriority);
+ gSprites[spriteId].data[0] = 34;
+ gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = sub_8039E84;
+ gTasks[taskId].data[0] = spriteId;
+ gTasks[taskId].func = sub_8171030;
+}
+
+static void sub_8171030(u8 taskId)
+{
+ if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1)
+ {
+ PlaySE12WithPanning(SE_NAGERU, 0);
+ gSprites[gTasks[taskId].data[0]].callback = sub_8171104;
+ CreateTask(sub_81710A8, 10);
+ gTasks[taskId].func = sub_8170EF0;
+ }
+}
+
+static void sub_81710A8(u8 taskId)
+{
+ if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded)
+ {
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 0);
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8171104(struct Sprite *sprite)
+{
+ u16 temp = sprite->data[1];
+ u16 temp2 = sprite->data[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = temp;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = temp2;
+ sprite->data[5] = -40;
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_8171134;
+}
+
+static void sub_8171134(struct Sprite *sprite)
+{
+ int i;
+ u8 ballId;
+ int ballId2; // extra var needed to match
+
+ if (TranslateAnimArc(sprite))
+ {
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK)
+ {
+ sprite->callback = sub_8171CAC;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+
+ for (i = 0; i < 8; i++)
+ sprite->data[i] = 0;
+
+ sprite->data[5] = 0;
+ sprite->callback = sub_81711E8;
+ ballId = ItemIdToBallId(gLastUsedItem);
+ ballId2 = ballId;
+ if (ballId2 > 11)
+ return;
+ if (ballId2 < 0)
+ return;
+
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
+ LaunchBallFadeMonTask(0, gBattleAnimTarget, 14, ballId);
+ }
+ }
+}
+
+static void sub_81711E8(struct Sprite *sprite)
+{
+ if (++sprite->data[5] == 10)
+ {
+ sprite->data[5] = CreateTask(TaskDummy, 50);
+ sprite->callback = sub_8171240;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0;
+ }
+}
+
+static void sub_8171240(struct Sprite *sprite)
+{
+ u8 spriteId;
+ u8 taskId;
+
+ spriteId = gBattlerSpriteIds[gBattleAnimTarget];
+ taskId = sprite->data[5];
+
+ if (++gTasks[taskId].data[1] == 11)
+ PlaySE(SE_SUIKOMU);
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+ gTasks[taskId].data[10] = 256;
+ gUnknown_030062DC = 28;
+ gUnknown_030062E4 = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y);
+ gUnknown_030062E0 = (u32)(gUnknown_030062E4 * 256) / 28;
+ gTasks[taskId].data[2] = gUnknown_030062E0;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10] += 0x20;
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0);
+ gTasks[taskId].data[3] += gTasks[taskId].data[2];
+ gSprites[spriteId].pos2.y = -gTasks[taskId].data[3] >> 8;
+ if (gTasks[taskId].data[10] >= 0x480)
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ ResetSpriteRotScale(spriteId);
+ gSprites[spriteId].invisible = 1;
+ gTasks[taskId].data[0]++;
+ break;
+ default:
+ if (gTasks[taskId].data[1] > 10)
+ {
+ DestroyTask(taskId);
+ StartSpriteAnim(sprite, 2);
+ sprite->data[5] = 0;
+ sprite->callback = sub_817138C;
+ }
+ break;
+ }
+}
+
+static void sub_817138C(struct Sprite *sprite)
+{
+ int angle;
+
+ if (sprite->animEnded)
+ {
+ sprite->data[3] = 0;
+ sprite->data[4] = 40;
+ sprite->data[5] = 0;
+ angle = 0;
+ sprite->pos1.y += Cos(angle, 40);
+ sprite->pos2.y = -Cos(angle, sprite->data[4]);
+ sprite->callback = sub_81713D0;
+ }
+}
+
+static void sub_81713D0(struct Sprite *sprite)
+{
+ bool8 lastBounce;
+ int bounceCount;
+
+ lastBounce = 0;
+
+ switch (sprite->data[3] & 0xFF)
+ {
+ case 0:
+ sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]);
+ sprite->data[5] += (sprite->data[3] >> 8) + 4;
+ if (sprite->data[5] >= 64)
+ {
+ sprite->data[4] -= 10;
+ sprite->data[3] += 257;
+
+ bounceCount = sprite->data[3] >> 8;
+ if (bounceCount == 4)
+ lastBounce = 1;
+
+ // Play a different sound effect for each pokeball bounce.
+ switch (bounceCount)
+ {
+ case 1:
+ PlaySE(SE_KON);
+ break;
+ case 2:
+ PlaySE(SE_KON2);
+ break;
+ case 3:
+ PlaySE(SE_KON3);
+ break;
+ default:
+ PlaySE(SE_KON4);
+ break;
+ }
+ }
+ break;
+ case 1:
+ sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]);
+ sprite->data[5] -= (sprite->data[3] >> 8) + 4;
+ if (sprite->data[5] <= 0)
+ {
+ sprite->data[5] = 0;
+ sprite->data[3] &= -0x100;
+ }
+ break;
+ }
+
+ if (lastBounce)
+ {
+ sprite->data[3] = 0;
+ sprite->pos1.y += Cos(64, 40);
+ sprite->pos2.y = 0;
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_NO_SHAKES)
+ {
+ sprite->data[5] = 0;
+ sprite->callback = sub_81717B4;
+ }
+ else
+ {
+ sprite->callback = sub_81714D4;
+ sprite->data[4] = 1;
+ sprite->data[5] = 0;
+ }
+ }
+}
+
+static void sub_81714D4(struct Sprite *sprite)
+{
+ if (++sprite->data[3] == 31)
+ {
+ sprite->data[3] = 0;
+ sprite->affineAnimPaused = 1;
+ StartSpriteAffineAnim(sprite, 1);
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->callback = sub_8171520;
+ PlaySE(SE_BOWA);
+ }
+}
+
+static void sub_8171520(struct Sprite *sprite)
+{
+ s8 state;
+ u16 var0;
+
+ switch (sprite->data[3] & 0xFF)
+ {
+ case 0:
+ if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ {
+ sprite->pos2.x += sprite->data[4];
+ gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_C += 0xB0;
+ }
+
+ sprite->data[5]++;
+ sprite->affineAnimPaused = 0;
+ var0 = sprite->data[5] + 7;
+ if (var0 > 14)
+ {
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->data[3]++;
+ sprite->data[5] = 0;
+ }
+ break;
+ case 1:
+ if (++sprite->data[5] == 1)
+ {
+ sprite->data[5] = 0;
+ sprite->data[4] = -sprite->data[4];
+ sprite->data[3]++;
+ sprite->affineAnimPaused = 0;
+ if (sprite->data[4] < 0)
+ ChangeSpriteAffineAnim(sprite, 2);
+ else
+ ChangeSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->affineAnimPaused = 1;
+ }
+ break;
+ case 2:
+ if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ {
+ sprite->pos2.x += sprite->data[4];
+ gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_C += 0xB0;
+ }
+
+ sprite->data[5]++;
+ sprite->affineAnimPaused = 0;
+ var0 = sprite->data[5] + 12;
+ if (var0 > 24)
+ {
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->data[3]++;
+ sprite->data[5] = 0;
+ }
+ break;
+ case 3:
+ if (sprite->data[5]++ < 0)
+ {
+ sprite->affineAnimPaused = 1;
+ break;
+ }
+
+ sprite->data[5] = 0;
+ sprite->data[4] = -sprite->data[4];
+ sprite->data[3]++;
+ sprite->affineAnimPaused = 0;
+ if (sprite->data[4] < 0)
+ ChangeSpriteAffineAnim(sprite, 2);
+ else
+ ChangeSpriteAffineAnim(sprite, 1);
+ // fall through
+ case 4:
+ if (gBattleSpritesDataPtr->animationData->field_C > 0xFF)
+ {
+ sprite->pos2.x += sprite->data[4];
+ gBattleSpritesDataPtr->animationData->field_C &= 0xFF;
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_C += 0xB0;
+ }
+
+ sprite->data[5]++;
+ sprite->affineAnimPaused = 0;
+ var0 = sprite->data[5] + 4;
+ if (var0 > 8)
+ {
+ gBattleSpritesDataPtr->animationData->field_C = 0;
+ sprite->data[3]++;
+ sprite->data[5] = 0;
+ sprite->data[4] = -sprite->data[4];
+ }
+ break;
+ case 5:
+ sprite->data[3] += 0x100;
+ state = sprite->data[3] >> 8;
+ if (state == gBattleSpritesDataPtr->animationData->ballThrowCaseId)
+ {
+ sprite->affineAnimPaused = 1;
+ sprite->callback = sub_81717B4;
+ }
+ else
+ {
+ if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && state == 3)
+ {
+ sprite->callback = sub_81717D8;
+ sprite->affineAnimPaused = 1;
+ }
+ else
+ {
+ sprite->data[3]++;
+ sprite->affineAnimPaused = 1;
+ }
+ }
+ break;
+ case 6:
+ default:
+ if (++sprite->data[5] == 31)
+ {
+ sprite->data[5] = 0;
+ sprite->data[3] &= -0x100;
+ StartSpriteAffineAnim(sprite, 3);
+ if (sprite->data[4] < 0)
+ StartSpriteAffineAnim(sprite, 2);
+ else
+ StartSpriteAffineAnim(sprite, 1);
+
+ PlaySE(SE_BOWA);
+ }
+ break;
+ }
+}
+
+static void sub_81717B4(struct Sprite *sprite)
+{
+ if (++sprite->data[5] == 31)
+ {
+ sprite->data[5] = 0;
+ sprite->callback = sub_8171AE4;
+ }
+}
+
+static void sub_81717D8(struct Sprite *sprite)
+{
+ sprite->animPaused = 1;
+ sprite->callback = sub_81717F8;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ sprite->data[5] = 0;
+}
+
+static void sub_81717F8(struct Sprite *sprite)
+{
+ u8 *battler = &gBattleAnimTarget;
+
+ sprite->data[4]++;
+ if (sprite->data[4] == 40)
+ {
+ PlaySE(SE_RG_GETTING);
+ BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0));
+ sub_81719EC(sprite);
+ }
+ else if (sprite->data[4] == 60)
+ {
+ BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0));
+ }
+ else if (sprite->data[4] == 95)
+ {
+ gDoingBattleAnim = 0;
+ UpdateOamPriorityInAllHealthboxes(1);
+ m4aMPlayAllStop();
+ PlaySE(MUS_RG_FAN6);
+ }
+ else if (sprite->data[4] == 315)
+ {
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]);
+ sprite->data[0] = 0;
+ sprite->callback = sub_81718D8;
+ }
+}
+
+static void sub_81718D8(struct Sprite *sprite)
+{
+ u8 paletteIndex;
+
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
+ paletteIndex = IndexOfSpritePaletteTag(sprite->template->paletteTag);
+ BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB(31, 31, 31));
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->data[1]++ > 0)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[2], sprite->data[2]));
+ if (sprite->data[2] == 16)
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->invisible = 1;
+ sprite->data[0]++;
+ break;
+ default:
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ sprite->data[0] = 0;
+ sprite->callback = sub_81719C0;
+ }
+ break;
+ }
+}
+
+static void sub_81719C0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[0] = -1;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_81719EC(struct Sprite *sprite)
+{
+ u32 i;
+ u8 subpriority;
+
+ if (sprite->subpriority)
+ {
+ subpriority = sprite->subpriority - 1;
+ }
+ else
+ {
+ subpriority = 0;
+ sprite->subpriority = 1;
+ }
+
+ sub_8171D60(4);
+ for (i = 0; i < 3; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_085E51F0[4], sprite->pos1.x, sprite->pos1.y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 24;
+ gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset;
+ gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset;
+ gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2;
+ InitAnimArcTranslation(&gSprites[spriteId]);
+ gSprites[spriteId].callback = sub_8171AAC;
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[4]);
+ }
+ }
+}
+
+static void sub_8171AAC(struct Sprite *sprite)
+{
+ sprite->invisible = !sprite->invisible;
+ if (TranslateAnimArc(sprite))
+ DestroySprite(sprite);
+}
+
+// fakematching. I think the return type of ItemIdToBallId()
+// is wrong because of the weird required casting.
+static void sub_8171AE4(struct Sprite *sprite)
+{
+ u8 ballId;
+ int ballId2; // extra var needed to match
+
+ StartSpriteAnim(sprite, 1);
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->callback = sub_8171BAC;
+
+ ballId = ItemIdToBallId(gLastUsedItem);
+ ballId2 = ballId;
+ if (ballId2 > 11)
+ goto LABEL;
+ if (ballId2 < 0)
+ goto LABEL;
+
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId);
+ LaunchBallFadeMonTask(1, gBattleAnimTarget, 14, ballId);
+
+ LABEL:
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = 0;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1);
+ AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]);
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000;
+}
+
+static void sub_8171BAC(struct Sprite *sprite)
+{
+ int next = FALSE;
+
+ if (sprite->animEnded)
+ sprite->invisible = 1;
+
+ if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded)
+ {
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0);
+ next = TRUE;
+ }
+ else
+ {
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] -= 288;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] >> 8;
+ }
+
+ if (sprite->animEnded && next)
+ {
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0;
+ gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2;
+ sprite->data[0] = 0;
+ sprite->callback = sub_81719C0;
+ gDoingBattleAnim = 0;
+ UpdateOamPriorityInAllHealthboxes(1);
+ }
+}
+
+static void sub_8171CAC(struct Sprite *sprite)
+{
+ int i;
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ for (i = 0; i < 6; i++)
+ sprite->data[i] = 0;
+
+ sprite->callback = sub_8171CE8;
+}
+
+static void sub_8171CE8(struct Sprite *sprite)
+{
+ s16 var0 = sprite->data[0] + 0x800;
+ s16 var1 = sprite->data[1] + 0x680;
+ sprite->pos2.x -= var1 >> 8;
+ sprite->pos2.y += var0 >> 8;
+ sprite->data[0] = (sprite->data[0] + 0x800) & 0xFF;
+ sprite->data[1] = (sprite->data[1] + 0x680) & 0xFF;
+
+ if (sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.x + sprite->pos2.x < -8)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_81719C0;
+ gDoingBattleAnim = 0;
+ UpdateOamPriorityInAllHealthboxes(1);
+ }
+}
+
+static void sub_8171D60(u8 ballId)
+{
+ u8 taskId;
+
+ if (GetSpriteTileStartByTag(gBallOpenParticleSpritesheets[ballId].tag) == 0xFFFF)
+ {
+ LoadCompressedSpriteSheetUsingHeap(&gBallOpenParticleSpritesheets[ballId]);
+ LoadCompressedSpritePaletteUsingHeap(&gBallOpenParticlePalettes[ballId]);
+ }
+}
+
+u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId)
+{
+ u8 taskId;
+
+ sub_8171D60(ballId);
+ taskId = CreateTask(gBallOpenParticleAnimationFuncs[ballId], 5);
+ gTasks[taskId].data[1] = x;
+ gTasks[taskId].data[2] = y;
+ gTasks[taskId].data[3] = priority;
+ gTasks[taskId].data[4] = subpriority;
+ gTasks[taskId].data[15] = ballId;
+ PlaySE(SE_BOWA2);
+
+ return taskId;
+}
+
+void sub_8171E20(void)
+{
+ if (gMain.inBattle)
+ gBattleSpritesDataPtr->animationData->field_A++;
+}
+
+static void PokeBallOpenParticleAnimation(u8 taskId)
+{
+ u8 spriteId;
+ u8 x, y;
+ u8 priority, subpriority;
+ u8 ballId;
+ u8 var0;
+
+ ballId = gTasks[taskId].data[15];
+ if (gTasks[taskId].data[0] < 16)
+ {
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1;
+ gSprites[spriteId].oam.priority = priority;
+
+ var0 = (u8)gTasks[taskId].data[0];
+ if (var0 >= 8)
+ var0 -= 8;
+
+ gSprites[spriteId].data[0] = var0 * 32;
+ }
+
+ if (gTasks[taskId].data[0] == 15)
+ {
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+ return;
+ }
+ }
+
+ gTasks[taskId].data[0]++;
+}
+
+static void PokeBallOpenParticleAnimation_Step1(struct Sprite *sprite)
+{
+ if (sprite->data[1] == 0)
+ sprite->callback = PokeBallOpenParticleAnimation_Step2;
+ else
+ sprite->data[1]--;
+}
+
+static void PokeBallOpenParticleAnimation_Step2(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]);
+ sprite->data[1] += 2;
+ if (sprite->data[1] == 50)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void TimerBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 10;
+ gSprites[spriteId].data[5] = 2;
+ gSprites[spriteId].data[6] = 1;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void DiveBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 10;
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 2;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+// Also used for Net Ball
+static void SafariBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 4;
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 1;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+// Also used for Nest Ball
+static void UltraBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 10; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 25;
+ gSprites[spriteId].data[4] = 5;
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 1;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+// Also used for Luxury Ball
+static void GreatBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ if (gTasks[taskId].data[7])
+ {
+ gTasks[taskId].data[7]--;
+ }
+ else
+ {
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 8;
+ gSprites[spriteId].data[5] = 2;
+ gSprites[spriteId].data[6] = 2;
+ }
+ }
+
+ gTasks[taskId].data[7] = 8;
+ if (++gTasks[taskId].data[0] == 2)
+ {
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+ }
+ }
+}
+
+static void FanOutBallOpenParticles_Step1(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], sprite->data[2]);
+ sprite->data[0] = (sprite->data[0] + sprite->data[4]) & 0xFF;
+ sprite->data[1] += sprite->data[5];
+ sprite->data[2] += sprite->data[6];
+ if (++sprite->data[3] == 51)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void RepeatBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 12; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 21;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0], sprite->data[2]));
+ sprite->data[0] = (sprite->data[0] + 6) & 0xFF;
+ sprite->data[1]++;
+ sprite->data[2]++;
+ if (++sprite->data[3] == 51)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void MasterBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i, j;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (j = 0; j < 2; j++)
+ {
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = FanOutBallOpenParticles_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ gSprites[spriteId].data[4] = 8;
+
+ if (j == 0)
+ {
+ gSprites[spriteId].data[5] = 2;
+ gSprites[spriteId].data[6] = 1;
+ }
+ else
+ {
+ gSprites[spriteId].data[5] = 1;
+ gSprites[spriteId].data[6] = 2;
+ }
+ }
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void PremierBallOpenParticleAnimation(u8 taskId)
+{
+ u8 i;
+ u8 x, y, priority, subpriority, ballId;
+ u8 spriteId;
+
+ ballId = gTasks[taskId].data[15];
+ x = gTasks[taskId].data[1];
+ y = gTasks[taskId].data[2];
+ priority = gTasks[taskId].data[3];
+ subpriority = gTasks[taskId].data[4];
+
+ for (i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ sub_8171E20();
+ StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]);
+ gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1;
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].data[0] = i * 32;
+ }
+ }
+
+ if (!gMain.inBattle)
+ gSprites[spriteId].data[7] = 1;
+
+ DestroyTask(taskId);
+}
+
+static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0] & 0x3F, sprite->data[2]));
+ sprite->data[0] = (sprite->data[0] + 10) & 0xFF;
+ sprite->data[1]++;
+ sprite->data[2]++;
+ if (++sprite->data[3] == 51)
+ DestroyBallOpenAnimationParticle(sprite);
+}
+
+static void DestroyBallOpenAnimationParticle(struct Sprite *sprite)
+{
+ int i, j;
+ int temp;
+
+ if (!gMain.inBattle)
+ {
+ temp = sprite->data[7]; // temp var needed to match
+ if (temp == 1)
+ DestroySpriteAndFreeResources(sprite);
+ else
+ DestroySprite(sprite);
+ }
+ else
+ {
+ gBattleSpritesDataPtr->animationData->field_A--;
+ if (gBattleSpritesDataPtr->animationData->field_A == 0)
+ {
+ for (i = 0; i < 12; i++)
+ {
+ if (FuncIsActiveTask(gBallOpenParticleAnimationFuncs[i]) == TRUE)
+ break;
+ }
+
+ if (i == 12)
+ {
+ for (j = 0; j < 12; j++)
+ {
+ FreeSpriteTilesByTag(gBallOpenParticleSpritesheets[j].tag);
+ FreeSpritePaletteByTag(gBallOpenParticlePalettes[j].tag);
+ }
+ }
+
+ DestroySprite(sprite);
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+ }
+}
+
+u8 LaunchBallFadeMonTask(u8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId)
+{
+ u8 taskId;
+
+ taskId = CreateTask(sub_8172AB0, 5);
+ gTasks[taskId].data[15] = ballId;
+ gTasks[taskId].data[3] = battler;
+ gTasks[taskId].data[10] = selectedPalettes;
+ gTasks[taskId].data[11] = selectedPalettes >> 16;
+
+ if (!unfadeLater)
+ {
+ BlendPalette(battler * 16 + 0x100, 16, 0, gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[1] = 1;
+ }
+ else
+ {
+ BlendPalette(battler * 16 + 0x100, 16, 16, gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = -1;
+ gTasks[taskId].func = sub_8172B40;
+ }
+
+ BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31));
+ return taskId;
+}
+
+static void sub_8172AB0(u8 taskId)
+{
+ u8 ballId = gTasks[taskId].data[15];
+
+ if (gTasks[taskId].data[2] <= 16)
+ {
+ BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[0] += gTasks[taskId].data[1];
+ gTasks[taskId].data[2]++;
+ }
+ else if (!gPaletteFade.active)
+ {
+ u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31));
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8172B40(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31));
+ gTasks[taskId].func = sub_8172B90;
+ }
+}
+
+static void sub_8172B90(u8 taskId)
+{
+ u8 ballId = gTasks[taskId].data[15];
+
+ if (gTasks[taskId].data[2] <= 16)
+ {
+ BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]);
+ gTasks[taskId].data[0] += gTasks[taskId].data[1];
+ gTasks[taskId].data[2]++;
+ }
+ else
+ {
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8172BF0(u8 taskId)
+{
+ u8 spriteId;
+ u32 x;
+ u32 done;
+
+ done = FALSE;
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ gTasks[taskId].data[11] = gBattleAnimArgs[0];
+ gTasks[taskId].data[0] += 0x500;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8;
+ else
+ gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8;
+
+ gTasks[taskId].data[0] &= 0xFF;
+ x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x + 32;
+ if (x > 304)
+ gTasks[taskId].data[10]++;
+ break;
+ case 1:
+ LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, gTasks[taskId].data[11], spriteId);
+ gTasks[taskId].data[10]++;
+ break;
+ case 2:
+ gTasks[taskId].data[0] += 0x500;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8;
+ else
+ gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8;
+
+ gTasks[taskId].data[0] &= 0xFF;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ if (gSprites[spriteId].pos2.x <= 0)
+ {
+ gSprites[spriteId].pos2.x = 0;
+ // done = FALSE; // fakematching--can't get the tail merge correct
+ goto DONE;
+ }
+ }
+ else
+ {
+ if (gSprites[spriteId].pos2.x >= 0)
+ {
+ gSprites[spriteId].pos2.x = 0;
+ done = TRUE;
+ }
+ }
+
+ if (done)
+ {
+ DONE:
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_8172D98(u8 taskId)
+{
+ u8 spriteId;
+
+ switch (gTasks[taskId].data[15])
+ {
+ case 0:
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ else
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0));
+ gTasks[taskId].data[15]++;
+ break;
+ case 1:
+ if (gTasks[taskId].data[1]++ > 1)
+ {
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - gTasks[taskId].data[0], gTasks[taskId].data[0]));
+ if (gTasks[taskId].data[0] == 16)
+ gTasks[taskId].data[15]++;
+ }
+ break;
+ case 2:
+ spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ RequestDma3Fill(0, (void *)OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * TILE_SIZE_4BPP, 0x800, 1);
+ ClearBehindSubstituteBit(gBattleAnimAttacker);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8172E9C(u8 taskId)
+{
+ gBattleAnimArgs[7] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].behindSubstitute;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8172ED0(u8 taskId)
+{
+ gBattleAnimTarget = gEffectBattler;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8172EF0(u8 battler, struct Pokemon *mon)
+{
+ int isShiny;
+ u32 otId, personality;
+ u32 shinyValue;
+ u8 taskId1, taskId2;
+
+ isShiny = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1;
+ otId = GetMonData(mon, MON_DATA_OT_ID);
+ personality = GetMonData(mon, MON_DATA_PERSONALITY);
+
+ if (IsBattlerSpriteVisible(battler))
+ {
+ shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality);
+ if (shinyValue < 8)
+ isShiny = TRUE;
+
+ if (isShiny)
+ {
+ if (GetSpriteTileStartByTag(0x27F9) == 0xFFFF)
+ {
+ LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[233]);
+ LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[233]);
+ }
+
+ taskId1 = CreateTask(sub_8172FEC, 10);
+ taskId2 = CreateTask(sub_8172FEC, 10);
+ gTasks[taskId1].data[0] = battler;
+ gTasks[taskId2].data[0] = battler;
+ gTasks[taskId1].data[1] = 0;
+ gTasks[taskId2].data[1] = 1;
+ return;
+ }
+ }
+
+ gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
+}
+
+static void sub_8172FEC(u8 taskId)
+{
+ u8 battler;
+ u8 x, y;
+ u8 spriteId;
+ u16 counter;
+ s16 state;
+ u8 pan;
+
+ if (gTasks[taskId].data[13] < 60)
+ {
+ gTasks[taskId].data[13]++;
+ return;
+ }
+
+ if (gBattleSpritesDataPtr->animationData->field_A)
+ return;
+
+ counter = gTasks[taskId].data[10]++;
+ if (counter & 3)
+ return;
+
+ battler = gTasks[taskId].data[0];
+ x = GetBattlerSpriteCoord(battler, 0);
+ y = GetBattlerSpriteCoord(battler, 1);
+ state = gTasks[taskId].data[11];
+ if (state == 0)
+ {
+ spriteId = CreateSprite(&gUnknown_085CE388, x, y, 5);
+ }
+ else if (state >= 0 && gTasks[taskId].data[11] < 4)
+ {
+ spriteId = CreateSprite(&gUnknown_085CE3A0, x, y, 5);
+ gSprites[spriteId].oam.tileNum += 4;
+ }
+ else
+ {
+ spriteId = CreateSprite(&gUnknown_085CE3A0, x, y, 5);
+ gSprites[spriteId].oam.tileNum += 5;
+ }
+
+ if (gTasks[taskId].data[1] == 0)
+ {
+ gSprites[spriteId].callback = sub_81731FC;
+ }
+ else
+ {
+ gSprites[spriteId].callback = sub_8173250;
+ gSprites[spriteId].pos2.x = -32;
+ gSprites[spriteId].pos2.y = 32;
+ gSprites[spriteId].invisible = 1;
+ if (gTasks[taskId].data[11] == 0)
+ {
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ pan = 192;
+ else
+ pan = 63;
+
+ PlaySE12WithPanning(SE_REAPOKE, pan);
+ }
+ }
+
+ gSprites[spriteId].data[0] = taskId;
+ gTasks[taskId].data[11]++;
+ if (spriteId != MAX_SPRITES)
+ gTasks[taskId].data[12]++;
+
+ if (gTasks[taskId].data[11] == 5)
+ gTasks[taskId].func = sub_81731B0;
+}
+
+static void sub_81731B0(u8 taskId)
+{
+ u8 battler;
+
+ if (gTasks[taskId].data[12] == 0)
+ {
+ if (gTasks[taskId].data[1] == 1)
+ {
+ battler = gTasks[taskId].data[0];
+ gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1;
+ }
+
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_81731FC(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[1], 24);
+ sprite->pos2.y = Cos(sprite->data[1], 24);
+ sprite->data[1] += 12;
+ if (sprite->data[1] > 0xFF)
+ {
+ gTasks[sprite->data[0]].data[12]--;
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8173250(struct Sprite *sprite)
+{
+ if (sprite->data[1] < 4)
+ {
+ sprite->data[1]++;
+ }
+ else
+ {
+ sprite->invisible = 0;
+ sprite->pos2.x += 5;
+ sprite->pos2.y -= 5;
+ if (sprite->pos2.x > 32)
+ {
+ gTasks[sprite->data[0]].data[12]--;
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+ }
+}
+
+void sub_81732B0(u8 taskId)
+{
+ u8 paletteIndex;
+
+ LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[269]);
+ LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[269]);
+ paletteIndex = IndexOfSpritePaletteTag(0x281D); // unused
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_81732E4(u8 taskId)
+{
+ FreeSpriteTilesByTag(0x281D);
+ FreeSpritePaletteByTag(0x281D);
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_817330C(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, 0);
+ sprite->data[0] = 30;
+ sprite->data[2] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 0) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 1) + gBattleAnimArgs[3];
+ sprite->data[5] = -32;
+ InitAnimArcTranslation(sprite);
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = sub_8039E84;
+ sprite->callback = sub_817339C;
+}
+
+static void sub_817339C(struct Sprite *sprite)
+{
+ if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1)
+ sprite->callback = sub_81733D4;
+}
+
+static void sub_81733D4(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = 1;
+ sprite->callback = sub_8173400;
+ }
+}
+
+static void sub_8173400(struct Sprite *sprite)
+{
+ if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded)
+ {
+ if (++sprite->data[0] > 0)
+ {
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ DestroyAnimSprite(sprite);
+ }
+ }
+}
+
+void sub_817345C(u8 taskId)
+{
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ break;
+ case 1:
+ gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ break;
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_GetTrappedMoveAnimId(u8 taskId)
+{
+ if (gBattleSpritesDataPtr->animationData->animArg == 83)
+ gBattleAnimArgs[0] = 1;
+ else if (gBattleSpritesDataPtr->animationData->animArg == 250)
+ gBattleAnimArgs[0] = 2;
+ else if (gBattleSpritesDataPtr->animationData->animArg == 128)
+ gBattleAnimArgs[0] = 3;
+ else if (gBattleSpritesDataPtr->animationData->animArg == 328)
+ gBattleAnimArgs[0] = 4;
+ else
+ gBattleAnimArgs[0] = 0;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_817351C(u8 taskId)
+{
+ gBattleAnimAttacker = gBattleSpritesDataPtr->animationData->animArg;
+ gBattleAnimTarget = gBattleSpritesDataPtr->animationData->animArg >> 8;
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
new file mode 100644
index 000000000..e37d2b5b8
--- /dev/null
+++ b/src/battle_anim_effects_1.c
@@ -0,0 +1,5609 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "main.h"
+#include "math_util.h"
+#include "palette.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+
+EWRAM_DATA s16 gUnknown_0203A0F8[4] = {0};
+
+void AnimMovePowderParticle(struct Sprite *);
+void AnimPowerAbsorptionOrb(struct Sprite *);
+void AnimSolarbeamBigOrb(struct Sprite *);
+void AnimSolarbeamSmallOrb(struct Sprite *);
+void AnimAbsorptionOrb(struct Sprite *);
+void AnimHyperBeamOrb(struct Sprite *);
+void AnimSporeParticle(struct Sprite *);
+void AnimPetalDanceBigFlower(struct Sprite *);
+void AnimPetalDanceSmallFlower(struct Sprite *);
+void AnimRazorLeafParticle(struct Sprite *);
+void AnimLeechSeed(struct Sprite *);
+void AnimTranslateLinearSingleSineWave(struct Sprite *);
+void AnimMoveTwisterParticle(struct Sprite *);
+void AnimConstrictBinding(struct Sprite *);
+void AnimMimicOrb(struct Sprite *);
+void AnimIngrainRoot(struct Sprite *);
+void AnimFrenzyPlantRoot(struct Sprite *);
+void AnimIngrainOrb(struct Sprite *);
+void AnimPresent(struct Sprite *);
+void AnimKnockOffItem(struct Sprite *);
+void AnimPresentHealParticle(struct Sprite *);
+void AnimItemSteal(struct Sprite *);
+void AnimTrickBag(struct Sprite *);
+void sub_8100640(struct Sprite *);
+void sub_8100898(struct Sprite *);
+void sub_81009F8(struct Sprite *);
+void sub_8100A50(struct Sprite *);
+void sub_8100A94(struct Sprite *);
+void AnimCuttingSlice(struct Sprite *);
+void sub_8100B88(struct Sprite *);
+void sub_8100E1C(struct Sprite *);
+void sub_8100EF0(struct Sprite *);
+void sub_81010CC(struct Sprite *);
+void sub_810130C(struct Sprite *);
+void sub_810135C(struct Sprite *);
+void sub_8101440(struct Sprite *);
+void sub_81014F4(struct Sprite *);
+void sub_81015AC(struct Sprite *);
+void sub_8101898(struct Sprite *);
+void sub_8101940(struct Sprite *);
+void sub_8101B90(struct Sprite *);
+void sub_8101F40(struct Sprite *);
+void sub_8101FA8(struct Sprite *);
+void sub_8101FF0(struct Sprite *);
+void sub_81020D8(struct Sprite *);
+void sub_810217C(struct Sprite *);
+void sub_8102268(struct Sprite *);
+void sub_810234C(struct Sprite *);
+void sub_81024E0(struct Sprite *);
+void sub_8102540(struct Sprite *);
+void sub_8102844(struct Sprite *);
+void sub_8102BCC(struct Sprite *);
+void sub_8102CD4(struct Sprite *);
+void sub_8102EB0(struct Sprite *);
+void sub_8102FB8(struct Sprite *);
+void sub_8103028(struct Sprite *);
+void sub_8103164(struct Sprite *);
+void sub_8103208(struct Sprite *);
+void sub_8103284(struct Sprite *);
+void sub_8103390(struct Sprite *);
+static void AnimMovePowderParticleStep(struct Sprite *);
+static void AnimSolarbeamSmallOrbStep(struct Sprite *);
+static void AnimAbsorptionOrbStep(struct Sprite *);
+static void AnimHyperBeamOrbStep(struct Sprite *);
+static void AnimLeechSeedStep(struct Sprite *);
+static void AnimLeechSeedSprouts(struct Sprite *);
+static void AnimSporeParticleStep(struct Sprite *);
+static void AnimPetalDanceBigFlowerStep(struct Sprite *);
+static void AnimPetalDanceSmallFlowerStep(struct Sprite *);
+static void AnimRazorLeafParticleStep1(struct Sprite *);
+static void AnimRazorLeafParticleStep2(struct Sprite *);
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite *);
+static void AnimMoveTwisterParticleStep(struct Sprite *);
+static void AnimConstrictBindingStep1(struct Sprite *);
+static void AnimConstrictBindingStep2(struct Sprite *);
+static void sub_80FF53C(u8);
+static void sub_80FF5CC(u8);
+static void AnimItemStealStep(struct Sprite *);
+static void AnimRootFlickerOut(struct Sprite *);
+static void AnimTrickBagStep1(struct Sprite *);
+static void AnimTrickBagStep2(struct Sprite *);
+static void AnimTrickBagStep3(struct Sprite *);
+static void sub_8100128(u8);
+static s16 sub_8100504(struct Sprite *);
+static void sub_8100524(struct Task *, u8);
+static void sub_80CC408(struct Sprite *);
+static void sub_810074C(struct Sprite *);
+static void sub_81009A0(struct Sprite *);
+static void AnimSliceStep(struct Sprite *);
+static void sub_8100E80(struct Sprite *);
+static void sub_8100FD4(struct Sprite *);
+static void sub_8101138(struct Sprite *);
+static void sub_8101298(struct Sprite *, int, int);
+static void sub_81014A0(struct Sprite *);
+static void sub_8101560(struct Sprite *);
+static void sub_81015D4(struct Sprite *);
+static void sub_8101684(struct Sprite *);
+static void sub_81016B8(struct Sprite *);
+static void sub_8101774(struct Sprite *);
+static void sub_8101820(struct Sprite *);
+static void sub_8101848(struct Sprite *);
+static void sub_8101998(struct Sprite *);
+static void sub_81019E8(struct Sprite *);
+static void sub_8101A74(struct Sprite *);
+static void sub_8101AC4(struct Sprite *);
+static void sub_8101B84(struct Sprite *);
+static void sub_8101AE8(struct Sprite *);
+static void sub_8101BA0(struct Sprite *);
+static void sub_8101D2C(u8);
+static void sub_8101EEC(u8);
+static void sub_8102044(struct Sprite *);
+static void sub_810207C(struct Sprite *);
+static void sub_810208C(struct Sprite *);
+static void sub_810213C(struct Sprite *);
+static void sub_81021CC(struct Sprite *);
+static void sub_810237C(struct Sprite *);
+static void sub_8102528(struct Sprite *);
+static void sub_8102584(struct Sprite *);
+static void sub_810296C(struct Sprite *);
+static void sub_8102AE0(u8);
+static void sub_8102B3C(struct Sprite *);
+static void sub_8102D8C(s16, s16, s16 *, s16 *, s8);
+static void sub_8102DE4(struct Sprite *);
+static void sub_8102F40(struct Sprite *);
+static void sub_81030B0(struct Sprite *);
+static void sub_81031D0(struct Sprite *);
+static void sub_8103250(struct Sprite *);
+static void sub_8103300(struct Sprite *);
+static void sub_8103320(struct Sprite *);
+static void sub_81033F0(struct Sprite *);
+static void sub_810342C(struct Sprite *);
+
+const union AnimCmd gUnknown_085920F0[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(10, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(14, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08592114[] =
+{
+ gUnknown_085920F0,
+};
+
+const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SLEEP_POWDER,
+ .paletteTag = ANIM_TAG_SLEEP_POWDER,
+ .oam = &gUnknown_08524944,
+ .anims = gUnknown_08592114,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_STUN_SPORE,
+ .paletteTag = ANIM_TAG_STUN_SPORE,
+ .oam = &gUnknown_08524944,
+ .anims = gUnknown_08592114,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_POISON_POWDER,
+ .paletteTag = ANIM_TAG_POISON_POWDER,
+ .oam = &gUnknown_08524944,
+ .anims = gUnknown_08592114,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMovePowderParticle,
+};
+
+const union AnimCmd gUnknown_08592160[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592168[] =
+{
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592170[] =
+{
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592178[] =
+{
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592180[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592188[] =
+{
+ ANIMCMD_FRAME(5, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592190[] =
+{
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592198[] =
+{
+ ANIMCMD_FRAME(7, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085921A0[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085921A8[] =
+{
+ gUnknown_08592160,
+ gUnknown_08592168,
+ gUnknown_08592170,
+ gUnknown_08592178,
+ gUnknown_08592180,
+ gUnknown_08592188,
+ gUnknown_08592190,
+};
+
+const union AnimCmd *const gUnknown_085921C4[] =
+{
+ gUnknown_08592198,
+};
+
+const union AnimCmd *const gUnknown_085921C8[] =
+{
+ gUnknown_085921A0,
+};
+
+const union AffineAnimCmd gUnknown_085921CC[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085921DC[] = {
+ gUnknown_085921CC,
+};
+
+const struct SpriteTemplate gPowerAbsorptionOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524A8C,
+ .anims = gUnknown_085921C8,
+ .images = NULL,
+ .affineAnims = gUnknown_085921DC,
+ .callback = AnimPowerAbsorptionOrb,
+};
+
+const struct SpriteTemplate gSolarbeamBigOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085921A8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSolarbeamBigOrb,
+};
+
+const struct SpriteTemplate gSolarbeamSmallOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085921C4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSolarbeamSmallOrb,
+};
+
+const union AffineAnimCmd gUnknown_08592228[] = {
+ AFFINEANIMCMD_FRAME(320, 320, 0, 0),
+ AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08592240[] = {
+ gUnknown_08592228,
+};
+
+const struct SpriteTemplate gStockpileAbsorptionOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GRAY_ORB,
+ .paletteTag = ANIM_TAG_GRAY_ORB,
+ .oam = &gUnknown_085249C4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592240,
+ .callback = AnimPowerAbsorptionOrb,
+};
+
+const union AffineAnimCmd gUnknown_0859225C[] = {
+ AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_0859226C[] = {
+ gUnknown_0859225C,
+};
+
+const struct SpriteTemplate gAbsorptionOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524A8C,
+ .anims = gUnknown_085921C8,
+ .images = NULL,
+ .affineAnims = gUnknown_0859226C,
+ .callback = AnimAbsorptionOrb,
+};
+
+const struct SpriteTemplate gHyperBeamOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085921A8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimHyperBeamOrb,
+};
+
+const union AnimCmd gUnknown_085922A0[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085922A8[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_FRAME(8, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_085922B4[] =
+{
+ gUnknown_085922A0,
+ gUnknown_085922A8,
+};
+
+const struct SpriteTemplate gLeechSeedSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SEED,
+ .paletteTag = ANIM_TAG_SEED,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085922B4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimLeechSeed,
+};
+
+const union AnimCmd gUnknown_085922D4[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085922DC[] =
+{
+ ANIMCMD_FRAME(4, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085922E4[] =
+{
+ gUnknown_085922D4,
+ gUnknown_085922DC,
+};
+
+const struct SpriteTemplate gSporeParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SPORE,
+ .paletteTag = ANIM_TAG_SPORE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085922E4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSporeParticle,
+};
+
+const union AnimCmd gUnknown_08592304[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859230C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592314[] =
+{
+ gUnknown_08592304,
+};
+
+const union AnimCmd *const gUnknown_08592318[] =
+{
+ gUnknown_0859230C,
+};
+
+const struct SpriteTemplate gPetalDanceBigFlowerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592314,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceBigFlower,
+};
+
+const struct SpriteTemplate gPetalDanceSmallFlowerSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_08592318,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPetalDanceSmallFlower,
+};
+
+const union AnimCmd gUnknown_0859234C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_08592378[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_FRAME(28, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592388[] =
+{
+ gUnknown_0859234C,
+ gUnknown_08592378,
+};
+
+const struct SpriteTemplate gRazorLeafParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592388,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimRazorLeafParticle,
+};
+
+const struct SpriteTemplate gTwisterLeafParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592388,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMoveTwisterParticle,
+};
+
+const union AnimCmd gUnknown_085923C0[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_085923D4[] =
+{
+ gUnknown_085923C0,
+};
+
+const struct SpriteTemplate gRazorLeafCutterSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RAZOR_LEAF,
+ .paletteTag = ANIM_TAG_RAZOR_LEAF,
+ .oam = &gUnknown_08524934,
+ .anims = gUnknown_085923D4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
+const union AffineAnimCmd gUnknown_085923F0[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_08592400[] = {
+ gUnknown_085923F0,
+};
+
+const struct SpriteTemplate gSwiftStarSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_YELLOW_STAR,
+ .paletteTag = ANIM_TAG_YELLOW_STAR,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592400,
+ .callback = AnimTranslateLinearSingleSineWave,
+};
+
+const union AnimCmd gUnknown_0859241C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(96, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592430[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592444[] =
+{
+ gUnknown_0859241C,
+ gUnknown_08592430,
+};
+
+const union AffineAnimCmd gUnknown_0859244C[] = {
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_0859246C[] = {
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(11, 0, 0, 6),
+ AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_0859248C[] = {
+ gUnknown_0859244C,
+ gUnknown_0859246C,
+};
+
+const struct SpriteTemplate gConstrictBindingSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_TENDRILS,
+ .paletteTag = ANIM_TAG_TENDRILS,
+ .oam = &gUnknown_0852499C,
+ .anims = gUnknown_08592444,
+ .images = NULL,
+ .affineAnims = gUnknown_0859248C,
+ .callback = AnimConstrictBinding,
+};
+
+const union AffineAnimCmd gUnknown_085924AC[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 0),
+ AFFINEANIMCMD_FRAME(48, 48, 0, 14),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085924C4[] = {
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085924D4[] = {
+ gUnknown_085924AC,
+ gUnknown_085924C4,
+};
+
+const struct SpriteTemplate gMimicOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_085921C8,
+ .images = NULL,
+ .affineAnims = gUnknown_085924D4,
+ .callback = AnimMimicOrb,
+};
+
+const union AnimCmd gUnknown_085924F4[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592508[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859251C[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859252C[] =
+{
+ ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_0859253C[] =
+{
+ gUnknown_085924F4,
+ gUnknown_08592508,
+ gUnknown_0859251C,
+ gUnknown_0859252C,
+};
+
+const struct SpriteTemplate gIngrainRootSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROOTS,
+ .paletteTag = ANIM_TAG_ROOTS,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_0859253C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimIngrainRoot,
+};
+
+const struct SpriteTemplate gFrenzyPlantRootSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ROOTS,
+ .paletteTag = ANIM_TAG_ROOTS,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_0859253C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimFrenzyPlantRoot,
+};
+
+const union AnimCmd gUnknown_0859257C[] =
+{
+ ANIMCMD_FRAME(3, 3),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08592588[] =
+{
+ gUnknown_0859257C,
+};
+
+const struct SpriteTemplate gIngrainOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ORBS,
+ .paletteTag = ANIM_TAG_ORBS,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_08592588,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimIngrainOrb,
+};
+
+const union AnimCmd gUnknown_085925A4[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085925AC[] =
+{
+ gUnknown_085925A4,
+};
+
+const union AffineAnimCmd gUnknown_085925B0[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 20),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085925D0[] = {
+ AFFINEANIMCMD_FRAME(0, 0, -1, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, -1, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 1, 2),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08592608[] = {
+ gUnknown_085925B0,
+ gUnknown_085925D0,
+};
+
+const struct SpriteTemplate gPresentSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_08592608,
+ .callback = AnimPresent,
+};
+
+const struct SpriteTemplate gKnockOffItemSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_08592608,
+ .callback = AnimKnockOffItem,
+};
+
+const union AnimCmd gUnknown_08592640[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592654[] =
+{
+ gUnknown_08592640,
+};
+
+const struct SpriteTemplate gPresentHealParticleSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GREEN_SPARKLE,
+ .paletteTag = ANIM_TAG_GREEN_SPARKLE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592654,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimPresentHealParticle,
+};
+
+const struct SpriteTemplate gItemStealSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_08592608,
+ .callback = AnimItemSteal,
+};
+
+const union AffineAnimCmd gUnknown_08592688[] = {
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592698[] = {
+ AFFINEANIMCMD_FRAME(0, -10, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, -2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 2, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 6, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 10, 0, 3),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085926D8[] = {
+ gUnknown_08592688,
+ gUnknown_08592698,
+ gUnknown_085925B0,
+ gUnknown_085925D0,
+};
+
+const struct SpriteTemplate gTrickBagSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085925AC,
+ .images = NULL,
+ .affineAnims = gUnknown_085926D8,
+ .callback = AnimTrickBag,
+};
+
+const s8 gUnknown_08592700[][3] =
+{
+ {5, 24, 1},
+ {0, 4, 0},
+ {8, 16, -1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 2, 0},
+ {8, 16, 1},
+ {0, 16, 0},
+ {0, 0, 127},
+};
+
+const union AnimCmd gUnknown_08592724[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859272C[] =
+{
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592734[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859273C[] =
+{
+ ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592744[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859274C[] =
+{
+ ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592754[] =
+{
+ ANIMCMD_FRAME(28, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_0859275C[] =
+{
+ gUnknown_08592724,
+ gUnknown_0859272C,
+ gUnknown_08592734,
+ gUnknown_0859273C,
+ gUnknown_08592744,
+ gUnknown_0859274C,
+ gUnknown_08592754,
+};
+
+const struct SpriteTemplate gUnknown_08592778 =
+{
+ .tileTag = ANIM_TAG_LEAF,
+ .paletteTag = ANIM_TAG_LEAF,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_0859275C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const union AffineAnimCmd gUnknown_08592790[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_085927A8[] = {
+ gUnknown_08592790,
+};
+
+const struct SpriteTemplate gUnknown_085927AC =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_08592318,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100640,
+};
+
+const struct SpriteTemplate gUnknown_085927C4 =
+{
+ .tileTag = ANIM_TAG_FLOWER,
+ .paletteTag = ANIM_TAG_FLOWER,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_08592314,
+ .images = NULL,
+ .affineAnims = gUnknown_085927A8,
+ .callback = sub_8100640,
+};
+
+const union AffineAnimCmd gUnknown_085927DC[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -10, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gUnknown_085927F4[] = {
+ AFFINEANIMCMD_FRAME(192, 192, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gUnknown_0859280C[] = {
+ AFFINEANIMCMD_FRAME(143, 143, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -15, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08592824[] = {
+ gUnknown_085927DC,
+};
+
+const union AffineAnimCmd *const gUnknown_08592828[] = {
+ gUnknown_085927F4,
+};
+
+const union AffineAnimCmd *const gUnknown_0859282C[] = {
+ gUnknown_0859280C,
+};
+
+const struct SpriteTemplate gUnknown_08592830 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_6,
+ .paletteTag = ANIM_TAG_SPARKLE_6,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592824,
+ .callback = sub_8100640,
+};
+
+const struct SpriteTemplate gUnknown_08592848 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_6,
+ .paletteTag = ANIM_TAG_SPARKLE_6,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592828,
+ .callback = sub_8100640,
+};
+
+const struct SpriteTemplate gUnknown_08592860 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_6,
+ .paletteTag = ANIM_TAG_SPARKLE_6,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859282C,
+ .callback = sub_8100640,
+};
+
+const u16 gMagicalLeafBlendColors[] =
+{
+ RGB(31, 0, 0),
+ RGB(31, 19, 0),
+ RGB(31, 31, 0),
+ RGB(0, 31, 0),
+ RGB(5, 14, 31),
+ RGB(22, 10, 31),
+ RGB(22, 21, 31),
+};
+
+const struct SpriteTemplate gUnknown_08592888 =
+{
+ .tileTag = ANIM_TAG_GREEN_SPIKE,
+ .paletteTag = ANIM_TAG_GREEN_SPIKE,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100898,
+};
+
+const union AnimCmd gUnknown_085928A0[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 3),
+ ANIMCMD_FRAME(112, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085928B4[] =
+{
+ ANIMCMD_FRAME(64, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(80, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(96, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(112, 6, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085928C8[] =
+{
+ gUnknown_085928A0,
+ gUnknown_085928B4,
+};
+
+const struct SpriteTemplate gUnknown_085928D0 =
+{
+ .tileTag = ANIM_TAG_SLAM_HIT,
+ .paletteTag = ANIM_TAG_SLAM_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085928C8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100A50,
+};
+
+const struct SpriteTemplate gUnknown_085928E8 =
+{
+ .tileTag = ANIM_TAG_WHIP_HIT,
+ .paletteTag = ANIM_TAG_WHIP_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085928C8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100A50,
+};
+
+const union AnimCmd gUnknown_08592900[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592918[] =
+{
+ gUnknown_08592900,
+};
+
+const struct SpriteTemplate gUnknown_0859291C =
+{
+ .tileTag = ANIM_TAG_UNUSED_HIT,
+ .paletteTag = ANIM_TAG_UNUSED_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592918,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81009F8,
+};
+
+const struct SpriteTemplate gUnknown_08592934 =
+{
+ .tileTag = ANIM_TAG_UNUSED_HIT_2,
+ .paletteTag = ANIM_TAG_UNUSED_HIT_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592918,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81009F8,
+};
+
+const union AffineAnimCmd gUnknown_0859294C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_0859295C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_0859296C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_0859297C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_0859298C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -128, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_0859299C[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -96, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085929AC[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -64, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085929BC[] = {
+ AFFINEANIMCMD_FRAME(256, 256, -32, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085929CC[] = {
+ gUnknown_0859294C,
+ gUnknown_0859295C,
+ gUnknown_0859296C,
+ gUnknown_0859297C,
+ gUnknown_0859298C,
+ gUnknown_0859299C,
+ gUnknown_085929AC,
+ gUnknown_085929BC,
+};
+
+const struct SpriteTemplate gUnknown_085929EC =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085929CC,
+ .callback = sub_8100A94,
+};
+
+const union AnimCmd gUnknown_08592A04[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592A18[] =
+{
+ gUnknown_08592A04,
+};
+
+const struct SpriteTemplate gCuttingSliceSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_08592A18,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimCuttingSlice,
+};
+
+const struct SpriteTemplate gUnknown_08592A34 =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_08592A18,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100B88,
+};
+
+const union AnimCmd gUnknown_08592A4C[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A54[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A5C[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A64[] =
+{
+ ANIMCMD_FRAME(12, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A6C[] =
+{
+ ANIMCMD_FRAME(16, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A74[] =
+{
+ ANIMCMD_FRAME(20, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A7C[] =
+{
+ ANIMCMD_FRAME(0, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A84[] =
+{
+ ANIMCMD_FRAME(4, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A8C[] =
+{
+ ANIMCMD_FRAME(8, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592A94[] =
+{
+ ANIMCMD_FRAME(12, 1, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592A9C[] =
+{
+ gUnknown_08592A4C,
+ gUnknown_08592A54,
+ gUnknown_08592A5C,
+ gUnknown_08592A64,
+ gUnknown_08592A6C,
+ gUnknown_08592A74,
+ gUnknown_08592A7C,
+ gUnknown_08592A84,
+ gUnknown_08592A8C,
+ gUnknown_08592A94,
+};
+
+const struct SpriteTemplate gUnknown_08592AC4 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592A9C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100E1C,
+};
+
+const struct SpriteTemplate gUnknown_08592ADC =
+{
+ .tileTag = ANIM_TAG_PROTECT,
+ .paletteTag = ANIM_TAG_PROTECT,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8100EF0,
+};
+
+const union AffineAnimCmd gUnknown_08592AF4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592B04[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 24),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_08592B34[] =
+{
+ gUnknown_08592AF4,
+ gUnknown_08592B04,
+};
+
+const struct SpriteTemplate gUnknown_08592B3C =
+{
+ .tileTag = ANIM_TAG_MILK_BOTTLE,
+ .paletteTag = ANIM_TAG_MILK_BOTTLE,
+ .oam = &gUnknown_08524A94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08592B34,
+ .callback = sub_81010CC,
+};
+
+const union AnimCmd gUnknown_08592B54[] =
+{
+ ANIMCMD_FRAME(0, 7),
+ ANIMCMD_FRAME(16, 7),
+ ANIMCMD_FRAME(32, 7),
+ ANIMCMD_FRAME(48, 7),
+ ANIMCMD_FRAME(64, 7),
+ ANIMCMD_FRAME(80, 7),
+ ANIMCMD_FRAME(96, 7),
+ ANIMCMD_FRAME(112, 7),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08592B78[] =
+{
+ gUnknown_08592B54,
+};
+
+const struct SpriteTemplate gUnknown_08592B7C =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_SPARKLE_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592B78,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810130C,
+};
+
+const struct SpriteTemplate gUnknown_08592B94 =
+{
+ .tileTag = ANIM_TAG_SPARKLE_2,
+ .paletteTag = ANIM_TAG_SPARKLE_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592B78,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810135C,
+};
+
+const union AnimCmd gUnknown_08592BAC[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_FRAME(8, 10),
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_FRAME(16, 26),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_FRAME(24, 15),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592BD0[] =
+{
+ ANIMCMD_FRAME(0, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(12, 10, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 26, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(20, 5, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 15, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592BF4[] =
+{
+ gUnknown_08592BAC,
+ gUnknown_08592BD0,
+};
+
+const struct SpriteTemplate gUnknown_08592BFC =
+{
+ .tileTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
+ .paletteTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592BF4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101440,
+};
+
+const union AnimCmd gUnknown_08592C14[] =
+{
+ ANIMCMD_FRAME(0, 40),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592C1C[] =
+{
+ gUnknown_08592C14,
+};
+
+const union AffineAnimCmd gUnknown_08592C20[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592C20_2[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd gUnknown_08592C50[] =
+{
+ AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08592C50_2[] =
+{
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
+ AFFINEANIMCMD_LOOP(10),
+};
+
+const union AffineAnimCmd *const gUnknown_08592C80[] =
+{
+ gUnknown_08592C20,
+ gUnknown_08592C50,
+};
+
+const struct SpriteTemplate gUnknown_08592C88 =
+{
+ .tileTag = ANIM_TAG_LETTER_Z,
+ .paletteTag = ANIM_TAG_LETTER_Z,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_08592C1C,
+ .images = NULL,
+ .affineAnims = gUnknown_08592C80,
+ .callback = sub_81014F4,
+};
+
+const struct SpriteTemplate gUnknown_08592CA0 =
+{
+ .tileTag = ANIM_TAG_LOCK_ON,
+ .paletteTag = ANIM_TAG_LOCK_ON,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81015AC,
+};
+
+const struct SpriteTemplate gUnknown_08592CB8 =
+{
+ .tileTag = ANIM_TAG_LOCK_ON,
+ .paletteTag = ANIM_TAG_LOCK_ON,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101898,
+};
+
+const s8 gUnknown_08592CD0[][2] =
+{
+ { 64, 64},
+ { 0, -64},
+ {-64, 64},
+ { 32, -32},
+};
+
+const struct SpriteTemplate gUnknown_08592CD8 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101940,
+};
+
+const struct SpriteTemplate gUnknown_08592CF0 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101B90,
+};
+
+const union AnimCmd gUnknown_08592D08[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592D1C[] =
+{
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592D24[] =
+{
+ gUnknown_08592D08,
+ gUnknown_08592D1C,
+};
+
+const struct SpriteTemplate gUnknown_08592D2C =
+{
+ .tileTag = ANIM_TAG_SLASH,
+ .paletteTag = ANIM_TAG_SLASH,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592D24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101F40,
+};
+
+const struct SpriteTemplate gUnknown_08592D44 =
+{
+ .tileTag = ANIM_TAG_SLASH_2,
+ .paletteTag = ANIM_TAG_SLASH_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592D24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101FA8,
+};
+
+const struct SpriteTemplate gUnknown_08592D5C =
+{
+ .tileTag = ANIM_TAG_SLASH_2,
+ .paletteTag = ANIM_TAG_SLASH_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592D24,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8101FF0,
+};
+
+const union AnimCmd gUnknown_08592D74[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(8, 12),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592D88[] =
+{
+ gUnknown_08592D74,
+};
+
+const struct SpriteTemplate gUnknown_08592D8C =
+{
+ .tileTag = ANIM_TAG_FOCUS_ENERGY,
+ .paletteTag = ANIM_TAG_FOCUS_ENERGY,
+ .oam = &gUnknown_08524954,
+ .anims = gUnknown_08592D88,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81020D8,
+};
+
+const union AnimCmd gUnknown_08592DA4[] =
+{
+ ANIMCMD_FRAME(0, 18),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 18),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 18),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 18),
+ ANIMCMD_FRAME(32, 6),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 18),
+ ANIMCMD_FRAME(48, 6),
+ ANIMCMD_FRAME(64, 54),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592DE0[] =
+{
+ gUnknown_08592DA4,
+};
+
+const struct SpriteTemplate gUnknown_08592DE4 =
+{
+ .tileTag = ANIM_TAG_SPHERE_TO_CUBE,
+ .paletteTag = ANIM_TAG_SPHERE_TO_CUBE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592DE0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810217C,
+};
+
+const struct SpriteTemplate gUnknown_08592DFC =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL,
+ .paletteTag = ANIM_TAG_BLACK_BALL,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const union AnimCmd gUnknown_08592E14[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592E2C[] =
+{
+ gUnknown_08592E14,
+};
+
+const struct SpriteTemplate gUnknown_08592E30 =
+{
+ .tileTag = ANIM_TAG_GRAY_SMOKE,
+ .paletteTag = ANIM_TAG_GRAY_SMOKE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592E2C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const union AnimCmd gUnknown_08592E48[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592E5C[] =
+{
+ gUnknown_08592E48,
+};
+
+const union AffineAnimCmd gUnknown_08592E60[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08592E70[] =
+{
+ gUnknown_08592E60,
+};
+
+const struct SpriteTemplate gUnknown_08592E74 =
+{
+ .tileTag = ANIM_TAG_CONVERSION,
+ .paletteTag = ANIM_TAG_CONVERSION,
+ .oam = &gUnknown_08524AE4,
+ .anims = gUnknown_08592E5C,
+ .images = NULL,
+ .affineAnims = gUnknown_08592E70,
+ .callback = sub_8102268,
+};
+
+const union AnimCmd gUnknown_08592E8C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592EA0[] =
+{
+ gUnknown_08592E8C,
+};
+
+const struct SpriteTemplate gUnknown_08592EA4 =
+{
+ .tileTag = ANIM_TAG_CONVERSION,
+ .paletteTag = ANIM_TAG_CONVERSION,
+ .oam = &gUnknown_08524AE4,
+ .anims = gUnknown_08592EA0,
+ .images = NULL,
+ .affineAnims = gUnknown_08592E70,
+ .callback = sub_810234C,
+};
+
+const struct SpriteTemplate gUnknown_08592EBC =
+{
+ .tileTag = ANIM_TAG_MOON,
+ .paletteTag = ANIM_TAG_MOON,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81024E0,
+};
+
+const union AnimCmd gUnknown_08592ED4[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(8, 8),
+ ANIMCMD_FRAME(12, 8),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08592EE8[] =
+{
+ gUnknown_08592ED4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8592EEC =
+{
+ .tileTag = ANIM_TAG_GREEN_SPARKLE,
+ .paletteTag = ANIM_TAG_GREEN_SPARKLE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08592EE8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102540,
+};
+
+const union AnimCmd gUnknown_08592F04[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_FRAME(80, 3),
+ ANIMCMD_FRAME(96, 2),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592F28[] =
+{
+ gUnknown_08592F04,
+};
+
+const struct SpriteTemplate gUnknown_08592F2C =
+{
+ .tileTag = ANIM_TAG_BLUE_STAR,
+ .paletteTag = ANIM_TAG_BLUE_STAR,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592F28,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_08592F44 =
+{
+ .tileTag = ANIM_TAG_HORN_HIT,
+ .paletteTag = ANIM_TAG_HORN_HIT,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102844,
+};
+
+const union AnimCmd gUnknown_08592F5C[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592F70[] =
+{
+ gUnknown_08592F5C,
+};
+
+const struct SpriteTemplate gUnknown_08592F74 =
+{
+ .tileTag = ANIM_TAG_FANG_ATTACK,
+ .paletteTag = ANIM_TAG_FANG_ATTACK,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08592F70,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102BCC,
+};
+
+const union AnimCmd gUnknown_08592F8C[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592F94[] =
+{
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592F9C[] =
+{
+ ANIMCMD_FRAME(8, 41),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FA4[] =
+{
+ ANIMCMD_FRAME(12, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FAC[] =
+{
+ ANIMCMD_FRAME(16, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FB4[] =
+{
+ ANIMCMD_FRAME(20, 10),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FBC[] =
+{
+ ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08592FC4[] =
+{
+ ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08592FCC[] =
+{
+ gUnknown_08592F8C,
+ gUnknown_08592F94,
+ gUnknown_08592F9C,
+ gUnknown_08592FA4,
+ gUnknown_08592FAC,
+ gUnknown_08592FB4,
+ gUnknown_08592FBC,
+ gUnknown_08592FC4,
+};
+
+const union AffineAnimCmd gUnknown_08592FEC[] =
+{
+ AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
+ AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_08593004[] =
+{
+ gUnknown_08592FEC,
+};
+
+const struct SpriteTemplate gUnknown_08593008 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593004,
+ .callback = sub_8102CD4,
+};
+
+const u16 gUnknown_08593020[][6] =
+{
+ {ANIM_TAG_MUSIC_NOTES, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)},
+ {ANIM_TAG_BENT_SPOON, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)},
+ {ANIM_TAG_SPHERE_TO_CUBE, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)},
+ {ANIM_TAG_LARGE_FRESH_EGG, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)},
+};
+
+const struct SpriteTemplate gUnknown_08593050 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593004,
+ .callback = sub_8102EB0,
+};
+
+const struct SpriteTemplate gUnknown_08593068 =
+{
+ .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
+ .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8102FB8,
+};
+
+const union AffineAnimCmd gUnknown_08593080[] =
+{
+ AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593098[] =
+{
+ gUnknown_08593080,
+};
+
+const struct SpriteTemplate gUnknown_0859309C =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_085249CC,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593098,
+ .callback = sub_8103028,
+};
+
+const union AnimCmd gUnknown_085930B4[] =
+{
+ ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085930C8[] =
+{
+ ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085930DC[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085930F0[] =
+{
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593104[] =
+{
+ gUnknown_085930B4,
+ gUnknown_085930DC,
+ gUnknown_085930C8,
+ gUnknown_085930F0,
+};
+
+const struct SpriteTemplate gUnknown_08593114 =
+{
+ .tileTag = ANIM_TAG_THOUGHT_BUBBLE,
+ .paletteTag = ANIM_TAG_THOUGHT_BUBBLE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593104,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103164,
+};
+
+const union AffineAnimCmd gUnknown_0859312C[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593144[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593144_2[] =
+{
+ AFFINEANIMCMD_FRAME(16, 16, 0, 0),
+ AFFINEANIMCMD_FRAME(30, 30, 0, 8),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 11),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 11),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_FRAME(-30, -30, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085931B4[] =
+{
+ gUnknown_0859312C,
+ gUnknown_08593144,
+};
+
+const struct SpriteTemplate gUnknown_085931BC =
+{
+ .tileTag = ANIM_TAG_FINGER,
+ .paletteTag = ANIM_TAG_FINGER,
+ .oam = &gUnknown_085249D4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085931B4,
+ .callback = sub_8103208,
+};
+
+const struct SpriteTemplate gUnknown_085931D4 =
+{
+ .tileTag = ANIM_TAG_FINGER,
+ .paletteTag = ANIM_TAG_FINGER,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085931B4,
+ .callback = sub_8103284,
+};
+
+const union AnimCmd gUnknown_085931EC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085931F4[] =
+{
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085931FC[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859321C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_0859323C[] =
+{
+ gUnknown_085931EC,
+ gUnknown_085931F4,
+ gUnknown_085931FC,
+ gUnknown_0859321C,
+};
+
+const struct SpriteTemplate gUnknown_0859324C =
+{
+ .tileTag = ANIM_TAG_FINGER_2,
+ .paletteTag = ANIM_TAG_FINGER_2,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_0859323C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103390,
+};
+
+// Animates the falling particles that horizontally wave back and forth.
+// Used by Sleep Powder, Stun Spore, and Poison Powder.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: total duration in frames
+// arg 3: vertical movement speed (sub-pixel value)
+// arg 4: wave amplitude
+// arg 5: wave speed
+void AnimMovePowderParticle(struct Sprite* sprite)
+{
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+
+ if (GetBattlerSide(gBattleAnimAttacker))
+ {
+ sprite->data[3] = -gBattleAnimArgs[4];
+ }
+ else
+ {
+ sprite->data[3] = gBattleAnimArgs[4];
+ }
+
+ sprite->data[4] = gBattleAnimArgs[5];
+ sprite->callback = AnimMovePowderParticleStep;
+}
+
+static void AnimMovePowderParticleStep(struct Sprite* sprite)
+{
+ if (sprite->data[0] > 0)
+ {
+ sprite->data[0]--;
+ sprite->pos2.y = sprite->data[2] >> 8;
+ sprite->data[2] += sprite->data[1];
+ sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]);
+ sprite->data[5] = (sprite->data[5] + sprite->data[4]) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Moves an energy orb towards the center of the mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+void AnimPowerAbsorptionOrb(struct Sprite* sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+}
+
+// Moves an orb in a straight line towards the target mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: sprite anim number
+void AnimSolarbeamBigOrb(struct Sprite* sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[3]);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Moves a small orb in a wavy pattern towards the target mon.
+// The small orb "circles" the big orbs in AnimSolarbeamBigOrb.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: duration
+// arg 3: initial wave offset
+void AnimSolarbeamSmallOrb(struct Sprite* sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = AnimSolarbeamSmallOrbStep;
+ sprite->callback(sprite);
+}
+
+static void AnimSolarbeamSmallOrbStep(struct Sprite* sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ {
+ DestroySprite(sprite);
+ }
+ else
+ {
+ if (sprite->data[5] > 0x7F)
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1;
+ else
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 6;
+
+ sprite->pos2.x += Sin(sprite->data[5], 5);
+ sprite->pos2.y += Cos(sprite->data[5], 14);
+ sprite->data[5] = (sprite->data[5] + 15) & 0xFF;
+ }
+}
+
+// Creates 15 small secondary orbs used in the solarbeam anim effect.
+// There is a 7-frame delay between each of them.
+// No args.
+void AnimTask_CreateSmallSolarbeamOrbs(u8 taskId)
+{
+ if (--gTasks[taskId].data[0] == -1)
+ {
+ gTasks[taskId].data[1]++;
+ gTasks[taskId].data[0] = 6;
+ gBattleAnimArgs[0] = 15;
+ gBattleAnimArgs[1] = 0;
+ gBattleAnimArgs[2] = 80;
+ gBattleAnimArgs[3] = 0;
+ CreateSpriteAndAnimate(&gSolarbeamSmallOrbSpriteTemplate, 0, 0, GetBattlerSpriteSubpriority(gBattleAnimTarget) + 1);
+ }
+
+ if (gTasks[taskId].data[1] == 15)
+ DestroyAnimVisualTask(taskId);
+}
+
+// Moves an orb from the target mon to the attacking mon in an arc-like fashion.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: wave amplitude
+// arg 3: wave period (lower means faster wave)
+void AnimAbsorptionOrb(struct Sprite* sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[5] = gBattleAnimArgs[2];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimAbsorptionOrbStep;
+}
+
+static void AnimAbsorptionOrbStep(struct Sprite* sprite)
+{
+ if (TranslateAnimArc(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// Moves an orb in a wave-like fashion towards the target mon. The wave's
+// properties and the sprite anim are randomly determined.
+void AnimHyperBeamOrb(struct Sprite* sprite)
+{
+ u16 speed;
+ u16 animNum = Random2();
+
+ StartSpriteAnim(sprite, animNum % 8);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= 20;
+ else
+ sprite->pos1.x += 20;
+
+ speed = Random2();
+ sprite->data[0] = (speed & 31) + 64;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ InitAnimFastLinearTranslationWithSpeed(sprite);
+ sprite->data[5] = Random2() & 0xFF;
+ sprite->data[6] = sprite->subpriority;
+ sprite->callback = AnimHyperBeamOrbStep;
+ sprite->callback(sprite);
+}
+
+static void AnimHyperBeamOrbStep(struct Sprite* sprite)
+{
+ if (AnimFastTranslateLinear(sprite))
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ sprite->pos2.y += Cos(sprite->data[5], 12);
+ if (sprite->data[5] < 0x7F)
+ sprite->subpriority = sprite->data[6];
+ else
+ sprite->subpriority = sprite->data[6] + 1;
+
+ sprite->data[5] += 24;
+ sprite->data[5] &= 0xFF;
+ }
+}
+
+// seed (sprouts a sapling from a seed.)
+// Used by Leech Seed.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+// arg 5: wave amplitude
+void AnimLeechSeed(struct Sprite* sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimArcTranslation(sprite);
+ sprite->callback = AnimLeechSeedStep;
+}
+
+static void AnimLeechSeedStep(struct Sprite* sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ sprite->invisible = 1;
+ sprite->data[0] = 10;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, AnimLeechSeedSprouts);
+ }
+}
+
+static void AnimLeechSeedSprouts(struct Sprite* sprite)
+{
+ sprite->invisible = 0;
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 60;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Moves a spore particle in a halo around the target mon.
+// The sprite's priority is updated to give the effect of going
+// behind the mon's sprite.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: initial wave offset
+// arg 3: duration
+// arg 4: blend (0 = off, 1 = on)
+void AnimSporeParticle(struct Sprite* sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+ if (gBattleAnimArgs[4] == 1)
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->callback = AnimSporeParticleStep;
+ sprite->callback(sprite);
+}
+
+static void AnimSporeParticleStep(struct Sprite* sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[1], 32);
+ sprite->pos2.y = Cos(sprite->data[1], -3) + ((sprite->data[2] += 24) >> 8);
+ if ((u16)(sprite->data[1] - 0x40) < 0x80)
+ {
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ }
+ else
+ {
+ u8 priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
+ if (priority > 3)
+ priority = 3;
+
+ sprite->oam.priority = priority;
+ }
+
+ sprite->data[1] += 2;
+ sprite->data[1] &= 0xFF;
+ if (--sprite->data[0] == -1)
+ DestroyAnimSprite(sprite);
+}
+
+// In a double battle, Updates the mon sprite background priorities to allow
+// the circling effect controlled by AnimSporeParticle.
+// No args.
+void AnimTask_SporeDoubleBattle(u8 taskId)
+{
+ if (IsContest() || !IsDoubleBattle())
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1)
+ SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 3);
+ else
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Rotates a big flower around the attacking mon, and slowly floats
+// downward.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target y pixel offset
+// arg 3: duration
+void AnimPetalDanceBigFlower(struct Sprite* sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = 0x40;
+ sprite->callback = AnimPetalDanceBigFlowerStep;
+ sprite->callback(sprite);
+}
+
+static void AnimPetalDanceBigFlowerStep(struct Sprite* sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[5], 32);
+ sprite->pos2.y += Cos(sprite->data[5], -5);
+ if ((u16)(sprite->data[5] - 0x40) < 0x80)
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ else
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1;
+
+ sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Slowly floats a small flower downard, while swaying from right to left.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target y pixel offset
+// arg 3: duration
+void AnimPetalDanceSmallFlower(struct Sprite* sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = 0x40;
+ sprite->callback = AnimPetalDanceSmallFlowerStep;
+ sprite->callback(sprite);
+}
+
+static void AnimPetalDanceSmallFlowerStep(struct Sprite* sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[5], 8);
+ if ((u16)(sprite->data[5] - 59) < 5 || (u16)(sprite->data[5] - 187) < 5)
+ sprite->oam.matrixNum ^= 0x8; // horizontal flip
+
+ sprite->data[5] += 5;
+ sprite->data[5] &= 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Shoots a leaf upward, then floats it downward while swaying back and forth.
+// arg 0: upward x delta per frame
+// arg 1: upward y delta per frame
+// arg 2: upward duration
+void AnimRazorLeafParticle(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->callback = AnimRazorLeafParticleStep1;
+}
+
+static void AnimRazorLeafParticleStep1(struct Sprite* sprite)
+{
+ if (!sprite->data[2])
+ {
+ if (sprite->data[1] & 1)
+ {
+ sprite->data[0] = 0x80;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ }
+ sprite->callback = AnimRazorLeafParticleStep2;
+ }
+ else
+ {
+ sprite->data[2]--;
+ sprite->pos1.x += sprite->data[0];
+ sprite->pos1.y += sprite->data[1];
+ }
+}
+
+static void AnimRazorLeafParticleStep2(struct Sprite* sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker))
+ sprite->pos2.x = -Sin(sprite->data[0], 25);
+ else
+ sprite->pos2.x = Sin(sprite->data[0], 25);
+
+ sprite->data[0] += 2;
+ sprite->data[0] &= 0xFF;
+ sprite->data[1]++;
+ if (!(sprite->data[1] & 1))
+ sprite->pos2.y++;
+
+ if (sprite->data[1] > 80)
+ DestroyAnimSprite(sprite);
+}
+
+// Animates a sprite that moves linearly from one location to another, with a
+// single-cycle sine wave added to the y position along the way.
+// Used by Razor Leaf and Magical Leaf.
+// arg 0: initial x offset
+// arg 1: initial y offset
+// arg 2: target x offset
+// arg 3: target y offset
+// arg 4: translation duration
+// arg 5: wave amplitude
+// arg 6: target between double battle opponents (boolean)
+void AnimTranslateLinearSingleSineWave(struct Sprite* sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (!gBattleAnimArgs[6])
+ {
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3];
+ }
+ else
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, TRUE, &sprite->data[2], &sprite->data[4]);
+ sprite->data[2] += gBattleAnimArgs[2];
+ sprite->data[4] += gBattleAnimArgs[3];
+ }
+
+ sprite->data[5] = gBattleAnimArgs[5];
+ InitAnimArcTranslation(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
+ sprite->data[0] = 1;
+ else
+ sprite->data[0] = 0;
+
+ sprite->callback = AnimTranslateLinearSingleSineWaveStep;
+}
+
+static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite)
+{
+ bool8 destroy = FALSE;
+ s16 a = sprite->data[0];
+ s16 b = sprite->data[7];
+ s16 r0;
+
+ sprite->data[0] = 1;
+ TranslateAnimArc(sprite);
+ r0 = sprite->data[7];
+ sprite->data[0] = a;
+ if (b > 200 && r0 < 56 && sprite->oam.affineParam == 0)
+ sprite->oam.affineParam++;
+
+ if (sprite->oam.affineParam && sprite->data[0])
+ {
+ sprite->invisible ^= 1;
+ sprite->oam.affineParam++;
+ if (sprite->oam.affineParam == 30)
+ destroy = TRUE;
+ }
+
+ if (sprite->pos1.x + sprite->pos2.x > 256
+ || sprite->pos1.x + sprite->pos2.x < -16
+ || sprite->pos1.y + sprite->pos2.y > 160
+ || sprite->pos1.y + sprite->pos2.y < -16)
+ destroy = TRUE;
+
+ if (destroy)
+ DestroyAnimSprite(sprite);
+}
+
+// Animates particles in the Twister move animation.
+// arg 0: duration
+// arg 1: total y delta (the particles rise upward)
+// arg 2: wave period (higher means faster wave)
+// arg 3: wave amplitude
+// arg 4: speedup frame (particles move faster at the end of the animation)
+void AnimMoveTwisterParticle(struct Sprite* sprite)
+{
+ if (IsDoubleBattle() == TRUE)
+ SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->pos1.x, &sprite->pos1.y);
+
+ sprite->pos1.y += 32;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[3] = gBattleAnimArgs[3];
+ sprite->data[4] = gBattleAnimArgs[4];
+ sprite->callback = AnimMoveTwisterParticleStep;
+}
+
+static void AnimMoveTwisterParticleStep(struct Sprite* sprite)
+{
+ if (sprite->data[1] == 0xFF)
+ {
+ sprite->pos1.y -= 2;
+ }
+ else if (sprite->data[1] > 0)
+ {
+ sprite->pos1.y -= 2;
+ sprite->data[1] -= 2;
+ }
+
+ sprite->data[5] += sprite->data[2];
+ if (sprite->data[0] < sprite->data[4])
+ sprite->data[5] += sprite->data[2];
+
+ sprite->data[5] &= 0xFF;
+ sprite->pos2.x = Cos(sprite->data[5], sprite->data[3]);
+ sprite->pos2.y = Sin(sprite->data[5], 5);
+ if (sprite->data[5] < 0x80)
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) - 1;
+ else
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
+
+ if (--sprite->data[0] == 0)
+ DestroyAnimSprite(sprite);
+}
+
+// Squeezes a constricting "rope" several times via affine animations.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: affine anim num
+// arg 3: num squeezes
+void AnimConstrictBinding(struct Sprite* sprite)
+{
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ sprite->affineAnimPaused = 1;
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[3];
+ sprite->callback = AnimConstrictBindingStep1;
+}
+
+static void AnimConstrictBindingStep1(struct Sprite* sprite)
+{
+ u8 spriteId;
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->affineAnimPaused = 0;
+ spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ sprite->data[0] = 0x100;
+ sprite->callback = AnimConstrictBindingStep2;
+ }
+}
+
+static void AnimConstrictBindingStep2(struct Sprite* sprite)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ if (!sprite->data[2])
+ sprite->data[0] += 11;
+ else
+ sprite->data[0] -= 11;
+
+ if (++sprite->data[1] == 6)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] ^= 1;
+ }
+
+ if (sprite->affineAnimEnded)
+ {
+ if (--sprite->data[7] > 0)
+ StartSpriteAffineAnim(sprite, sprite->data[6]);
+ else
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_80FF458(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ if (gSprites[spriteId].invisible)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
+ gTasks[taskId].data[14] = gSprites[spriteId].oam.priority;
+ gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
+ spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
+ gTasks[taskId].data[15] = gSprites[spriteId].oam.priority;
+ gSprites[spriteId].oam.priority = GetBattlerSpriteBGPriority(BATTLE_PARTNER(gBattleAnimTarget));
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[1] = gBattleAnimArgs[1];
+ gTasks[taskId].data[11] = 0x100;
+ gTasks[taskId].func = sub_80FF53C;
+ }
+}
+
+static void sub_80FF53C(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ gTasks[taskId].data[10] += gTasks[taskId].data[0];
+ gSprites[spriteId].pos2.x = gTasks[taskId].data[10] >> 8;
+ if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+
+ gTasks[taskId].data[11] += 16;
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[11], gTasks[taskId].data[11], 0);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ if (--gTasks[taskId].data[1] == 0)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = sub_80FF5CC;
+ }
+}
+
+static void sub_80FF5CC(u8 taskId)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ ResetSpriteRotScale(spriteId);
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ gSprites[spriteId].oam.priority = gTasks[taskId].data[14];
+ spriteId = GetAnimBattlerSpriteId(ANIM_DEF_PARTNER);
+ gSprites[spriteId].oam.priority = gTasks[taskId].data[15];
+ gTasks[taskId].data[0]++;
+ return;
+ }
+ }
+ else
+ {
+ if (gTasks[taskId].data[0] == 0)
+ return;
+ }
+
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0] == 3)
+ DestroyAnimVisualTask(taskId);
+}
+
+// Moves an orb from the target mon to the attacking mon.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+void AnimMimicOrb(struct Sprite* sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ gBattleAnimArgs[0] *= -1;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + gBattleAnimArgs[1];
+ sprite->invisible = 1;
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->invisible = 0;
+ if (sprite->affineAnimEnded)
+ {
+ ChangeSpriteAffineAnim(sprite, 1);
+ sprite->data[0] = 25;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = InitAndRunAnimFastLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ break;
+ }
+ }
+}
+
+// Animates a root that flickers away after some time.
+// arg 0: x pixel offset
+// arg 1: y pixel offset
+// arg 2: sprite subpriority offset
+// arg 3: sprite anim num
+// arg 4: duration
+void AnimIngrainRoot(struct Sprite* sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
+ sprite->pos2.x = gBattleAnimArgs[0];
+ sprite->pos2.y = gBattleAnimArgs[1];
+ sprite->subpriority = gBattleAnimArgs[2] + 30;
+ StartSpriteAnim(sprite, gBattleAnimArgs[3]);
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[0]++;
+ if (sprite->pos1.y + sprite->pos2.y > 120)
+ sprite->pos1.y += sprite->pos2.y + sprite->pos1.y - 120;
+ }
+ sprite->callback = AnimRootFlickerOut;
+}
+
+// Places a root on the path to the target mon that flickers away after some time.
+// arg 0: percent along the path to the target mon
+// arg 1: x pixel offset
+// arg 2: y pixel offset
+// arg 3: sprite subpriority offset
+// arg 4: sprite anum num
+// arg 5: duration
+void AnimFrenzyPlantRoot(struct Sprite *sprite)
+{
+ s16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ s16 attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ s16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+
+ targetX -= attackerX;
+ targetY -= attackerY;
+ sprite->pos1.x = attackerX + targetX * gBattleAnimArgs[0] / 100;
+ sprite->pos1.y = attackerY + targetY * gBattleAnimArgs[0] / 100;
+ sprite->pos2.x = gBattleAnimArgs[1];
+ sprite->pos2.y = gBattleAnimArgs[2];
+ sprite->subpriority = gBattleAnimArgs[3] + 30;
+ StartSpriteAnim(sprite, gBattleAnimArgs[4]);
+ sprite->data[2] = gBattleAnimArgs[5];
+ sprite->callback = AnimRootFlickerOut;
+ gUnknown_0203A0F8[0] = sprite->pos1.x;
+ gUnknown_0203A0F8[1] = sprite->pos1.y;
+ gUnknown_0203A0F8[2] = targetX;
+ gUnknown_0203A0F8[3] = targetY;
+}
+
+static void AnimRootFlickerOut(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > (sprite->data[2] - 10))
+ sprite->invisible = sprite->data[0] % 2;
+
+ if (sprite->data[0] > sprite->data[2])
+ DestroyAnimSprite(sprite);
+}
+
+// Moves an orb in a fast wavy path.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: horizontal velocity
+// arg 3: wave amplitude
+// arg 4: duration
+void AnimIngrainOrb(struct Sprite* sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+ }
+
+ sprite->data[0]++;
+ sprite->pos2.x = sprite->data[1] * sprite->data[0];
+ sprite->pos2.y = Sin((sprite->data[0] * 20) & 0xFF, sprite->data[2]);
+ if (sprite->data[0] > sprite->data[3])
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80FF9B8(struct Sprite* sprite, s16 c)
+{
+ int a = (sprite->pos1.x << 8) | sprite->pos1.y;
+ int b = (sprite->data[6] << 8) | sprite->data[7];
+ c <<= 8;
+ sprite->data[5] = a;
+ sprite->data[6] = b;
+ sprite->data[7] = c;
+}
+
+bool8 sub_80FF9E0(struct Sprite* sprite)
+{
+ u16 r10 = (u8)(sprite->data[5] >> 8);
+ u16 r9 = (u8)sprite->data[5];
+ s32 r2 = (u8)(sprite->data[6] >> 8);
+ s32 r4 = (u8)sprite->data[6];
+ s16 r6 = sprite->data[7] >> 8;
+ s16 r3 = sprite->data[7] & 0xFF;
+ s16 r4_2;
+ s16 r0;
+ s32 var1;
+ s32 var2;
+
+ if (r2 == 0)
+ r2 = -32;
+ else if (r2 == 255)
+ r2 = 272;
+
+ r4_2 = r4 - r9;
+ r0 = r2 - r10;
+ var1 = r0 * r3 / r6;
+ var2 = r4_2 * r3 / r6;
+ sprite->pos1.x = var1 + r10;
+ sprite->pos1.y = var2 + r9;
+ if (++r3 == r6)
+ return TRUE;
+
+ sprite->data[7] = (r6 << 8) | r3;
+ return FALSE;
+}
+
+void sub_80FFA84(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 10)
+ StartSpriteAffineAnim(sprite, 1);
+
+ sprite->data[0]++;
+ if (sprite->data[0] > 50)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_80FFAB4(struct Sprite* sprite)
+{
+ sprite->data[0] += sprite->data[3] * 128 / sprite->data[4];
+ if (sprite->data[0] >= 128)
+ {
+ sprite->data[1]++;
+ sprite->data[0] = 0;
+ }
+
+ sprite->pos2.y = Sin(sprite->data[0] + 128, 30 - sprite->data[1] * 8);
+ if (sub_80FF9E0(sprite))
+ {
+ sprite->pos2.y = 0;
+ sprite->data[0] = 0;
+ sprite->callback = sub_80FFA84;
+ }
+}
+
+void AnimPresent(struct Sprite* sprite)
+{
+ s16 targetX;
+ s16 targetY;
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+ if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget)
+ {
+ sprite->data[6] = targetX;
+ sprite->data[7] = targetY + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 1;
+ }
+ else
+ {
+ sprite->data[6] = targetX;
+ sprite->data[7] = targetY + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 3;
+ }
+
+ sprite->data[4] = 60;
+ sprite->callback = sub_80FFAB4;
+}
+
+static void sub_80FFB90(struct Sprite* sprite)
+{
+ int zero;
+ sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
+ zero = 0;
+ if (sprite->data[0] > 0x7F)
+ {
+ sprite->data[1]++;
+ sprite->data[0] = zero;
+ }
+
+ sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8);
+ if (sub_80FF9E0(sprite))
+ {
+ sprite->pos2.y = zero;
+ sprite->data[0] = zero;
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void AnimKnockOffItem(struct Sprite* sprite)
+{
+ s16 targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7] = targetY + 10;
+ sub_80FF9B8(sprite, 40);
+ sprite->data[3] = 3;
+ sprite->data[4] = 60;
+ sprite->callback = sub_80FFAB4;
+ }
+ else
+ {
+ sprite->data[6] = 255;
+ sprite->data[7] = targetY + 10;
+ if (IsContest())
+ sprite->data[6] = 0;
+
+ sub_80FF9B8(sprite, 40);
+ sprite->data[3] = 3;
+ sprite->data[4] = 60;
+ sprite->callback = sub_80FFB90;
+ }
+}
+
+// Animates a heal particle upward.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: vertical velocity
+// arg 3: unused
+void AnimPresentHealParticle(struct Sprite* sprite)
+{
+ if (!sprite->data[0])
+ {
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ sprite->data[1] = gBattleAnimArgs[2];
+ }
+
+ sprite->data[0]++;
+ sprite->pos2.y = sprite->data[1] * sprite->data[0];
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void AnimItemSteal(struct Sprite* sprite)
+{
+ s16 attackerX;
+ s16 attackerY;
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ attackerY = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
+ if (BATTLE_PARTNER(gBattleAnimTarget) == gBattleAnimAttacker)
+ {
+ sprite->data[6] = attackerX;
+ sprite->data[7] = attackerY + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 1;
+ }
+ else
+ {
+ sprite->data[6] = attackerX;
+ sprite->data[7] = attackerY + 10;
+ sub_80FF9B8(sprite, 60);
+ sprite->data[3] = 3;
+ }
+
+ sprite->data[4] = 60;
+ sprite->callback = AnimItemStealStep;
+}
+
+static void AnimItemStealStep(struct Sprite* sprite)
+{
+ int zero;
+ sprite->data[0] += ((sprite->data[3] * 128) / sprite->data[4]);
+ zero = 0;
+ if (sprite->data[0] > 127)
+ {
+ sprite->data[1]++;
+ sprite->data[0] = zero;
+ }
+
+ sprite->pos2.y = Sin(sprite->data[0] + 0x80, 30 - sprite->data[1] * 8);
+ if (sprite->pos2.y == 0)
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(63));
+
+ if (sub_80FF9E0(sprite))
+ {
+ sprite->pos2.y = 0;
+ sprite->data[0] = 0;
+ sprite->callback = sub_80FFA84;
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ }
+}
+
+// Moves a bag in a circular motion.
+// arg 0: y position
+// arg 1: initial wave offset
+void AnimTrickBag(struct Sprite* sprite)
+{
+ int a;
+ int b;
+
+ if (!sprite->data[0])
+ {
+ if (!IsContest())
+ {
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->pos1.x = 120;
+ }
+ else
+ {
+ a = gBattleAnimArgs[1] - 32;
+ if (a < 0)
+ b = gBattleAnimArgs[1] + 0xDF;
+ else
+ b = a;
+
+ sprite->data[1] = a - ((b >> 8) << 8);
+ sprite->pos1.x = 70;
+ }
+
+ sprite->pos1.y = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[0];
+ sprite->data[4] = 20;
+ sprite->pos2.x = Cos(sprite->data[1], 60);
+ sprite->pos2.y = Sin(sprite->data[1], 20);
+ sprite->callback = AnimTrickBagStep1;
+ if (sprite->data[1] > 0 && sprite->data[1] < 192)
+ sprite->subpriority = 31;
+ else
+ sprite->subpriority = 29;
+ }
+}
+
+static void AnimTrickBagStep1(struct Sprite* sprite)
+{
+ switch (sprite->data[3])
+ {
+ case 0:
+ if (sprite->data[2] > 78)
+ {
+ sprite->data[3] = 1;
+ StartSpriteAffineAnim(sprite, 1);
+ break;
+ }
+ else
+ {
+ sprite->data[2] += sprite->data[4] / 10;
+ sprite->data[4] += 3;
+ sprite->pos1.y = sprite->data[2];
+ break;
+ }
+ break;
+ case 1:
+ if (sprite->data[3] && sprite->affineAnimEnded)
+ {
+ sprite->data[0] = 0;
+ sprite->data[2] = 0;
+ sprite->callback = AnimTrickBagStep2;
+ }
+ break;
+ }
+}
+
+static void AnimTrickBagStep2(struct Sprite* sprite)
+{
+ if (sprite->data[2] == gUnknown_08592700[sprite->data[0]][1])
+ {
+ if (gUnknown_08592700[sprite->data[0]][2] == 127)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = AnimTrickBagStep3;
+ }
+
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[2]++;
+ sprite->data[1] = (gUnknown_08592700[sprite->data[0]][0] * gUnknown_08592700[sprite->data[0]][2] + sprite->data[1]) & 0xFF;
+ if (!IsContest())
+ {
+ if ((u16)(sprite->data[1] - 1) < 191)
+ sprite->subpriority = 31;
+ else
+ sprite->subpriority = 29;
+ }
+
+ sprite->pos2.x = Cos(sprite->data[1], 60);
+ sprite->pos2.y = Sin(sprite->data[1], 20);
+ }
+}
+
+static void AnimTrickBagStep3(struct Sprite* sprite)
+{
+ if (sprite->data[0] > 20)
+ DestroyAnimSprite(sprite);
+
+ sprite->invisible = sprite->data[0] % 2;
+ sprite->data[0]++;
+}
+
+void sub_80FFFC0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[4] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1;
+ task->data[6] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ task->data[7] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ task->data[10] = sub_80A861C(gBattleAnimTarget, 1);
+ task->data[11] = sub_80A861C(gBattleAnimTarget, 0);
+ task->data[5] = (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT) ? 1 : -1;
+ task->data[9] = 56 - (task->data[5] * 64);
+ task->data[8] = task->data[7] - task->data[9] + task->data[6];
+ task->data[2] = CreateSprite(&gUnknown_08592778, task->data[8], task->data[9], task->data[4]);
+ if (task->data[2] == MAX_SPRITES)
+ DestroyAnimVisualTask(taskId);
+
+ gSprites[task->data[2]].data[0] = 10;
+ gSprites[task->data[2]].data[1] = task->data[8];
+ gSprites[task->data[2]].data[2] = task->data[6] - (task->data[10] / 2 + 10) * task->data[5];
+ gSprites[task->data[2]].data[3] = task->data[9];
+ gSprites[task->data[2]].data[4] = task->data[7] + (task->data[11] / 2 + 10) * task->data[5];
+ gSprites[task->data[2]].data[5] = sub_8100504(&gSprites[task->data[2]]);
+ InitAnimArcTranslation(&gSprites[task->data[2]]);
+ task->func = sub_8100128;
+}
+
+static void sub_8100128(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ struct Sprite* sprite = &gSprites[task->data[2]];
+ int a = task->data[0];
+ switch (a)
+ {
+ case 4:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 5;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 8:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 9;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 0:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 1;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 1:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 10;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[6];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[7];
+ sprite->data[5] = sub_8100504(sprite);
+ task->data[4] += 2;
+ task->data[3] = a;
+ sprite->subpriority = task->data[4];
+ StartSpriteAnim(sprite, task->data[3]);
+ InitAnimArcTranslation(sprite);
+ task->data[0]++;
+ break;
+ case 2:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 3;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 3:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 10;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[7] - ((task->data[11] / 2) + 10) * task->data[5];
+ sprite->data[5] = sub_8100504(sprite);
+ task->data[3] = 2;
+ sprite->subpriority = task->data[4];
+ StartSpriteAnim(sprite, task->data[3]);
+ InitAnimArcTranslation(sprite);
+ task->data[0]++;
+ break;
+ case 5:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 10;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[6] + ((task->data[10] / 2) + 10) * task->data[5];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5];
+ sprite->data[5] = sub_8100504(sprite);
+ task->data[4] -= 2;
+ task->data[3] = 3;
+ sprite->subpriority = task->data[4];
+ StartSpriteAnim(sprite, task->data[3]);
+ InitAnimArcTranslation(sprite);
+ task->data[0]++;
+ break;
+ case 6:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 7;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 7:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 10;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[6];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[7];
+ sprite->data[5] = sub_8100504(sprite);
+ task->data[4] += 2;
+ task->data[3] = 4;
+ sprite->subpriority = task->data[4];
+ StartSpriteAnim(sprite, task->data[3]);
+ InitAnimArcTranslation(sprite);
+ task->data[0]++;
+ break;
+ case 9:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 10;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[6] - ((task->data[10] / 2) + 10) * task->data[5];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[7] + ((task->data[11] / 2) + 10) * task->data[5];
+ sprite->data[5] = sub_8100504(sprite);
+ task->data[3] = 5;
+ sprite->subpriority = task->data[4];
+ StartSpriteAnim(sprite, task->data[3]);
+ InitAnimArcTranslation(sprite);
+ task->data[0]++;
+ break;
+ case 10:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ task->data[15] = 11;
+ task->data[0] = 0xFF;
+ }
+ break;
+ case 11:
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 10;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[8];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[9];
+ sprite->data[5] = sub_8100504(sprite);
+ task->data[4] -= 2;
+ task->data[3] = 6;
+ sprite->subpriority = task->data[4];
+ StartSpriteAnim(sprite, task->data[3]);
+ InitAnimArcTranslation(sprite);
+ task->data[0]++;
+ break;
+ }
+ case 12:
+ sub_8100524(task, taskId);
+ if (TranslateAnimArc(sprite))
+ {
+ DestroySprite(sprite);
+ task->data[0]++;
+ }
+ break;
+ case 13:
+ if (task->data[12] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ case 0xFF:
+ if (++task->data[1] > 5)
+ {
+ task->data[1] = 0;
+ task->data[0] = task->data[15];
+ }
+ break;
+ }
+}
+
+static s16 sub_8100504(struct Sprite* sprite)
+{
+ s16 var = 8;
+ if (sprite->data[4] < sprite->pos1.y)
+ var = -var;
+
+ return var;
+}
+
+static void sub_8100524(struct Task* task, u8 taskId)
+{
+ task->data[14]++;
+ if (task->data[14] > 0)
+ {
+ u8 spriteId;
+ s16 spriteX;
+ s16 spriteY;
+ task->data[14] = 0;
+ spriteX = gSprites[task->data[2]].pos1.x + gSprites[task->data[2]].pos2.x;
+ spriteY = gSprites[task->data[2]].pos1.y + gSprites[task->data[2]].pos2.y;
+ spriteId = CreateSprite(&gUnknown_08592778, spriteX, spriteY, task->data[4]);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 12;
+ gTasks[taskId].data[12]++;
+ gSprites[spriteId].data[0] = task->data[13] & 1;
+ gTasks[taskId].data[13]++;
+ StartSpriteAnim(&gSprites[spriteId], task->data[3]);
+ gSprites[spriteId].subpriority = task->data[4];
+ gSprites[spriteId].callback = sub_80CC408;
+ }
+ }
+}
+
+static void sub_80CC408(struct Sprite* sprite)
+{
+ sprite->data[0]++;
+ if (sprite->data[0] > 1)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible ^= 1;
+ sprite->data[1]++;
+ if (sprite->data[1] > 8)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+ }
+}
+
+void sub_8100640(struct Sprite* sprite)
+{
+ u8 battler;
+ if (!gBattleAnimArgs[6])
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ if (GetBattlerSide(battler) != 0)
+ {
+ sprite->data[4] = 0;
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->pos1.x = 0xFFF0;
+ }
+ else
+ {
+ sprite->data[4] = 1;
+ sprite->data[2] = -gBattleAnimArgs[3];
+ sprite->pos1.x = 0x100;
+ }
+
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[3] = gBattleAnimArgs[4];
+ switch (gBattleAnimArgs[5])
+ {
+ case 0:
+ sprite->pos1.y = gBattleAnimArgs[0];
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
+ break;
+ case 1:
+ sprite->pos1.y = gBattleAnimArgs[0];
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
+ break;
+ case 2:
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[0];
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler);
+ break;
+ case 3:
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[0];
+ GetAnimBattlerSpriteId(ANIM_TARGET);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
+ break;
+ }
+
+ sprite->callback = sub_810074C;
+}
+
+static void sub_810074C(struct Sprite* sprite)
+{
+ int a = sprite->data[7];
+ sprite->data[7]++;
+ sprite->pos2.y = (sprite->data[1] * gSineTable[sprite->data[0]]) >> 8;
+ sprite->pos2.x = sprite->data[2] * a;
+ sprite->data[0] = (sprite->data[3] * a) & 0xFF;
+ if (!sprite->data[4])
+ {
+ if (sprite->pos2.x + sprite->pos1.x <= 0xF7)
+ return;
+ }
+ else
+ {
+ if (sprite->pos2.x + sprite->pos1.x > -16)
+ return;
+ }
+
+ DestroySpriteAndMatrix(sprite);
+}
+
+void sub_81007C4(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[8] = IndexOfSpritePaletteTag(ANIM_TAG_LEAF) * 16 + 256;
+ task->data[12] = IndexOfSpritePaletteTag(ANIM_TAG_RAZOR_LEAF) * 16 + 256;
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[9] >= 0)
+ {
+ task->data[9] = 0;
+ BlendPalette(task->data[8], 16, task->data[10], gMagicalLeafBlendColors[task->data[11]]);
+ BlendPalette(task->data[12], 16, task->data[10], gMagicalLeafBlendColors[task->data[11]]);
+ if (++task->data[10] == 17)
+ {
+ task->data[10] = 0;
+ if (++task->data[11] == 7)
+ task->data[11] = 0;
+ }
+ }
+ break;
+ }
+
+ if (gBattleAnimArgs[7] == -1)
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8100898(struct Sprite* sprite)
+{
+ u8 a;
+ u8 b;
+ u16 c;
+ u16 x;
+ u16 y;
+
+ if (gBattleAnimArgs[4] == 0)
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ if (gBattleAnimArgs[0] == 0)
+ {
+ a = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ b = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ }
+ else
+ {
+ a = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ b = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ if (gBattleAnimArgs[1] == 0)
+ {
+ sprite->pos1.x = gBattleAnimArgs[2] + a;
+ sprite->pos1.y = gBattleAnimArgs[3] + b;
+ sprite->data[5] = a;
+ sprite->data[6] = b;
+ }
+ else
+ {
+ sprite->pos1.x = a;
+ sprite->pos1.y = b;
+ sprite->data[5] = gBattleAnimArgs[2] + a;
+ sprite->data[6] = gBattleAnimArgs[3] + b;
+ }
+
+ x = sprite->pos1.x;
+ sprite->data[1] = x * 16;
+ y = sprite->pos1.y;
+ sprite->data[2] = y * 16;
+ sprite->data[3] = (sprite->data[5] - sprite->pos1.x) * 16 / gBattleAnimArgs[4];
+ sprite->data[4] = (sprite->data[6] - sprite->pos1.y) * 16 / gBattleAnimArgs[4];
+ c = ArcTan2Neg(sprite->data[5] - x, sprite->data[6] - y);
+ if (IsContest())
+ c -= 0x8000;
+
+ TrySetSpriteRotScale(sprite, 0, 0x100, 0x100, c);
+ sprite->callback = sub_81009A0;
+ }
+}
+
+static void sub_81009A0(struct Sprite* sprite)
+{
+ if (sprite->data[0])
+ {
+ sprite->data[1] += sprite->data[3];
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[1] >> 4 ;
+ sprite->pos1.y = sprite->data[2] >> 4 ;
+ sprite->data[0]--;
+ }
+ else
+ {
+ DestroySpriteAndMatrix(sprite);
+ }
+}
+
+static void sub_81009DC(struct Sprite* sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81009F8(struct Sprite* sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_8100A50(struct Sprite* sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == 0)
+ StartSpriteAnim(sprite, 1);
+
+ sprite->callback = sub_81009DC;
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+}
+
+void sub_8100A94(struct Sprite* sprite)
+{
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+ sprite->data[5] = gBattleAnimArgs[5];
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[6]);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = sub_80A66DC;
+}
+
+// Moves the sprite in a diagonally slashing motion across the target mon.
+// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: slice direction; 0 = right-to-left, 1 = left-to-right
+void AnimCuttingSlice(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ sprite->pos1.y += 8;
+
+ sprite->callback = AnimSliceStep;
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ }
+ else
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->hFlip = 1;
+ }
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[1] -= 0x400;
+ sprite->data[2] += 0x400;
+ sprite->data[5] = gBattleAnimArgs[2];
+ if (sprite->data[5] == 1)
+ sprite->data[1] = -sprite->data[1];
+}
+
+void sub_8100B88(struct Sprite* sprite)
+{
+ u8 a;
+ u8 b;
+ switch (gBattleAnimArgs[3])
+ {
+ case 1:
+ a = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0);
+ b = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1);
+ break;
+ case 2:
+ a = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ b = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
+ {
+ a = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 0) + a) / 2;
+ b = (GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimTarget), 1) + b) / 2;
+ }
+ break;
+ case 0:
+ default:
+ a = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ b = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ break;
+ }
+
+ sprite->pos1.x = a;
+ sprite->pos1.y = b;
+ if (GetBattlerSide(gBattleAnimTarget) == 0)
+ sprite->pos1.y += 8;
+
+ sprite->callback = AnimSliceStep;
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ }
+ else
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->hFlip = 1;
+ }
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[1] -= 0x400;
+ sprite->data[2] += 0x400;
+ sprite->data[5] = gBattleAnimArgs[2];
+ if (sprite->data[5] == 1)
+ sprite->data[1] = -sprite->data[1];
+}
+
+static void AnimSliceStep(struct Sprite* sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ if (sprite->data[5] == 0)
+ sprite->data[1] += 0x18;
+ else
+ sprite->data[1] -= 0x18;
+
+ sprite->data[2] -= 0x18;
+ sprite->pos2.x = sprite->data[3] >> 8;
+ sprite->pos2.y = sprite->data[4] >> 8;
+ sprite->data[0]++;
+ if (sprite->data[0] == 20)
+ {
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->data[0] = 3;
+ sprite->callback = WaitAnimForDuration;
+ }
+}
+
+void unref_sub_8100D38(struct Sprite* sprite)
+{
+ if (sprite->data[2] > 1)
+ {
+ if (sprite->data[3] & 1)
+ {
+ sprite->invisible = 0;
+ gSprites[sprite->data[0]].invisible = 0;
+ gSprites[sprite->data[1]].invisible = 0;
+ }
+ else
+ {
+ sprite->invisible = 1;
+ gSprites[sprite->data[0]].invisible = 1;
+ gSprites[sprite->data[1]].invisible = 1;
+ }
+
+ sprite->data[2] = 0;
+ sprite->data[3]++;
+ }
+ else
+ {
+ sprite->data[2]++;
+ }
+
+ if (sprite->data[3] == 10)
+ {
+ DestroySprite(&gSprites[sprite->data[0]]);
+ DestroySprite(&gSprites[sprite->data[1]]);
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_8100E1C(struct Sprite* sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[2];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[5]);
+ sprite->data[1] = -gBattleAnimArgs[3];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[3] = gBattleAnimArgs[4];
+ sprite->callback = sub_8100E80;
+ sprite->callback(sprite);
+}
+
+static void sub_8100E80(struct Sprite* sprite)
+{
+ sprite->pos2.x = Cos(sprite->data[0], 100);
+ sprite->pos2.y = Sin(sprite->data[0], 20);
+ if (sprite->data[0] < 128)
+ sprite->subpriority = 0;
+ else
+ sprite->subpriority = 14;
+
+ sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF;
+ sprite->data[5] += 0x82;
+ sprite->pos2.y += sprite->data[5] >> 8;
+ sprite->data[2]++;
+ if (sprite->data[2] == sprite->data[3])
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8100EF0(struct Sprite* sprite)
+{
+ if (IsContest())
+ gBattleAnimArgs[1] += 8;
+
+ sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER || IsContest())
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker) + 1;
+ else
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = (IndexOfSpritePaletteTag(ANIM_TAG_PROTECT) << 4) + 0x100;
+ sprite->data[7] = 16;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7]));
+ sprite->callback = sub_8100FD4;
+}
+
+static void sub_8100FD4(struct Sprite *sprite)
+{
+ int a;
+ int i;
+ sprite->data[5] += 96;
+ sprite->pos2.x = -(sprite->data[5] >> 8);
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ a = gPlttBufferFaded[sprite->data[2] + 1];
+ i = 0;
+ do
+ {
+ gPlttBufferFaded[sprite->data[2] + ++i] = gPlttBufferFaded[sprite->data[2] + i + 1];
+ } while (i < 6);
+
+ gPlttBufferFaded[sprite->data[2] + 7] = a;
+ }
+
+ if (sprite->data[7] > 6 && sprite->data[0] >0 && ++sprite->data[6] > 1)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7] -= 1;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7]));
+ }
+
+ if (sprite->data[0] > 0)
+ {
+ sprite->data[0] -= 1;
+ }
+ else if (++sprite->data[6] > 1)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[7], sprite->data[7]));
+ if (sprite->data[7] == 16)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_80A67F4;
+ }
+ }
+}
+
+void sub_81010CC(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 0xFFE8;
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ sprite->data[6] = 0;
+ sprite->data[7] = 16;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
+ sprite->callback = sub_8101138;
+}
+
+static void sub_8101138(struct Sprite* sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[2] > 0)
+ {
+ sprite->data[2] = 0;
+ if (((++sprite->data[1]) & 1) != 0)
+ {
+ if (sprite->data[6] <= 15)
+ sprite->data[6]++;
+ }
+ else if (sprite->data[7] > 0)
+ sprite->data[7]--;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
+ if (sprite->data[6] == 16 && sprite->data[7] == 0)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 8)
+ {
+ sprite->data[1] = 0;
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sub_8101298(sprite, 16, 4);
+ if (++sprite->data[1] > 2)
+ {
+ sprite->data[1] = 0;
+ sprite->pos1.y++;
+ }
+
+ if (++sprite->data[2] <= 29)
+ break;
+
+ if (sprite->data[2] & 1)
+ {
+ if (sprite->data[6] > 0)
+ sprite->data[6]--;
+ }
+ else if (sprite->data[7] <= 15)
+ {
+ sprite->data[7]++;
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], sprite->data[7]));
+ if (sprite->data[6] == 0 && sprite->data[7] == 16)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ sprite->invisible = 1;
+ sprite->data[0]++;
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+static void sub_8101298(struct Sprite* sprite, int unk1, int unk2)
+{
+ if (sprite->data[3] <= 11)
+ sprite->data[4] += 2;
+
+ if ((u16)(sprite->data[3] - 0x12) <= 0x17)
+ sprite->data[4] -= 2;
+
+ if ((sprite->data[3]) > 0x2F)
+ sprite->data[4] += 2;
+
+ sprite->pos2.x = sprite->data[4] / 9;
+ sprite->pos2.y = sprite->data[4] / 14;
+ if (sprite->pos2.y < 0)
+ sprite->pos2.y *= -1;
+
+ sprite->data[3]++;
+ if (sprite->data[3] > 0x3B)
+ sprite->data[3] = 0;
+}
+
+void sub_810130C(struct Sprite* sprite)
+{
+ if (!gBattleAnimArgs[2])
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[5];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = AnimTranslateLinearSimple;
+}
+
+void sub_810135C(struct Sprite* sprite)
+{
+ u8 battler;
+ if (!gBattleAnimArgs[2])
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler)))
+ {
+ SetAverageBattlerPositions(battler, gBattleAnimArgs[6], &sprite->pos1.x, &sprite->pos1.y);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ else
+ {
+ if (!gBattleAnimArgs[6])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 1) + gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[1];
+ }
+
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ }
+
+ sprite->data[0] = gBattleAnimArgs[5];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = AnimTranslateLinearSimple;
+}
+
+void sub_8101440(struct Sprite* sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ StartSpriteAnim(sprite, 1);
+ }
+
+ sprite->callback = sub_81014A0;
+}
+
+static void sub_81014A0(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 30)
+ {
+ sprite->pos2.y = (30 - sprite->data[0]) / 3;
+ sprite->pos2.x = Sin(sprite->data[1] * 4, 3);
+ sprite->data[1]++;
+ }
+
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81014F4(struct Sprite* sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[3] = 1;
+ }
+ else
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[3] = 0xFFFF;
+ StartSpriteAffineAnim(sprite, 1);
+ }
+
+ sprite->callback = sub_8101560;
+}
+
+static void sub_8101560(struct Sprite* sprite)
+{
+ sprite->pos2.y = -(sprite->data[0] / 0x28);
+ sprite->pos2.x = sprite->data[4] / 10;
+ sprite->data[4] += sprite->data[3] * 2;
+ sprite->data[0] += sprite->data[1];
+ if (++sprite->data[1] > 60)
+ DestroySpriteAndMatrix(sprite);
+}
+
+void sub_81015AC(struct Sprite* sprite)
+{
+ sprite->pos1.x -= 32;
+ sprite->pos1.y -= 32;
+ sprite->data[0] = 20;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_81015D4);
+}
+
+static void sub_81015D4(struct Sprite* sprite)
+{
+ switch (sprite->data[5] & 1)
+ {
+ case 0:
+ sprite->data[0] = 1;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_81015D4);
+ break;
+ case 1:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 8;
+ sprite->data[2] = sprite->pos1.x + gUnknown_08592CD0[sprite->data[5] >> 8][0];
+ sprite->data[4] = sprite->pos1.y + gUnknown_08592CD0[sprite->data[5] >> 8][1];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, sub_8101684);
+ sprite->data[5] += 0x100;
+ PlaySE12WithPanning(SE_W199, BattleAnimAdjustPanning(63));
+ break;
+ }
+
+ sprite->data[5] ^= 1;
+}
+
+static void sub_8101684(struct Sprite* sprite)
+{
+ if ((sprite->data[5] >> 8) == 4)
+ {
+ sprite->data[0] = 10;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_81016B8);
+ }
+ else
+ {
+ sprite->callback = sub_81015D4;
+ }
+}
+
+static void sub_81016B8(struct Sprite* sprite)
+{
+ s16 a;
+ s16 b;
+ if (sprite->oam.affineParam == 0)
+ {
+ sprite->data[0] = 3;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_8101774);
+ }
+ else
+ {
+ switch (sprite->oam.affineParam)
+ {
+ case 1:
+ a = -8;
+ b = -8;
+ break;
+ case 2:
+ a = -8;
+ b = 8;
+ break;
+ case 3:
+ a = 8;
+ b = -8;
+ break;
+ default:
+ a = 8;
+ b = 8;
+ break;
+ }
+
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 6;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + a;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + b;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, sub_8101820);
+ }
+}
+
+static void sub_8101774(struct Sprite* sprite)
+{
+ if (sprite->data[2] == 0)
+ {
+ if ((sprite->data[1] += 3) > 16)
+ sprite->data[1] = 16;
+ }
+ else if ((sprite->data[1] -= 3) < 0)
+ {
+ sprite->data[1] = 0;
+ }
+
+ BlendPalettes(sub_80A75AC(1, 1, 1, 1, 1, 0, 0), sprite->data[1], RGB(31, 31, 31));
+ if (sprite->data[1] == 16)
+ {
+ int pal;
+ sprite->data[2]++;
+ pal = sprite->oam.paletteNum;
+ LoadPalette(&gPlttBufferUnfaded[0x108 + pal * 16], pal * 16 | 0x101, 4);
+ PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
+ }
+ else if (sprite->data[1] == 0)
+ {
+ sprite->callback = sub_8101820;
+ }
+}
+
+static void sub_8101820(struct Sprite* sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101848;
+ }
+}
+
+static void sub_8101848(struct Sprite* sprite)
+{
+ if (sprite->data[0] % 3 == 0)
+ {
+ sprite->data[1]++;
+ sprite->invisible ^= 1;
+ }
+
+ sprite->data[0]++;
+ if (sprite->data[1] == 8)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8101898(struct Sprite* sprite)
+{
+ sprite->oam.affineParam = gBattleAnimArgs[0];
+ if ((s16)sprite->oam.affineParam == 1)
+ {
+ sprite->pos1.x -= 0x18;
+ sprite->pos1.y -= 0x18;
+ }
+ else if ((s16)sprite->oam.affineParam == 2)
+ {
+ sprite->pos1.x -= 0x18;
+ sprite->pos1.y += 0x18;
+ sprite->oam.matrixNum = 16;
+ }
+ else if ((s16)sprite->oam.affineParam == 3)
+ {
+ sprite->pos1.x += 0x18;
+ sprite->pos1.y -= 0x18;
+ sprite->oam.matrixNum = 8;
+ }
+ else
+ {
+ sprite->pos1.x += 0x18;
+ sprite->pos1.y += 0x18;
+ sprite->oam.matrixNum = 24;
+ }
+
+ sprite->oam.tileNum = (sprite->oam.tileNum + 16);
+ sprite->callback = sub_81015AC;
+ sprite->callback(sprite);
+}
+
+void sub_8101940(struct Sprite* sprite)
+{
+ sprite->invisible = 1;
+ sprite->data[0] = 0;
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ sprite->callback = sub_8101998;
+ break;
+ case 1:
+ sprite->callback = sub_8101A74;
+ break;
+ case 2:
+ sprite->callback = sub_8101AC4;
+ break;
+ default:
+ sprite->callback = sub_8101B84;
+ break;
+ }
+}
+
+static void sub_8101998(struct Sprite* sprite)
+{
+ sprite->data[0] = 6;
+ sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? 2 : -2;
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
+ StoreSpriteCallbackInData6(sprite, sub_81019E8);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_81019E8(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
+ PrepareBattlerSpriteForRotScale(sprite->data[3], ST_OAM_OBJ_NORMAL);
+ sprite->data[4] = (sprite->data[6] = GetBattlerSide(gBattleAnimAttacker)) ? 0x300 : 0xFFFFFD00;
+ sprite->data[5] = 0;
+ }
+
+ sprite->data[5] += sprite->data[4];
+ SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[3]);
+ if (++sprite->data[0] > 3)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101B84;
+ }
+}
+
+static void sub_8101A74(struct Sprite* sprite)
+{
+ sprite->data[0] = 4;
+ sprite->data[1] = (GetBattlerSide(gBattleAnimAttacker)) ? -3 : 3;
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
+ StoreSpriteCallbackInData6(sprite, sub_8101B84);
+ sprite->callback = TranslateMonBGUntil;
+}
+
+static void sub_8101AC4(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 8)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101AE8;
+ }
+}
+
+static void sub_8101AE8(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker];
+ sprite->data[6] = GetBattlerSide(gBattleAnimAttacker);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->data[4] = 0xFC00;
+ sprite->data[5] = 0xC00;
+ }
+ else
+ {
+ sprite->data[4] = 0x400;
+ sprite->data[5] = 0xF400;
+ }
+ }
+
+ sprite->data[5] += sprite->data[4];
+ SetSpriteRotScale(sprite->data[3], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[3]);
+ if (++sprite->data[0] > 2)
+ {
+ ResetSpriteRotScale(sprite->data[3]);
+ sprite->callback = sub_8101B84;
+ }
+}
+
+static void sub_8101B84(struct Sprite* sprite)
+{
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8101B90(struct Sprite *sprite)
+{
+ sprite->data[0] = 0;
+ sprite->callback = sub_8101BA0;
+}
+
+static void sub_8101BA0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = 0;
+ sprite->data[2] = gBattlerSpriteIds[gBattleAnimAttacker];
+ sprite->data[3] = GetBattlerSide(gBattleAnimAttacker);
+ sprite->data[4] = (sprite->data[3] != B_SIDE_PLAYER) ? 0x200 : -0x200;
+ sprite->data[5] = 0;
+ PrepareBattlerSpriteForRotScale(sprite->data[2], ST_OAM_OBJ_NORMAL);
+ sprite->data[0]++;
+ // fall through
+ case 1:
+ sprite->data[5] += sprite->data[4];
+ SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[2]);
+ if (++sprite->data[1] > 3)
+ {
+ sprite->data[1] = 0;
+ sprite->data[4] *= -1;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[5] += sprite->data[4];
+ SetSpriteRotScale(sprite->data[2], 0x100, 0x100, sprite->data[5]);
+ SetBattlerSpriteYOffsetFromRotation(sprite->data[2]);
+ if (++sprite->data[1] > 3)
+ {
+ ResetSpriteRotScale(sprite->data[2]);
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_8101C94(u8 taskId)
+{
+ u8 a;
+
+ gTasks[taskId].data[0] = gBattlerSpriteIds[gBattleAnimAttacker];
+ a = GetBattlerSide(gBattleAnimAttacker);
+ gTasks[taskId].data[1] = a;
+ gTasks[taskId].data[2] = 0;
+ switch (gBattleAnimArgs[0])
+ {
+ default:
+ DestroyAnimVisualTask(taskId);
+ break;
+ case 0:
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 8;
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[5] = 3;
+ if (a == 0)
+ gTasks[taskId].data[5] *= -1;
+
+ gTasks[taskId].func = sub_8101D2C;
+ break;
+ case 1:
+ gTasks[taskId].data[3] = 8;
+ gTasks[taskId].data[4] = 0x600;
+ gTasks[taskId].data[5] = 0xC0;
+ if (a == 0)
+ {
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+
+ gTasks[taskId].func = sub_8101EEC;
+ break;
+ }
+}
+
+static void sub_8101D2C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ switch (task->data[2])
+ {
+ case 0:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 8;
+ task->data[4] = 0;
+ task->data[5] = (task->data[1] == 0) ? -0xC0 : 0xC0;
+ PrepareBattlerSpriteForRotScale(task->data[0], ST_OAM_OBJ_NORMAL);
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[0]);
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 8;
+ task->data[4] = gSprites[task->data[0]].pos2.x;
+ task->data[5] = (task->data[1] == 0) ? 0x2 : -0x2;
+ task->data[6] = 1;
+ task->data[2]++;
+ }
+ break;
+ case 2:
+ if (task->data[3])
+ {
+ if (task->data[6])
+ {
+ task->data[6]--;
+ }
+ else
+ {
+ if (task->data[3] & 1)
+ gSprites[task->data[0]].pos2.x = task->data[4] + task->data[5];
+ else
+ gSprites[task->data[0]].pos2.x = task->data[4] - task->data[5];
+
+ task->data[6] = 1;
+ task->data[3]--;
+ }
+ }
+ else
+ {
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3] = 12;
+ task->data[2]++;
+ }
+ break;
+ case 3:
+ if (task->data[3])
+ {
+ task->data[3]--;
+ }
+ else
+ {
+ task->data[3] = 3;
+ task->data[4] = gSprites[task->data[0]].pos2.x;
+ task->data[5] = (task->data[1] == 0) ? 8 : -8;
+ task->data[2]++;
+ }
+ break;
+ case 4:
+ if (task->data[3])
+ {
+ task->data[4] += task->data[5];
+ gSprites[task->data[0]].pos2.x = task->data[4];
+ task->data[3]--;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+static void sub_8101EEC(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (task->data[3])
+ {
+ task->data[4] -= task->data[5];
+ SetSpriteRotScale(task->data[0], 0x100, 0x100, task->data[4]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[0]);
+ task->data[3]--;
+ }
+ else
+ {
+ ResetSpriteRotScale(task->data[0]);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_8101F40(struct Sprite* sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[2];
+ }
+
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ StoreSpriteCallbackInData6(sprite, sub_810208C);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+void sub_8101FA8(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0;
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ StoreSpriteCallbackInData6(sprite, sub_8102044);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+void sub_8101FF0(struct Sprite* sprite)
+{
+ sprite->pos1.x = sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 0xFFD0 + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->callback = sub_810208C;
+}
+
+static void sub_8102044(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 8)
+ {
+ sprite->data[0] = 12;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
+ StoreSpriteCallbackInData6(sprite, sub_810207C);
+ sprite->callback = TranslateSpriteOverDuration;
+ }
+}
+
+static void sub_810207C(struct Sprite* sprite)
+{
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->callback = sub_810208C;
+}
+
+static void sub_810208C(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 1)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = !sprite->invisible;
+ if (++sprite->data[1] > 8)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81020D8(struct Sprite* sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[2];
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[2];
+ }
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->callback = sub_810213C;
+}
+
+static void sub_810213C(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > sprite->data[1])
+ {
+ sprite->data[0] = 0;
+ sprite->pos1.y--;
+ }
+
+ sprite->pos1.y -= sprite->data[0];
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810217C(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - 12;
+ sprite->data[0] = 0;
+ sprite->data[1] = 2;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ sprite->data[5] = BattleAnimAdjustPanning(-64);
+ sprite->callback = sub_81021CC;
+}
+
+static void sub_81021CC(struct Sprite* sprite)
+{
+ if (++sprite->data[0] >= sprite->data[1])
+ {
+ sprite->invisible = !sprite->invisible;
+ if (!sprite->invisible)
+ {
+ sprite->data[4]++;
+ if (!(sprite->data[4] & 1))
+ PlaySE12WithPanning(SE_W207B, sprite->data[5]);
+ }
+
+ sprite->data[0] = 0;
+ if (++sprite->data[2] > 1)
+ {
+ sprite->data[2] = 0;
+ sprite->data[1]++;
+ }
+ }
+
+ if (sprite->animEnded && sprite->data[1] > 16 && sprite->invisible)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8102268(struct Sprite* sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ if (IsContest())
+ sprite->pos1.y += 10;
+
+ sprite->data[0]++;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81022D4(u8 taskId)
+{
+ if (gTasks[taskId].data[2] == 1)
+ {
+ gBattleAnimArgs[7] = 0xFFFF;
+ gTasks[taskId].data[2]++;
+ }
+ else if (gTasks[taskId].data[2] == 2)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ if (++gTasks[taskId].data[0] == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - gTasks[taskId].data[1], gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 16)
+ gTasks[taskId].data[2]++;
+ }
+ }
+}
+
+void sub_810234C(struct Sprite* sprite)
+{
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ sprite->animPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = sub_810237C;
+}
+
+static void sub_810237C(struct Sprite* sprite)
+{
+ if (sprite->data[0])
+ {
+ sprite->data[0]--;
+ }
+ else
+ {
+ sprite->animPaused = 0;
+ sprite->data[0] = 30;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ }
+}
+
+void sub_81023E0(u8 taskId)
+{
+ if (++gTasks[taskId].data[0] == 4)
+ {
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 16)
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void unref_sub_8102434(u8 taskId)
+{
+ u8 i;
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gBattleAnimArgs[0] == 1 && GetBattlerSide(i) == B_SIDE_PLAYER)
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]);
+
+ if (gBattleAnimArgs[1] == 1 && GetBattlerSide(i) == B_SIDE_OPPONENT)
+ SetHealthboxSpriteInvisible(gHealthboxSpriteIds[i]);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void unref_sub_81024A8(u8 taskId)
+{
+ u8 i;
+ for (i = 0; i < gBattlersCount; i++)
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[i]);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_81024E0(struct Sprite* sprite)
+{
+ if (IsContest())
+ {
+ sprite->pos1.x = 48;
+ sprite->pos1.y = 40;
+ }
+ else
+ {
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ }
+
+ sprite->oam.shape = 0;
+ sprite->oam.size = 3;
+ sprite->data[0] = 0;
+ sprite->callback = sub_8102528;
+}
+
+static void sub_8102528(struct Sprite* sprite)
+{
+ if (sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8102540(struct Sprite* sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 1;
+ sprite->callback = sub_8102584;
+}
+
+static void sub_8102584(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if (sprite->data[2] < 120)
+ {
+ sprite->pos1.y++;
+ sprite->data[2]++;
+ }
+ }
+
+ if (sprite->data[0])
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81026A8(u8);
+
+
+void sub_81025C0(u8 taskId)
+{
+ int a = sub_80A75AC(1, 0, 0, 0, 0, 0, 0) & 0xFFFF;
+ int b;
+ int c;
+ int d;
+
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = a;
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[6] = 0;
+ gTasks[taskId].data[7] = 13;
+ gTasks[taskId].data[8] = 14;
+ gTasks[taskId].data[9] = 15;
+ b = sub_80A76C4(1, 1, 1, 1);
+ c = a | b;
+ StorePointerInVars(&gTasks[taskId].data[14], &gTasks[taskId].data[15], (void*)c);
+ b = b | (0x10000 << IndexOfSpritePaletteTag(ANIM_TAG_MOON));
+ d = IndexOfSpritePaletteTag(ANIM_TAG_GREEN_SPARKLE);
+ BeginNormalPaletteFade((0x10000 << d) | b, 0, 0, 16, RGB(27, 29, 31));
+ gTasks[taskId].func = sub_81026A8;
+ gTasks[taskId].func(taskId);
+}
+
+void sub_81026A8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 0)
+ {
+ u16 color;
+ u16 bitmask;
+ u16 r3;
+ u16 i;
+ u16 j;
+ task->data[1] = 0;
+ if (++task->data[2] <= 15)
+ {
+ u16 red;
+ u16 green;
+ u16 blue;
+ task->data[4] += task->data[7];
+ task->data[5] += task->data[8];
+ task->data[6] += task->data[9];
+ red = task->data[4] >> 3;
+ green = task->data[5] >> 3;
+ blue = task->data[6] >> 3;
+ color = RGB(red, green, blue);
+ }
+ else
+ {
+ color = RGB(27, 29, 31);
+ task->data[0]++;
+ }
+
+ bitmask = 1;
+ r3 = 0;
+ for (i = 0; i <= 15; i++)
+ {
+ if (task->data[3] & bitmask)
+ {
+ for (j = 1; j <= 15; j++)
+ {
+ gPlttBufferFaded[r3 + j] = color;
+ }
+ }
+
+ bitmask <<= 1;
+ r3 += 16;
+ }
+ }
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ u8 spriteId;
+ for (spriteId = 0; spriteId < MAX_SPRITES; spriteId++)
+ {
+ if (gSprites[spriteId].template == &gUnknown_08592EBC || gSprites[spriteId].template == &gBattleAnimSpriteTemplate_8592EEC)
+ gSprites[spriteId].data[0] = 1;
+ }
+
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 30)
+ {
+ BeginNormalPaletteFade((u32)LoadPointerFromVars(task->data[14], task->data[15]), 0, 16, 0, RGB(27, 29, 31));
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8102844(struct Sprite* sprite)
+{
+ if (gBattleAnimArgs[2] < 2)
+ gBattleAnimArgs[2] = 2;
+
+ if (gBattleAnimArgs[2] > 0x7F)
+ gBattleAnimArgs[2] = 0x7F;
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[1];
+ sprite->data[6] = sprite->pos1.x;
+ sprite->data[7] = sprite->pos1.y;
+ if (IsContest())
+ {
+ sprite->oam.matrixNum = 8;
+ sprite->pos1.x += 40;
+ sprite->pos1.y += 20;
+ sprite->data[2] = sprite->pos1.x << 7;
+ sprite->data[3] = -0x1400 / sprite->data[1];
+ sprite->data[4] = sprite->pos1.y << 7;
+ sprite->data[5] = -0xA00 / sprite->data[1];
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= 40;
+ sprite->pos1.y += 20;
+ sprite->data[2] = sprite->pos1.x << 7;
+ sprite->data[3] = 0x1400 / sprite->data[1];
+ sprite->data[4] = sprite->pos1.y << 7;
+ sprite->data[5] = -0xA00 / sprite->data[1];
+ }
+ else
+ {
+ sprite->pos1.x += 40;
+ sprite->pos1.y -= 20;
+ sprite->data[2] = sprite->pos1.x << 7;
+ sprite->data[3] = -0x1400 / sprite->data[1];
+ sprite->data[4] = sprite->pos1.y << 7;
+ sprite->data[5] = 0xA00 / sprite->data[1];
+ sprite->oam.matrixNum = 24;
+ }
+
+ sprite->callback = sub_810296C;
+}
+
+static void sub_810296C(struct Sprite* sprite)
+{
+ sprite->data[2] += sprite->data[3];
+ sprite->data[4] += sprite->data[5];
+ sprite->pos1.x = sprite->data[2] >> 7;
+ sprite->pos1.y = sprite->data[4] >> 7;
+ if (--sprite->data[1] == 1)
+ {
+ sprite->pos1.x = sprite->data[6];
+ sprite->pos1.y = sprite->data[7];
+ }
+
+ if (sprite->data[1] == 0)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81029B4(u8 taskId)
+{
+ u16 i;
+ int obj;
+ u16 r3;
+ u16 r4;
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[1] = AllocSpritePalette(ANIM_TAG_BENT_SPOON);
+ r3 = (task->data[1] * 16) + 0x100;
+ r4 = (gSprites[task->data[0]].oam.paletteNum + 16) << 4;
+ for (i = 1; i < 16; i++)
+ gPlttBufferUnfaded[r3 + i] = gPlttBufferUnfaded[r4 + i];
+
+ BlendPalette(r3, 16, 11, RGB(0, 0, 0));
+ task->data[3] = 0;
+ i = 0;
+ while (i < 2 && (obj = CloneBattlerSpriteWithBlend(0)) >= 0)
+ {
+ gSprites[obj].oam.paletteNum = task->data[1];
+ gSprites[obj].data[0] = 0;
+ gSprites[obj].data[1] = i << 7;
+ gSprites[obj].data[2] = taskId;
+ gSprites[obj].callback = sub_8102B3C;
+ task->data[3]++;
+ i++;
+ }
+
+ task->func = sub_8102AE0;
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
+ else
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+}
+
+static void sub_8102AE0(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!task->data[3])
+ {
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
+ else
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+
+ FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_8102B3C(struct Sprite* sprite)
+{
+ if (++sprite->data[3] > 1)
+ {
+ sprite->data[3] = 0;
+ sprite->data[0]++;
+ }
+
+ if (sprite->data[0] > 64)
+ {
+ gTasks[sprite->data[2]].data[3]--;
+ obj_delete_but_dont_free_vram(sprite);
+ }
+ else
+ {
+ sprite->data[4] = gSineTable[sprite->data[0]] / 6;
+ sprite->data[5] = gSineTable[sprite->data[0]] / 13;
+ sprite->data[1] = (sprite->data[1] + sprite->data[5]) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[4]);
+ }
+}
+
+void sub_8102BCC(struct Sprite* sprite)
+{
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+void sub_8102BE8(u8 taskId)
+{
+ u16 i;
+ u16 j;
+ u16 index;
+
+ index = IndexOfSpritePaletteTag(gUnknown_08593020[0][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
+ gPlttBufferFaded[index + i] = gUnknown_08593020[0][i];
+ }
+
+ for (j = 1; j < ARRAY_COUNT(gUnknown_08593020); j++)
+ {
+ index = AllocSpritePalette(gUnknown_08593020[j][0]);
+ if (index != 0xFF)
+ {
+ index = (index << 4) + 0x100;
+ for (i = 1; i < ARRAY_COUNT(gUnknown_08593020[0]); i++)
+ gPlttBufferFaded[index + i] = gUnknown_08593020[j][i];
+ }
+ }
+ DestroyAnimVisualTask(taskId);
+}
+
+// clears the rainbow effect for musical notes.
+void sub_8102CA0(u8 taskId)
+{
+ u16 i;
+ for (i = 1; i < ARRAY_COUNT(gUnknown_08593020); i++)
+ FreeSpritePaletteByTag(gUnknown_08593020[i][0]);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8102CD4(struct Sprite* sprite)
+{
+ u8 index;
+ u8 a;
+ u8 b;
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ if ((index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[1]][0])) != 0xFF)
+ sprite->oam.paletteNum = index;
+
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattleAnimArgs[2];
+ if (IsContest())
+ {
+ a = 48;
+ b = 40;
+ }
+ else
+ {
+ a = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ b = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ }
+
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sub_8102D8C(a - sprite->pos1.x, b - sprite->pos1.y, &sprite->data[6], &sprite->data[7], 40);
+ sprite->callback = sub_8102DE4;
+}
+
+static void sub_8102D8C(s16 a, s16 b, s16* c, s16* d, s8 e)
+{
+ int f;
+ int g;
+ if (a < 0)
+ e = -e;
+
+ f = a << 8;
+ g = f / e;
+ if (g == 0)
+ g = 1;
+
+ *c = f / g;
+ *d = (b << 8) / g;
+}
+
+static void sub_8102DE4(struct Sprite* sprite)
+{
+ int b;
+ s16 a;
+ int c;
+ u8 index;
+ sprite->data[0]++;
+ b = sprite->data[0] * 5 - ((sprite->data[0] * 5 / 256) << 8);
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+ sprite->pos2.y = Sin(b, 15);
+ a = (u16)sprite->pos1.y;
+ c = (u16)sprite->pos1.x;
+
+ if ((u32)((c + 16) << 16) > (0x110) << 16 || a < -16 || a > 0x80)
+ {
+ DestroySpriteAndMatrix(sprite);
+ }
+ else
+ {
+ if (sprite->data[3] && ++sprite->data[2] > sprite->data[3])
+ {
+ sprite->data[2] = 0;
+ if (++sprite->data[1] > 3)
+ sprite->data[1] = 0;
+
+ index = IndexOfSpritePaletteTag(gUnknown_08593020[sprite->data[1]][0]);
+ if (index != 0xFF)
+ sprite->oam.paletteNum = index;
+ }
+ }
+}
+
+void sub_8102EB0(struct Sprite* sprite)
+{
+ int a;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ a = gBattleAnimArgs[1];
+ (u16)gBattleAnimArgs[1] = -a;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sprite->data[6] = (gBattleAnimArgs[1] << 4) / 5;
+ sprite->data[7] = (gBattleAnimArgs[2] << 7) / 5;
+ sprite->callback = sub_8102F40;
+}
+
+static void sub_8102F40(struct Sprite* sprite)
+{
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+ if (sprite->data[0] > 5 && sprite->data[3] == 0)
+ {
+ sprite->data[2] = (sprite->data[2] + 16) & 0xFF;
+ sprite->pos2.x = Cos(sprite->data[2], 18);
+ sprite->pos2.y = Sin(sprite->data[2], 18);
+ if (sprite->data[2] == 0)
+ sprite->data[3] = 1;
+ }
+
+ if (++sprite->data[0] == 48)
+ DestroySpriteAndMatrix(sprite);
+}
+
+void sub_8102FB8(struct Sprite* sprite)
+{
+ s16 a;
+ if (gBattleAnimArgs[0] == 1)
+ {
+ sprite->oam.matrixNum = 8;
+ a = 16;
+ }
+ else
+ {
+ a = -16;
+ }
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + a;
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + 8;
+ sprite->data[0] = 8;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_8103028(struct Sprite* sprite)
+{
+ s16 xDiff;
+ u8 index;
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ sprite->pos1.y += 8;
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ index = IndexOfSpritePaletteTag(gUnknown_08593020[gBattleAnimArgs[2]][0]);
+ if (index != 0xFF)
+ sprite->oam.paletteNum = index;
+
+ xDiff = (gBattleAnimArgs[0] == 0) ? -32 : 32;
+ sprite->data[0] = 40;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = xDiff + sprite->data[1];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = sprite->data[3] - 40;
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = sub_81030B0;
+}
+
+static void sub_81030B0(struct Sprite* sprite)
+{
+ if (AnimTranslateLinear(sprite) == 0)
+ {
+ s16 xDiff;
+ xDiff = Sin(sprite->data[5], 8);
+ if (sprite->pos2.x < 0)
+ xDiff = -xDiff;
+
+ sprite->pos2.x += xDiff;
+ sprite->pos2.y += Sin(sprite->data[5], 4);
+ sprite->data[5] = (sprite->data[5] + 8) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_810310C(u8 battler, struct Sprite* sprite)
+{
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ sprite->pos1.x = sub_80A861C(battler, 5) + 8;
+ else
+ sprite->pos1.x = sub_80A861C(battler, 4) - 8;
+
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) - (s16)sub_80A861C(battler, 0) / 4;
+}
+
+void sub_8103164(struct Sprite* sprite)
+{
+ u8 a;
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sub_810310C(battler, sprite);
+ a = (GetBattlerSide(battler) == B_SIDE_PLAYER) ? 0 : 1;
+ sprite->data[0] = gBattleAnimArgs[1];
+ sprite->data[1] = a + 2;
+ StartSpriteAnim(sprite, a);
+ StoreSpriteCallbackInData6(sprite, sub_81031D0);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+static void sub_81031D0(struct Sprite* sprite)
+{
+ if (--sprite->data[0] == 0)
+ {
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ StartSpriteAnim(sprite, sprite->data[1]);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ }
+}
+
+void sub_8103208(struct Sprite* sprite)
+{
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sub_810310C(battler, sprite);
+ sprite->data[0] = 0;
+ StoreSpriteCallbackInData6(sprite, sub_8103250);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+static void sub_8103250(struct Sprite* sprite)
+{
+ if (++sprite->data[0] > 16)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+ }
+}
+
+void sub_8103284(struct Sprite* sprite)
+{
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 0);
+ sprite->pos1.y = sub_80A861C(battler, 2);
+ if (sprite->pos1.y <= 9)
+ sprite->pos1.y = 10;
+
+ sprite->data[0] = 1;
+ sprite->data[1] = 0;
+ sprite->data[2] = sprite->subpriority;
+ sprite->data[3] = sprite->subpriority + 4;
+ sprite->data[4] = 0;
+ StoreSpriteCallbackInData6(sprite, sub_8103300);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+static void sub_8103300(struct Sprite* sprite)
+{
+ if (++sprite->data[4] > 12)
+ sprite->callback = sub_8103320;
+}
+
+static void sub_8103320(struct Sprite* sprite)
+{
+ s16 temp;
+ s16 temp2;
+ sprite->data[1] += 4;
+ if (sprite->data[1] > 254)
+ {
+ if (--sprite->data[0] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->callback = sub_8103250;
+ return;
+ }
+ else
+ {
+ sprite->data[1] &= 0xFF;
+ }
+ }
+
+ if (sprite->data[1] > 0x4F)
+ sprite->subpriority = sprite->data[3];
+
+ if (sprite->data[1] > 0x9F)
+ sprite->subpriority = sprite->data[2];
+
+ temp = gSineTable[sprite->data[1]];
+ sprite->pos2.x = (temp2 = temp >> 3) + (temp2 >> 1);
+}
+
+void sub_8103390(struct Sprite* sprite)
+{
+ u8 bank;
+ if (gBattleAnimArgs[0] == 0)
+ bank = gBattleAnimAttacker;
+ else
+ bank = gBattleAnimTarget;
+
+ sub_810310C(bank, sprite);
+ if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->data[0] = 2;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 3;
+ }
+
+ sprite->callback = sub_81033F0;
+}
+
+static void sub_81033F0(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 10)
+ {
+ sprite->data[1] = 0;
+ StartSpriteAnim(sprite, sprite->data[0]);
+ StoreSpriteCallbackInData6(sprite, sub_810342C);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ }
+}
+
+static void sub_810342C(struct Sprite* sprite)
+{
+ if (++sprite->data[1] > 5)
+ DestroyAnimSprite(sprite);
+}
diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c
new file mode 100755
index 000000000..8acbf62d4
--- /dev/null
+++ b/src/battle_anim_effects_2.c
@@ -0,0 +1,3884 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle_anim.h"
+#include "battle_interface.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "main.h"
+#include "math_util.h"
+#include "palette.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+
+extern void sub_8108C94(struct Sprite *);
+extern void sub_810310C(u8, struct Sprite *);
+
+void sub_8103448(struct Sprite *);
+void sub_8103498(struct Sprite *);
+void sub_810358C(struct Sprite *);
+void sub_8103620(struct Sprite *);
+void Anim_KinesisZapEnergy(struct Sprite *);
+void Anim_SwordsDanceBlade(struct Sprite *);
+void AnimSonicBoomProjectile(struct Sprite *);
+void sub_8103AA4(struct Sprite *);
+void sub_8103FE8(struct Sprite *);
+void sub_8104088(struct Sprite *);
+void sub_810413C(struct Sprite *);
+void sub_81041C4(struct Sprite *);
+void Anim_RazorWindTornado(struct Sprite *);
+void Anim_ViceGripPincer(struct Sprite *);
+void Anim_GuillotinePincer(struct Sprite *);
+void Anim_BreathPuff(struct Sprite *);
+void Anim_AngerMark(struct Sprite *);
+void sub_810501C(struct Sprite *);
+void sub_81051C4(struct Sprite *);
+void sub_81052A4(struct Sprite *);
+void sub_81054E8(struct Sprite *);
+void sub_8105538(struct Sprite *);
+void sub_8105C48(struct Sprite *);
+void sub_8105DE8(struct Sprite *);
+void sub_8105E60(struct Sprite *);
+void sub_8106140(struct Sprite *);
+void sub_81061C4(struct Sprite *);
+void sub_810624C(struct Sprite *);
+void AnimOrbitFast(struct Sprite *);
+void AnimOrbitScatter(struct Sprite *);
+void sub_8106944(struct Sprite *);
+void sub_81069B8(struct Sprite *);
+void sub_81069D0(struct Sprite *);
+void sub_8106AD0(struct Sprite *);
+void sub_8106B54(struct Sprite *);
+void sub_8106C80(struct Sprite *);
+void sub_8106CD0(struct Sprite *);
+void sub_8106E00(struct Sprite *);
+void sub_8106F00(struct Sprite *);
+void sub_8106F60(struct Sprite *);
+void sub_81070AC(struct Sprite *);
+static void sub_81034D8(struct Sprite *);
+static void sub_8103658(struct Sprite *);
+static void sub_8103680(struct Sprite *);
+static void AnimTask_WithdrawStep(u8);
+static void Anim_SwordsDanceBladeStep(struct Sprite *);
+static void sub_8104018(struct Sprite *);
+static void sub_8104154(struct Sprite *);
+static void sub_810421C(struct Sprite *);
+static void sub_81042A0(struct Sprite *);
+static void Anim_ViceGripPincerStep(struct Sprite *);
+static void Anim_GuillotinePincerStep1(struct Sprite *);
+static void Anim_GuillotinePincerStep2(struct Sprite *);
+static void Anim_GuillotinePincerStep3(struct Sprite *);
+static void AnimTask_GrowAndGreyscaleStep(u8);
+static void AnimTask_MinimizeStep1(u8);
+static void CreateMinimizeSprite(struct Task *, u8);
+static void ClonedMinizeSprite_Step(struct Sprite *);
+static void AnimTask_SplashStep(u8);
+static void AnimTask_GrowAndShrinkStep(u8);
+static void sub_8104C78(u8);
+static void sub_8104D28(u8);
+static void sub_8104F54(u8);
+static void sub_8105078(struct Sprite *);
+static void sub_810557C(struct Sprite *);
+static void sub_81055F4(struct Sprite *);
+static void sub_810561C(struct Sprite *);
+static void sub_8105694(struct Sprite *);
+static void sub_81056D4(struct Sprite *);
+static void sub_810571C(struct Sprite *);
+static void sub_810575C(struct Sprite *);
+static void sub_81057B8(u8);
+static void sub_8105878(u8);
+static void sub_81059E0(u8);
+static void sub_8105B08(u8);
+static void sub_8105F30(u8);
+static void sub_8105F84(u8);
+static void sub_810618C(struct Sprite *);
+static void sub_810627C(struct Sprite *);
+static void sub_81063A8(u8);
+static void sub_81065EC(u8);
+static void AnimOrbitFastStep(struct Sprite *);
+static void AnimOrbitScatterStep(struct Sprite *);
+static void sub_8106D5C(struct Sprite *);
+static void sub_8106DD4(u8);
+static void sub_8106EC8(struct Sprite *);
+static void sub_8107018(struct Sprite *);
+static void sub_810703C(struct Sprite *);
+
+const struct SpriteTemplate gUnknown_08593264 =
+{
+ .tileTag = ANIM_TAG_FINGER,
+ .paletteTag = ANIM_TAG_FINGER,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103448,
+};
+
+const union AnimCmd gUnknown_0859327C[] =
+{
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593284[] =
+{
+ gUnknown_0859327C,
+};
+
+const struct SpriteTemplate gUnknown_08593288 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103498,
+};
+
+const struct SpriteTemplate gUnknown_085932A0 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810358C,
+};
+
+extern const union AffineAnimCmd *const gUnknown_08597060[];
+const struct SpriteTemplate gUnknown_085932B8 =
+{
+ .tileTag = ANIM_TAG_CLAMP,
+ .paletteTag = ANIM_TAG_CLAMP,
+ .oam = &gUnknown_08524A9C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08597060,
+ .callback = sub_8103620,
+};
+
+const union AnimCmd gUnknown_085932D0[] =
+{
+ ANIMCMD_FRAME(0, 9),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085932E4[] =
+{
+ gUnknown_085932D0,
+};
+
+const union AffineAnimCmd gUnknown_085932E8[] =
+{
+ AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
+ AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593300[] =
+{
+ gUnknown_085932E8,
+};
+
+const struct SpriteTemplate gUnknown_08593304 =
+{
+ .tileTag = ANIM_TAG_UNUSED_EXPLOSION,
+ .paletteTag = ANIM_TAG_UNUSED_EXPLOSION,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085932E4,
+ .images = NULL,
+ .affineAnims = gUnknown_08593300,
+ .callback = sub_80A77C8,
+};
+
+const union AnimCmd gUnknown_0859331C[] =
+{
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(40, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593340[] =
+{
+ gUnknown_0859331C,
+};
+
+const struct SpriteTemplate gKinesisZapEnergySpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ALERT,
+ .paletteTag = ANIM_TAG_ALERT,
+ .oam = &gUnknown_08524934,
+ .anims = gUnknown_08593340,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_KinesisZapEnergy,
+};
+
+const union AffineAnimCmd gUnknown_0859335C[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_0859337C[] =
+{
+ gUnknown_0859335C,
+};
+
+const struct SpriteTemplate gSwordsDanceBladeSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_SWORD,
+ .paletteTag = ANIM_TAG_SWORD,
+ .oam = &gUnknown_08524ADC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859337C,
+ .callback = Anim_SwordsDanceBlade,
+};
+
+const struct SpriteTemplate gSonicBoomSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_AIR_WAVE,
+ .paletteTag = ANIM_TAG_AIR_WAVE,
+ .oam = &gUnknown_08524B14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimSonicBoomProjectile,
+};
+
+const struct SpriteTemplate gUnknown_085933B0 =
+{
+ .tileTag = ANIM_TAG_AIR_WAVE,
+ .paletteTag = ANIM_TAG_AIR_WAVE,
+ .oam = &gUnknown_08524A54,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103AA4,
+};
+
+const union AffineAnimCmd gUnknown_085933C8[] =
+{
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
+ AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085933E0[] =
+{
+ AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
+ AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593420[] =
+{
+ gUnknown_085933C8,
+};
+
+const union AffineAnimCmd *const gUnknown_08593424[] =
+{
+ gUnknown_085933E0,
+};
+
+const struct SpriteTemplate gSupersonicWaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GOLD_RING,
+ .paletteTag = ANIM_TAG_GOLD_RING,
+ .oam = &gUnknown_08524A14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593420,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gScreechWaveSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_PURPLE_RING,
+ .paletteTag = ANIM_TAG_PURPLE_RING,
+ .oam = &gUnknown_08524A14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593420,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gUnknown_08593458 =
+{
+ .tileTag = ANIM_TAG_METAL_SOUND_WAVES,
+ .paletteTag = ANIM_TAG_METAL_SOUND_WAVES,
+ .oam = &gUnknown_08524A1C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593420,
+ .callback = TranslateAnimSpriteToTargetMonLocation,
+};
+
+const struct SpriteTemplate gUnknown_08593470 =
+{
+ .tileTag = ANIM_TAG_BLUE_RING_2,
+ .paletteTag = ANIM_TAG_BLUE_RING_2,
+ .oam = &gUnknown_08524A14,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593424,
+ .callback = sub_8108C94,
+};
+
+const struct SpriteTemplate gUnknown_08593488 =
+{
+ .tileTag = ANIM_TAG_LARGE_FRESH_EGG,
+ .paletteTag = ANIM_TAG_LARGE_FRESH_EGG,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A78AC,
+};
+
+const struct SpriteTemplate gUnknown_085934A0 =
+{
+ .tileTag = ANIM_TAG_UNUSED_VOID_LINES,
+ .paletteTag = ANIM_TAG_UNUSED_VOID_LINES,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8103FE8,
+};
+
+const union AnimCmd gUnknown_085934B8[] =
+{
+ ANIMCMD_FRAME(8, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085934C0[] =
+{
+ gUnknown_085934B8,
+};
+
+const union AffineAnimCmd gUnknown_085934C4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085934D4[] =
+{
+ gUnknown_085934C4,
+};
+
+const struct SpriteTemplate gUnknown_085934D8 =
+{
+ .tileTag = ANIM_TAG_COIN,
+ .paletteTag = ANIM_TAG_COIN,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_085934C0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8104088,
+};
+
+const struct SpriteTemplate gUnknown_085934F0 =
+{
+ .tileTag = ANIM_TAG_COIN,
+ .paletteTag = ANIM_TAG_COIN,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_085934C0,
+ .images = NULL,
+ .affineAnims = gUnknown_085934D4,
+ .callback = sub_810413C,
+};
+
+const union AffineAnimCmd gUnknown_08593508[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_08593518[] =
+{
+ gUnknown_08593508,
+};
+
+const struct SpriteTemplate gUnknown_0859351C =
+{
+ .tileTag = ANIM_TAG_SEED,
+ .paletteTag = ANIM_TAG_SEED,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593518,
+ .callback = sub_81041C4,
+};
+
+const union AffineAnimCmd gUnknown_08593534[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_0859354C[] =
+{
+ gUnknown_08593534,
+};
+
+const struct SpriteTemplate gRazorWindTornadoSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_GUST,
+ .paletteTag = ANIM_TAG_GUST,
+ .oam = &gUnknown_085249BC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859354C,
+ .callback = Anim_RazorWindTornado,
+};
+
+const union AnimCmd gUnknown_08593568[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 20),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593578[] =
+{
+ ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593588[] =
+{
+ gUnknown_08593568,
+ gUnknown_08593578,
+};
+
+const struct SpriteTemplate gViceGripSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_08593588,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_ViceGripPincer,
+};
+
+const union AnimCmd gUnknown_085935A8[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(32, 1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085935B8[] =
+{
+ ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085935C8[] =
+{
+ gUnknown_085935A8,
+ gUnknown_085935B8,
+};
+
+const struct SpriteTemplate gGuillotineSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_CUT,
+ .paletteTag = ANIM_TAG_CUT,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_085935C8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_GuillotinePincer,
+};
+
+const union AffineAnimCmd gSplashEffectAffineAnimCmds[] =
+{
+ AFFINEANIMCMD_FRAME(-6, 4, 0, 8),
+ AFFINEANIMCMD_FRAME(10, -10, 0, 8),
+ AFFINEANIMCMD_FRAME(-4, 6, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gGrowAndShrinkAffineAnimCmds[] =
+{
+ AFFINEANIMCMD_FRAME(-4, -5, 0, 12),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(4, 5, 0, 12),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593628[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 40, .hFlip = TRUE),
+ ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(12, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_0859363C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 40),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(12, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593650[] =
+{
+ gUnknown_08593628,
+ gUnknown_0859363C,
+};
+
+const struct SpriteTemplate gBreathPuffSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_BREATH,
+ .paletteTag = ANIM_TAG_BREATH,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08593650,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Anim_BreathPuff,
+};
+
+const union AffineAnimCmd gUnknown_08593670[] =
+{
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593688[] =
+{
+ gUnknown_08593670,
+};
+
+const struct SpriteTemplate gAngerMarkSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_ANGER,
+ .paletteTag = ANIM_TAG_ANGER,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593688,
+ .callback = Anim_AngerMark,
+};
+
+const union AffineAnimCmd gUnknown_085936A4[] =
+{
+ AFFINEANIMCMD_FRAME(-10, 9, 0, 7),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 7),
+ AFFINEANIMCMD_FRAME(-20, 20, 0, 7),
+ AFFINEANIMCMD_FRAME(10, -9, 0, 7),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085936D4 =
+{
+ .tileTag = ANIM_TAG_PENCIL,
+ .paletteTag = ANIM_TAG_PENCIL,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810501C,
+};
+
+const struct SpriteTemplate gUnknown_085936EC =
+{
+ .tileTag = ANIM_TAG_SNORE_Z,
+ .paletteTag = ANIM_TAG_SNORE_Z,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A7938,
+};
+
+const union AnimCmd gUnknown_08593704[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593718[] =
+{
+ gUnknown_08593704,
+};
+//*
+const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C =
+{
+ .tileTag = ANIM_TAG_EXPLOSION,
+ .paletteTag = ANIM_TAG_EXPLOSION,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593718,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const union AffineAnimCmd gUnknown_08593734[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_08593754[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593764[] =
+{
+ AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8),
+ AFFINEANIMCMD_LOOP(0),
+ AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8),
+ AFFINEANIMCMD_LOOP(1),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085937A4[] =
+{
+ gUnknown_08593734,
+ gUnknown_08593754,
+ gUnknown_08593764,
+};
+//*
+const struct SpriteTemplate gUnknown_085937B0 =
+{
+ .tileTag = ANIM_TAG_BREAKING_EGG,
+ .paletteTag = ANIM_TAG_BREAKING_EGG,
+ .oam = &gUnknown_08524AF4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085937A4,
+ .callback = sub_8105538,
+};
+
+const union AffineAnimCmd gUnknown_085937C8[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gUnknown_085937E0[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gUnknown_085937F8[] =
+{
+ AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
+ AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593810[] =
+{
+ gUnknown_085937C8,
+ gUnknown_085937E0,
+};
+
+const union AffineAnimCmd *const gUnknown_08593818[] =
+{
+ gUnknown_085937F8,
+};
+
+const struct SpriteTemplate gUnknown_0859381C =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_085249DC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593810,
+ .callback = sub_80A77C8,
+};
+//*
+const union AffineAnimCmd gUnknown_08593834[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gUnknown_0859384C[] =
+{
+ gUnknown_08593834,
+};
+
+const struct SpriteTemplate gUnknown_08593850 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_0859384C,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_08593868 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593810,
+ .callback = sub_81051C4,
+};
+
+const struct SpriteTemplate gUnknown_08593880 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593818,
+ .callback = sub_81052A4,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 =
+{
+ .tileTag = ANIM_TAG_THIN_RING,
+ .paletteTag = ANIM_TAG_THIN_RING,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593810,
+ .callback = sub_81054E8,
+};
+
+const union AffineAnimCmd gUnknown_085938B0[] =
+{
+ AFFINEANIMCMD_FRAME(96, -13, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085938C0[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(4, 3),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085938D8[] =
+{
+ gUnknown_085938C0,
+};
+
+const struct SpriteTemplate gUnknown_085938DC =
+{
+ .tileTag = ANIM_TAG_SPEED_DUST,
+ .paletteTag = ANIM_TAG_SPEED_DUST,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085938D8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105C48,
+};
+
+const s8 gUnknown_085938F4[][2] =
+{
+ {30, 28},
+ {-20, 24},
+ {16, 26},
+ {-10, 28},
+};
+
+const union AnimCmd gUnknown_085938FC[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 15, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(32, 15),
+ ANIMCMD_FRAME(16, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593934[] =
+{
+ gUnknown_085938FC,
+};
+
+const struct SpriteTemplate gUnknown_08593938 =
+{
+ .tileTag = ANIM_TAG_BELL,
+ .paletteTag = ANIM_TAG_BELL,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593934,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const u16 gUnknown_08593950[] =
+{
+ ANIM_TAG_MUSIC_NOTES_2,
+ ANIM_SPRITES_START - 1,
+ ANIM_SPRITES_START - 2,
+};
+
+const struct SpriteTemplate gUnknown_08593958 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES_2,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105DE8,
+};
+
+const struct SpriteTemplate gUnknown_08593970 =
+{
+ .tileTag = ANIM_TAG_MAGENTA_HEART,
+ .paletteTag = ANIM_TAG_MAGENTA_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8105E60,
+};
+
+const union AffineAnimCmd gUnknown_08593988[] =
+{
+ AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A),
+ AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085939A0 =
+{
+ .tileTag = ANIM_TAG_RED_HEART,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106140,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 =
+{
+ .tileTag = ANIM_TAG_RED_HEART,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81061C4,
+};
+
+const struct SpriteTemplate gUnknown_085939D0 =
+{
+ .tileTag = ANIM_TAG_RED_HEART,
+ .paletteTag = ANIM_TAG_RED_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_810624C,
+};
+
+const union AffineAnimCmd gUnknown_085939E8[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593A00[] =
+{
+ gUnknown_085939E8,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RED_ORB,
+ .paletteTag = ANIM_TAG_RED_ORB,
+ .oam = &gUnknown_0852496C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593A00,
+ .callback = AnimOrbitFast,
+};
+
+const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_RED_ORB,
+ .paletteTag = ANIM_TAG_RED_ORB,
+ .oam = &gUnknown_085249CC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593A00,
+ .callback = AnimOrbitScatter,
+};
+
+const union AffineAnimCmd gUnknown_08593A34[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593A4C[] =
+{
+ gUnknown_08593A34,
+};
+
+const struct SpriteTemplate gUnknown_08593A50 =
+{
+ .tileTag = ANIM_TAG_RED_ORB_2,
+ .paletteTag = ANIM_TAG_RED_ORB_2,
+ .oam = &gUnknown_085249C4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593A4C,
+ .callback = sub_8106944,
+};
+
+const union AnimCmd gUnknown_08593A68[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593A80[] =
+{
+ gUnknown_08593A68,
+};
+
+const struct SpriteTemplate gUnknown_08593A84 =
+{
+ .tileTag = ANIM_TAG_EYE_SPARKLE,
+ .paletteTag = ANIM_TAG_EYE_SPARKLE,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_08593A80,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81069B8,
+};
+
+const union AnimCmd gUnknown_08593A9C[] =
+{
+ ANIMCMD_FRAME(0, 24),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593AA4[] =
+{
+ gUnknown_08593A9C,
+};
+
+const struct SpriteTemplate gUnknown_08593AA8 =
+{
+ .tileTag = ANIM_TAG_ANGEL,
+ .paletteTag = ANIM_TAG_ANGEL,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593AA4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81069D0,
+};
+
+const struct SpriteTemplate gUnknown_08593AC0 =
+{
+ .tileTag = ANIM_TAG_PINK_HEART,
+ .paletteTag = ANIM_TAG_PINK_HEART,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106AD0,
+};
+
+const union AnimCmd gUnknown_08593AD8[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_08593AE0[] =
+{
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_08593AE8[] =
+{
+ gUnknown_08593AD8,
+ gUnknown_08593AE0,
+};
+
+const struct SpriteTemplate gUnknown_08593AF0 =
+{
+ .tileTag = ANIM_TAG_DEVIL,
+ .paletteTag = ANIM_TAG_DEVIL,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593AE8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106B54,
+};
+
+const union AnimCmd gUnknown_08593B08[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593B1C[] =
+{
+ ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593B30[] =
+{
+ gUnknown_08593B08,
+ gUnknown_08593B1C,
+};
+
+const struct SpriteTemplate gUnknown_08593B38 =
+{
+ .tileTag = ANIM_TAG_SWIPE,
+ .paletteTag = ANIM_TAG_SWIPE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593B30,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106C80,
+};
+
+const union AnimCmd gUnknown_08593B50[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_FRAME(32, 8),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_08593B64[] =
+{
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(32, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_08593B78[] =
+{
+ gUnknown_08593B50,
+ gUnknown_08593B64,
+};
+
+const struct SpriteTemplate gUnknown_08593B80 =
+{
+ .tileTag = ANIM_TAG_MOVEMENT_WAVES,
+ .paletteTag = ANIM_TAG_MOVEMENT_WAVES,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_08593B78,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106CD0,
+};
+
+const union AffineAnimCmd gUnknown_08593B98[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 4),
+ AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 =
+{
+ .tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8106E00,
+};
+
+const union AffineAnimCmd gUnknown_08593BD0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593BE0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd gUnknown_08593BF0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16),
+ AFFINEANIMCMD_END_ALT(1),
+};
+
+const union AffineAnimCmd *const gUnknown_08593C00[] =
+{
+ gUnknown_08593BD0,
+ gUnknown_08593BE0,
+ gUnknown_08593BF0,
+};
+
+extern const union AnimCmd *const gUnknown_08592FCC[];
+const struct SpriteTemplate gUnknown_08593C0C =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES_2,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593C00,
+ .callback = sub_8106F60,
+};
+
+const struct SpriteTemplate gUnknown_08593C24 =
+{
+ .tileTag = ANIM_TAG_MUSIC_NOTES_2,
+ .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
+ .oam = &gUnknown_0852496C,
+ .anims = gUnknown_08592FCC,
+ .images = NULL,
+ .affineAnims = gUnknown_08593C00,
+ .callback = sub_8106F00,
+};
+
+const union AffineAnimCmd gUnknown_08593C3C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_08593C4C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_08593C5C[] =
+{
+ gUnknown_08593C3C,
+ gUnknown_08593C4C,
+};
+
+const struct SpriteTemplate gUnknown_08593C64 =
+{
+ .tileTag = ANIM_TAG_GUARD_RING,
+ .paletteTag = ANIM_TAG_GUARD_RING,
+ .oam = &gUnknown_08524B1C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_08593C5C,
+ .callback = sub_81070AC,
+};
+
+void sub_8103448(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[3];
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = sub_80A6450;
+ sprite->callback(sprite);
+}
+
+void sub_8103498(struct Sprite *sprite)
+{
+ u8 battler;
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sub_810310C(battler, sprite);
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->callback = sub_81034D8;
+}
+
+static void sub_81034D8(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.y -= 3;
+ if (++sprite->data[1] == 6)
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->pos2.y += 3;
+ if (--sprite->data[1] == 0)
+ sprite->data[0]++;
+ break;
+ case 2:
+ if (++sprite->data[1] == 64)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+static void sub_810353C(struct Sprite *sprite)
+{
+ s16 temp;
+ gSprites[sprite->data[2]].pos2.x += sprite->data[1];
+ temp = sprite->data[1];
+ sprite->data[1] = -temp;
+ if (sprite->data[0] == 0)
+ {
+ gSprites[sprite->data[2]].pos2.x = 0;
+ DestroySpriteAndMatrix(sprite);
+ }
+
+ sprite->data[0]--;
+}
+
+void sub_810358C(struct Sprite *sprite)
+{
+ u8 spriteId;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ spriteId = gBattlerSpriteIds[gBattleAnimTarget];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = spriteId;
+ sprite->callback = sub_810353C;
+ sprite->invisible = 1;
+}
+
+void sub_8103620(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[4];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_8103658);
+}
+
+static void sub_8103658(struct Sprite *sprite)
+{
+ sprite->data[0] = sprite->data[1];
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y + 15;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, sub_8103680);
+}
+
+static void sub_8103680(struct Sprite *sprite)
+{
+ if (sprite->data[5] == 0)
+ DestroyAnimSprite(sprite);
+ else
+ sprite->data[5]--;
+}
+
+// Rotates the attacking mon sprite downwards and then back upwards to its original position.
+// No args.
+void AnimTask_Withdraw(u8 taskId)
+{
+ PrepareBattlerSpriteForRotScale(gBattlerSpriteIds[gBattleAnimAttacker], ST_OAM_OBJ_NORMAL);
+ gTasks[taskId].func = AnimTask_WithdrawStep;
+}
+
+static void AnimTask_WithdrawStep(u8 taskId)
+{
+ u8 spriteId = gBattlerSpriteIds[gBattleAnimAttacker];
+ s16 rotation;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ rotation = -gTasks[taskId].data[0];
+ else
+ rotation = gTasks[taskId].data[0];
+
+ SetSpriteRotScale(spriteId, 0x100, 0x100, rotation);
+ if (gTasks[taskId].data[1] == 0)
+ {
+ gTasks[taskId].data[0] += 0xB0;
+ // this y position update gets overwritten by SetBattlerSpriteYOffsetFromRotation()
+ gSprites[spriteId].pos2.y++;
+ }
+ else if (gTasks[taskId].data[1] == 1)
+ {
+ if (++gTasks[taskId].data[3] == 30)
+ gTasks[taskId].data[1] = 2;
+
+ return;
+ }
+ else
+ {
+ gTasks[taskId].data[0] -= 0xB0;
+ // this y position update gets overwritten by SetBattlerSpriteYOffsetFromRotation()
+ gSprites[spriteId].pos2.y--;
+ }
+
+ SetBattlerSpriteYOffsetFromRotation(spriteId);
+ if (gTasks[taskId].data[0] == 0xF20 || gTasks[taskId].data[0] == 0)
+ {
+ if (gTasks[taskId].data[1] == 2)
+ {
+ ResetSpriteRotScale(spriteId);
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[1]++;
+ }
+ }
+}
+
+// Animates a "zap of energy" used in KINESIS.
+// arg 0: x pixel offset
+// arg 1: y pixel offset
+// arg 2: vertical flip
+void Anim_KinesisZapEnergy(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->hFlip = 1;
+ if (gBattleAnimArgs[2])
+ sprite->vFlip = 1;
+ }
+ else
+ {
+ if (gBattleAnimArgs[2])
+ sprite->vFlip = 1;
+ }
+
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Animates a sword that rises into the air after a brief pause.
+// arg 0: x pixel offset
+// arg 1: y pixel offset
+void Anim_SwordsDanceBlade(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+ StoreSpriteCallbackInData6(sprite, Anim_SwordsDanceBladeStep);
+}
+
+static void Anim_SwordsDanceBladeStep(struct Sprite *sprite)
+{
+ sprite->data[0] = 6;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y - 32;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// Moves a projectile towards the target mon. The sprite is rotated to be pointing
+// in the same direction it's moving.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: target x pixel offset
+// arg 3: target y pixel offset
+// arg 4: duration
+void AnimSonicBoomProjectile(struct Sprite *sprite)
+{
+ s16 targetXPos;
+ s16 targetYPos;
+ u16 rotation;
+
+ if (IsContest())
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) != 0)
+ {
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ gBattleAnimArgs[3] = -gBattleAnimArgs[3];
+ }
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ targetXPos = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ targetYPos = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ rotation = ArcTan2Neg(targetXPos - sprite->pos1.x, targetYPos - sprite->pos1.y);
+ rotation += 0xF000;
+ if (IsContest())
+ rotation -= 0x6000;
+
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = targetXPos;
+ sprite->data[4] = targetYPos;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+static void sub_81039CC(struct Sprite *sprite)
+{
+ if (sprite->data[0]-- <= 0)
+ {
+ gTasks[sprite->data[7]].data[1]--;
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8103A00(struct Sprite *sprite)
+{
+ struct Task* task = &gTasks[sprite->data[7]];
+ if (sprite->data[0] > task->data[5])
+ {
+ sprite->data[5] += sprite->data[3];
+ sprite->data[6] += sprite->data[4];
+ }
+ else
+ {
+ sprite->data[5] -= sprite->data[3];
+ sprite->data[6] -= sprite->data[4];
+ }
+
+ sprite->data[1] += sprite->data[5];
+ sprite->data[2] += sprite->data[6];
+ if (1 & task->data[7])
+ sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1;
+ else
+ sprite->pos2.x = (u16)sprite->data[1] >> 8;
+
+ if (1 & task->data[8])
+ sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1;
+ else
+ sprite->pos2.y = (u16)sprite->data[2] / 256u;
+
+ if (sprite->data[0]-- <= 0)
+ {
+ sprite->data[0] = 30;
+ sprite->callback = sub_81039CC;
+ }
+}
+
+void sub_8103AA4(struct Sprite *sprite)
+{
+ s16 a;
+ s16 b;
+ s16 c;
+
+ struct Task* task = &gTasks[sprite->data[7]];
+ sprite->data[1] += (-2 & task->data[7]);
+ sprite->data[2] += (-2 & task->data[8]);
+ if (1 & task->data[7])
+ sprite->pos2.x = ((u16)sprite->data[1] >> 8) * -1;
+ else
+ sprite->pos2.x = (u16)sprite->data[1] >> 8;
+
+ if (1 & task->data[8])
+ sprite->pos2.y = ((u16)sprite->data[2] / 256u) * -1;
+ else
+ sprite->pos2.y = (u16)sprite->data[2] / 256u;
+
+ if (sprite->data[0]-- <= 0)
+ {
+ sprite->data[0] = 8;
+ task->data[5] = 4;
+ a = sub_8151624(0x1000);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ if (task->data[11] >= sprite->pos1.x)
+ b = (task->data[11] - sprite->pos1.x) << 8;
+ else
+ b = (sprite->pos1.x - task->data[11]) << 8;
+
+ if (task->data[12] >= sprite->pos1.y)
+ c = (task->data[12] - sprite->pos1.y) << 8;
+ else
+ c = (sprite->pos1.y - task->data[12]) << 8;
+
+ sprite->data[2] = 0;
+ sprite->data[1] = 0;
+ sprite->data[6] = 0;
+ sprite->data[5] = 0;
+ sprite->data[3] = sub_8151534(sub_8151534(b, a), sub_8151624(0x1C0));
+ sprite->data[4] = sub_8151534(sub_8151534(c, a), sub_8151624(0x1C0));
+ sprite->callback = sub_8103A00;
+ }
+}
+
+static void sub_8103BE4(u8 taskId)
+{
+ if (gTasks[taskId].data[1] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_8103C0C(u8 taskId)
+{
+ if (gTasks[taskId].data[0]-- <= 0)
+ {
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateSprite(&gUnknown_085933B0, gTasks[taskId].data[9], gTasks[taskId].data[10], gTasks[taskId].data[2] - gTasks[taskId].data[1]);
+ sprite = &gSprites[spriteId];
+ switch (gTasks[taskId].data[4])
+ {
+ case 1:
+ sprite->oam.matrixNum |= 24;
+ break;
+ case 2:
+ sprite->oam.matrixNum = 8;
+ break;
+ }
+
+ sprite->data[0] = gTasks[taskId].data[5] - gTasks[taskId].data[6];
+ sprite->data[7] = taskId;
+ gTasks[taskId].data[gTasks[taskId].data[1] + 13] = spriteId;
+ gTasks[taskId].data[0] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]++;
+ PlaySE12WithPanning(SE_W059B, BattleAnimAdjustPanning(-63));
+ if (gTasks[taskId].data[1] > 2)
+ gTasks[taskId].func = sub_8103BE4;
+ }
+}
+
+void sub_8103CF0(u8 taskId)
+{
+ s16 attackerY = 0;
+ s16 attackerX = 0;
+ s16 targetX = 0;
+ s16 targetY = 0;
+ s16 xDiff, yDiff;
+
+ if (IsContest())
+ {
+ gTasks[taskId].data[4] = 2;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ else
+ {
+ if ((gBattlerPositions[gBattleAnimTarget] & 1) == 0)
+ {
+ gTasks[taskId].data[4] = 1;
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+ if (gBattleAnimArgs[2] & 1)
+ gBattleAnimArgs[2] &= ~1;
+ else
+ gBattleAnimArgs[2] |= 1;
+ }
+ }
+
+ attackerX = gTasks[taskId].data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X);
+ attackerY = gTasks[taskId].data[10] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y);
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget)))
+ {
+ SetAverageBattlerPositions(gBattleAnimTarget, 0, &targetX, &targetY);
+ }
+ else
+ {
+ targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ targetY = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+ }
+
+ targetX = gTasks[taskId].data[11] = targetX + gBattleAnimArgs[0];
+ targetY = gTasks[taskId].data[12] = targetY + gBattleAnimArgs[1];
+ if (targetX >= attackerX)
+ xDiff = targetX - attackerX;
+ else
+ xDiff = attackerX - targetX;
+
+ gTasks[taskId].data[5] = sub_8151534(xDiff, sub_8151624(gBattleAnimArgs[2] & ~1));
+ gTasks[taskId].data[6] = sub_8151534(gTasks[taskId].data[5], 0x80);
+ gTasks[taskId].data[7] = gBattleAnimArgs[2];
+ if (targetY >= attackerY)
+ {
+ yDiff = targetY - attackerY;
+ gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) & ~1;
+ }
+ else
+ {
+ yDiff = attackerY - targetY;
+ gTasks[taskId].data[8] = sub_8151534(yDiff, sub_8151624(gTasks[taskId].data[5])) | 1;
+ }
+
+ gTasks[taskId].data[3] = gBattleAnimArgs[3];
+ if (gBattleAnimArgs[4] & 0x80)
+ {
+ gBattleAnimArgs[4] ^= 0x80;
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+ else
+ {
+ if (gBattleAnimArgs[4] >= 64)
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) + (gBattleAnimArgs[4] - 64);
+ gTasks[taskId].data[2] = var;
+ }
+ else
+ {
+ u16 var = GetBattlerSpriteSubpriority(gBattleAnimTarget) - gBattleAnimArgs[4];
+ gTasks[taskId].data[2] = var;
+ }
+ }
+
+ if (gTasks[taskId].data[2] < 3)
+ gTasks[taskId].data[2] = 3;
+
+ gTasks[taskId].func = sub_8103C0C;
+}
+
+void sub_8103FE8(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ sprite->data[0] = 0x100 + (IndexOfSpritePaletteTag(gUnknown_085934A0.paletteTag) << 4);
+ sprite->callback = sub_8104018;
+}
+
+#ifdef NONMATCHING
+static void sub_8104018(struct Sprite *sprite)
+{
+ u16 r7;
+ u16 r5;
+ int i;
+ if (++sprite->data[1] == 2)
+ {
+ sprite->data[1] = 0;
+ r5 = sprite->data[0];
+ r7 = gPlttBufferFaded[8 + r5];
+ for (i = 0; i < 8; i++)
+ {
+ gPlttBufferFaded[i + r5 + 8] = gPlttBufferFaded[i + r5 + 9];
+ }
+ gPlttBufferFaded[r5 + 15] = r7;
+
+ if (++sprite->data[2] == 24)
+ DestroyAnimSprite(sprite);
+ }
+}
+#else
+NAKED
+static void sub_8104018(struct Sprite *sprite)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ adds r4, r0, 0\n\
+ ldrh r0, [r4, 0x30]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x30]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x2\n\
+ bne _0810407C\n\
+ movs r0, 0\n\
+ strh r0, [r4, 0x30]\n\
+ ldrh r5, [r4, 0x2E]\n\
+ ldr r1, =gPlttBufferFaded\n\
+ adds r0, r5, 0\n\
+ adds r0, 0x8\n\
+ lsls r0, 1\n\
+ adds r0, r1 \n\
+ ldrh r7, [r0]\n\
+ adds r6, r1, 0\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x9\n\
+ lsls r0, r5, 1\n\
+ adds r0, r6\n\
+ adds r2, r0, 0\n\
+ adds r2, 0x10\n\
+ movs r3, 0x7\n\
+ lsls r1, 1\n\
+ adds r1, r6\n\
+_08104050:\n\
+ ldrh r0, [r1]\n\
+ strh r0, [r2]\n\
+ adds r1, 0x2\n\
+ adds r2, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _08104050\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xF\n\
+ lsls r0, 1\n\
+ adds r0, r6\n\
+ strh r7, [r0]\n\
+ ldrh r0, [r4, 0x32]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x32]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x18\n\
+ bne _0810407C\n\
+ adds r0, r4, 0\n\
+ bl DestroyAnimSprite\n\
+_0810407C:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+.syntax divided\n");
+}
+#endif
+
+void sub_8104088(struct Sprite *sprite)
+{
+ s16 r6;
+ s16 r7;
+ u16 var;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ r6 = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ r7 = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ r6 += gBattleAnimArgs[2];
+ var = ArcTan2Neg(r6 - sprite->pos1.x, r7 - sprite->pos1.y);
+ var += 0xC000;
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, var);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = r6;
+ sprite->data[4] = r7;
+ sprite->callback = sub_80A7000;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_810413C(struct Sprite *sprite)
+{
+ sprite->data[2] = -16;
+ sprite->pos1.y += 8;
+ sprite->callback = sub_8104154;
+}
+
+static void sub_8104154(struct Sprite *sprite)
+{
+ sprite->data[0] += 0x80;
+ sprite->pos2.x = sprite->data[0] >> 8;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ sprite->pos2.x = -sprite->pos2.x;
+
+ sprite->pos2.y = Sin(sprite->data[1], sprite->data[2]);
+ sprite->data[1] += 5;
+ if (sprite->data[1] > 126)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] /= 2;
+ if (++sprite->data[3] == 2)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81041C4(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = 20;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->callback = StartAnimLinearTranslation;
+ sprite->affineAnimPaused = 1;
+ StoreSpriteCallbackInData6(sprite, sub_810421C);
+}
+
+static void sub_810421C(struct Sprite *sprite)
+{
+ int i;
+ u16 rand;
+ s16* ptr;
+ PlaySE12WithPanning(SE_W030, BattleAnimAdjustPanning(63));
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ ptr = &sprite->data[7];
+ for (i = 0; i < 8; i++)
+ ptr[i - 7] = 0;
+
+ rand = Random2();
+ sprite->data[6] = 0xFFF4 - (rand & 7);
+ rand = Random2();
+ sprite->data[7] = (rand % 0xA0) + 0xA0;
+ sprite->callback = sub_81042A0;
+ sprite->affineAnimPaused = 0;
+}
+
+static void sub_81042A0(struct Sprite *sprite)
+{
+ sprite->data[0] += sprite->data[7];
+ sprite->pos2.x = sprite->data[0] >> 8;
+ if (sprite->data[7] & 1)
+ sprite->pos2.x = -sprite->pos2.x;
+
+ sprite->pos2.y = Sin(sprite->data[1], sprite->data[6]);
+ sprite->data[1] += 8;
+ if (sprite->data[1] > 126)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] /= 2;
+ if (++sprite->data[3] == 1)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+// Moves a tornado in a circlular motion.
+// arg 0: initial x pixel offset
+// arg 1: initial y pixel offset
+// arg 2: wave amplitude
+// arg 3: unused
+// arg 4: initial wave offset
+// arg 5: wave period (higher means faster wave)
+// arg 6: duration
+void Anim_RazorWindTornado(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ sprite->pos1.y += 16;
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[5];
+ sprite->data[3] = gBattleAnimArgs[6];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->callback = TranslateSpriteInCircleOverDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback(sprite);
+}
+
+// Animates a single pincer line that extends towards the center of the target mon.
+// arg 0: invert
+void Anim_ViceGripPincer(struct Sprite *sprite)
+{
+ s16 startXOffset = 32;
+ s16 startYOffset = -32;
+ s16 endXOffset = 16;
+ s16 endYOffset = -16;
+ if (gBattleAnimArgs[0])
+ {
+ startXOffset = -32;
+ startYOffset = 32;
+ endXOffset = -16;
+ endYOffset = 16;
+ StartSpriteAnim(sprite, 1);
+ }
+
+ sprite->pos1.x += startXOffset;
+ sprite->pos1.y += startYOffset;
+ sprite->data[0] = 6;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, Anim_ViceGripPincerStep);
+}
+
+static void Anim_ViceGripPincerStep(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+// Animates a single pincer line that extends towards the center of the target mon, and then back out.
+// arg 0: animation id
+void Anim_GuillotinePincer(struct Sprite *sprite)
+{
+ s16 startXOffset = 32;
+ s16 startYOffset = -32;
+ s16 endXOffset = 16;
+ s16 endYOffset = -16;
+ if (gBattleAnimArgs[0])
+ {
+ startXOffset = -32;
+ startYOffset = 32;
+ endXOffset = -16;
+ endYOffset = 16;
+ StartSpriteAnim(sprite, gBattleAnimArgs[0]);
+ }
+
+ sprite->pos1.x += startXOffset;
+ sprite->pos1.y += startYOffset;
+ sprite->data[0] = 6;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + endXOffset;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + endYOffset;
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[0];
+ sprite->data[6] = sprite->data[0];
+ sprite->callback = Anim_GuillotinePincerStep1;
+}
+
+static void Anim_GuillotinePincerStep1(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite) && sprite->animEnded)
+ {
+ SeekSpriteAnim(sprite, 0);
+ sprite->animPaused = 1;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 2;
+ sprite->pos2.y = -2;
+ sprite->data[0] = sprite->data[6];
+ sprite->data[1] ^= 1;
+ sprite->data[2] ^= 1;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+ sprite->callback = Anim_GuillotinePincerStep2;
+ }
+}
+
+static void Anim_GuillotinePincerStep2(struct Sprite *sprite)
+{
+ if (sprite->data[3])
+ {
+ sprite->pos2.x = -sprite->pos2.x;
+ sprite->pos2.y = -sprite->pos2.y;
+ }
+
+ sprite->data[3] ^= 1;
+ if (++sprite->data[4] == 51)
+ {
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+ sprite->animPaused = 0;
+ StartSpriteAnim(sprite, sprite->data[5] ^ 1);
+ sprite->callback = Anim_GuillotinePincerStep3;
+ }
+}
+
+static void Anim_GuillotinePincerStep3(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+// Scales up the target mon sprite, and sets the palette to greyscale.
+// Used in MOVE_DISABLE.
+// No args.
+void AnimTask_GrowAndGreyscale(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
+ SetSpriteRotScale(spriteId, 0xD0, 0xD0, 0);
+ SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, FALSE);
+ gTasks[taskId].data[0] = 80;
+ gTasks[taskId].func = AnimTask_GrowAndGreyscaleStep;
+}
+
+static void AnimTask_GrowAndGreyscaleStep(u8 taskId)
+{
+ if (--gTasks[taskId].data[0] == -1)
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ ResetSpriteRotScale(spriteId);
+ SetGreyscaleOrOriginalPalette(gSprites[spriteId].oam.paletteNum + 16, TRUE);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// Shrinks and grows the attacking mon several times. Also creates transparent versions of the
+// mon's sprite while it is shrinking.
+// No args.
+void AnimTask_Minimize(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[0] = spriteId;
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0x100;
+ task->data[5] = 0;
+ task->data[6] = 0;
+ task->data[7] = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ task->func = AnimTask_MinimizeStep1;
+}
+
+static void AnimTask_MinimizeStep1(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[1])
+ {
+ case 0:
+ if (task->data[2] == 0 || task->data[2] == 3 || task->data[2] == 6)
+ CreateMinimizeSprite(task, taskId);
+ task->data[2]++;
+ task->data[4] += 0x28;
+ SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0);
+ SetBattlerSpriteYOffsetFromYScale(task->data[0]);
+ if (task->data[2] == 32)
+ {
+ task->data[5]++;
+ task->data[1]++;
+ }
+ break;
+ case 1:
+ if (task->data[6] == 0)
+ {
+ if (task->data[5] == 3)
+ {
+ task->data[2] = 0;
+ task->data[1] = 3;
+ }
+ else
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0x100;
+ SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0);
+ SetBattlerSpriteYOffsetFromYScale(task->data[0]);
+ task->data[1] = 2;
+ }
+ }
+ break;
+ case 2:
+ task->data[1] = 0;
+ break;
+ case 3:
+ if (++task->data[2] > 32)
+ {
+ task->data[2] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 4:
+ task->data[2] += 2;
+ task->data[4] -= 0x50;
+ SetSpriteRotScale(task->data[0], task->data[4], task->data[4], 0);
+ SetBattlerSpriteYOffsetFromYScale(task->data[0]);
+ if (task->data[2] == 32)
+ {
+ task->data[2] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 5:
+ ResetSpriteRotScale(task->data[0]);
+ gSprites[task->data[15]].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void CreateMinimizeSprite(struct Task* task, u8 taskId)
+{
+ u16 matrixNum;
+ s16 spriteId = CloneBattlerSpriteWithBlend(ANIM_ATTACKER);
+ if (spriteId >= 0)
+ {
+ if ((matrixNum = AllocOamMatrix()) == 0xFF)
+ {
+ obj_delete_but_dont_free_vram(&gSprites[spriteId]);
+ }
+ else
+ {
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE;
+ gSprites[spriteId].affineAnimPaused = TRUE;
+ gSprites[spriteId].oam.matrixNum = matrixNum;
+ gSprites[spriteId].subpriority = task->data[7] - task->data[3];
+ task->data[3]++;
+ task->data[6]++;
+ gSprites[spriteId].data[0] = 16;
+ gSprites[spriteId].data[1] = taskId;
+ gSprites[spriteId].data[2] = 6;
+ gSprites[spriteId].callback = ClonedMinizeSprite_Step;
+ SetSpriteRotScale(spriteId, task->data[4], task->data[4], 0);
+ gSprites[spriteId].oam.affineMode = 1;
+ CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode);
+ }
+ }
+}
+
+static void ClonedMinizeSprite_Step(struct Sprite *sprite)
+{
+ if (--sprite->data[0] == 0)
+ {
+ gTasks[sprite->data[1]].data[sprite->data[2]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ obj_delete_but_dont_free_vram(sprite);
+ }
+}
+
+// Task to facilitate expanding and hopping effect seen in Splash.
+// arg 0: anim battler
+// arg 1: num hops
+void AnimTask_Splash(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (gBattleAnimArgs[1] == 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ task->data[0] = spriteId;
+ task->data[1] = 0;
+ task->data[2] = gBattleAnimArgs[1];
+ task->data[3] = 0;
+ task->data[4] = 0;
+ PrepareAffineAnimInTaskData(task, spriteId, gSplashEffectAffineAnimCmds);
+ task->func = AnimTask_SplashStep;
+ }
+}
+
+static void AnimTask_SplashStep(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[1])
+ {
+ case 0:
+ RunAffineAnimFromTaskData(task);
+ task->data[4] += 3;
+ gSprites[task->data[0]].pos2.y += task->data[4];
+ if (++task->data[3] > 7)
+ {
+ task->data[3] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 1:
+ RunAffineAnimFromTaskData(task);
+ gSprites[task->data[0]].pos2.y += task->data[4];
+ if (++task->data[3] > 7)
+ {
+ task->data[3] = 0;
+ task->data[1]++;
+ }
+ break;
+ case 2:
+ if (task->data[4] != 0)
+ {
+ gSprites[task->data[0]].pos2.y -= 2;
+ task->data[4] -= 2;
+ }
+ else
+ task->data[1]++;
+ break;
+ case 3:
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ if (--task->data[2] == 0)
+ {
+ gSprites[task->data[0]].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ PrepareAffineAnimInTaskData(task, task->data[0], gSplashEffectAffineAnimCmds);
+ task->data[1] = 0;
+ }
+ }
+ break;
+ }
+}
+
+// Grows, pauses, then shrinks the attacking mon.
+// Used by MOVE_SWAGGER and MOVE_BULK_UP
+// No args.
+void AnimTask_GrowAndShrink(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ PrepareAffineAnimInTaskData(task, spriteId, gGrowAndShrinkAffineAnimCmds);
+ task->func = AnimTask_GrowAndShrinkStep;
+}
+
+static void AnimTask_GrowAndShrinkStep(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!RunAffineAnimFromTaskData(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+// Animates a little puff of the mon's breath.
+// Used by MOVE_SWAGGER and MOVE_BULK_UP
+// No args.
+void Anim_BreathPuff(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) + 32;
+ sprite->data[1] = 64;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2) - 32;
+ sprite->data[1] = -64;
+ }
+
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[0] = 52;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ sprite->data[4] = 0;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = AnimTranslateLinearSimple;
+}
+
+// Animates an "angry" mark above a mon's head.
+// arg 0: target mon (0 = attacker, 1 = target)
+// arg 1: x pixel offset
+// arg 2: y pixel offset
+void Anim_AngerMark(struct Sprite *sprite)
+{
+ u8 battler;
+ if (!gBattleAnimArgs[0])
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[1] *= -1;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
+ if (sprite->pos1.y < 8)
+ sprite->pos1.y = 8;
+
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+// left/right movements
+void sub_8104C38(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[0] = spriteId;
+ task->data[1] = 0;
+ PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085936A4);
+ task->func = sub_8104C78;
+}
+
+static void sub_8104C78(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!RunAffineAnimFromTaskData(task))
+ DestroyAnimVisualTask(taskId);
+}
+
+// up/down movements
+void sub_8104CA4(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[1] = 0;
+ task->data[2] = 4;
+ task->data[3] = 7;
+ task->data[4] = 3;
+ task->data[5] = gSprites[task->data[0]].pos1.x;
+ task->data[6] = gSprites[task->data[0]].pos1.y;
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 2;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ task->data[2] *= -1;
+
+ task->func = sub_8104D28;
+}
+
+static void sub_8104D28(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (++task->data[7] > 2)
+ {
+ task->data[7] = 0;
+ task->data[8]++;
+ if (task->data[8] & 1)
+ gSprites[task->data[0]].pos1.y += task->data[9];
+ else
+ gSprites[task->data[0]].pos1.y -= task->data[9];
+ }
+ switch (task->data[1])
+ {
+ case 0:
+ gSprites[task->data[0]].pos1.x += task->data[2];
+ if (--task->data[3] == 0)
+ {
+ task->data[3] = 14;
+ task->data[1] = 1;
+ }
+ break;
+ case 1:
+ gSprites[task->data[0]].pos1.x -= task->data[2];
+ if (--task->data[3] == 0)
+ {
+ task->data[3] = 7;
+ task->data[1] = 2;
+ }
+ break;
+ case 2:
+ gSprites[task->data[0]].pos1.x += task->data[2];
+ if (--task->data[3] == 0)
+ {
+ if (--task->data[4] != 0)
+ {
+ task->data[3] = 7;
+ task->data[1] = 0;
+ }
+ else
+ {
+ if ((task->data[8] & 1) != 0)
+ gSprites[task->data[0]].pos1.y -= task->data[9];
+
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+void sub_8104E74(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ struct ScanlineEffectParams params;
+
+ s16 i;
+ task->data[0] = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 32;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[15] = sub_80A861C(gBattleAnimTarget, 0);
+
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimTarget) == 1)
+ {
+ task->data[6] = gBattle_BG1_X;
+ params.dmaDest = (u16 *)REG_ADDR_BG1HOFS;
+ }
+ else
+ {
+ task->data[6] = gBattle_BG2_X;
+ params.dmaDest = (u16 *)REG_ADDR_BG2HOFS;
+ }
+
+ for (i = task->data[0] - 0x40; i <= task->data[0]; i++)
+ {
+ if (i >= 0)
+ {
+ gScanlineEffectRegBuffers[0][i] = task->data[6] + 0xF0;
+ gScanlineEffectRegBuffers[1][i] = task->data[6] + 0xF0;
+ }
+ }
+
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.initState = 1;
+ params.unused9 = 0;
+ ScanlineEffect_SetParams(params);
+ task->func = sub_8104F54;
+}
+
+static void sub_8104F54(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ switch (task->data[4])
+ {
+ case 0:
+ if (++task->data[5] > 20)
+ task->data[4]++;
+ break;
+ case 1:
+ if (++task->data[1] > 3)
+ {
+ task->data[1] = 0;
+ task->data[2] = task->data[3] & 3;
+ task->data[5] = task->data[0] - task->data[3];
+ switch (task->data[2])
+ {
+ case 0:
+ break;
+ case 1:
+ task->data[5] -= 2;
+ break;
+ case 2:
+ task->data[5] += 1;
+ break;
+ case 3:
+ task->data[5] += 1;
+ break;
+ }
+
+ if (task->data[5] >= 0)
+ {
+ gScanlineEffectRegBuffers[0][task->data[5]] = task->data[6];
+ gScanlineEffectRegBuffers[1][task->data[5]] = task->data[6];
+ }
+
+ if (++task->data[3] >= task->data[15])
+ {
+ gScanlineEffect.state = 3;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ break;
+ }
+}
+
+void sub_810501C(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) - 16;
+ sprite->pos1.y = GetBattlerYCoordWithElevation(gBattleAnimTarget) + 16;
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = 16;
+ sprite->data[4] = 0;
+ sprite->data[5] = sub_80A861C(gBattleAnimTarget, 0) + 2;
+ sprite->data[6] = BattleAnimAdjustPanning(63);
+ sprite->callback = sub_8105078;
+}
+
+static void sub_8105078(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[2] > 1)
+ {
+ sprite->data[2] = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+ if (++sprite->data[1] > 16)
+ {
+ sprite->invisible = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] > 3 && sprite->data[2] < sprite->data[5])
+ {
+ sprite->data[1] = 0;
+ sprite->pos1.y -= 1;
+ sprite->data[2]++;
+ if (sprite->data[2] % 10 == 0)
+ PlaySE12WithPanning(SE_W166, sprite->data[6]);
+ }
+ sprite->data[4] += sprite->data[3];
+ if (sprite->data[4] > 31)
+ {
+ sprite->data[4] = 0x40 - sprite->data[4];
+ sprite->data[3] *= -1;
+ }
+ else if (sprite->data[4] <= -32)
+ {
+ sprite->data[4] = -0x40 - sprite->data[4];
+ sprite->data[3] *= -1;
+ }
+ sprite->pos2.x = sprite->data[4];
+ if (sprite->data[5] == sprite->data[2])
+ {
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ if (++sprite->data[2] > 1)
+ {
+ sprite->data[2] = 0;
+ sprite->invisible = !sprite->invisible;
+ }
+ if (++sprite->data[1] > 16)
+ {
+ sprite->invisible = 0;
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_81051C4(struct Sprite *sprite)
+{
+ u8 battler = 0;
+ u16 sp0 = 0;
+ u16 sp1 = 0;
+ u8 r4;
+
+ if (gBattleAnimArgs[2] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ r4 = gBattleAnimArgs[3] ^ 1;
+ if (IsDoubleBattle() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler)))
+ {
+ SetAverageBattlerPositions(battler, r4, &sp0, &sp1);
+ if (r4 == 0)
+ r4 = GetBattlerSpriteCoord(battler, 0);
+ else
+ r4 = GetBattlerSpriteCoord(battler, 2);
+
+ if (GetBattlerSide(battler) != B_SIDE_PLAYER)
+ gBattleAnimArgs[0] -= (sp0 - r4) - gBattleAnimArgs[0]; // This is weird.
+ else
+ gBattleAnimArgs[0] = sp0 - r4;
+ }
+
+ sprite->callback = sub_80A77C8;
+ sprite->callback(sprite);
+}
+
+void sub_8105284(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ {
+ FreeSpriteOamMatrix(sprite);
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81052A4(struct Sprite *sprite)
+{
+ u16 r9 = 0;
+ u16 r6 = 0;
+ s16 sp0 = 0;
+ s16 sp1 = 0;
+ u8 sp4;
+ u8 battler1;
+ u8 battler2;
+ u8 r10;
+
+ if (gBattleAnimArgs[5] == 0)
+ {
+ battler1 = gBattleAnimAttacker;
+ battler2 = gBattleAnimTarget;
+ }
+ else
+ {
+ battler1 = gBattleAnimTarget;
+ battler2 = gBattleAnimAttacker;
+ }
+
+ if (!gBattleAnimArgs[6])
+ {
+ r10 = 0;
+ sp4 = 1;
+ }
+ else
+ {
+ r10 = 2;
+ sp4 = 3;
+ }
+
+ if (GetBattlerSide(battler1) != B_SIDE_PLAYER)
+ {
+ r9 = GetBattlerSpriteCoord(battler1, r10) + gBattleAnimArgs[0];
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(battler2)))
+ sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler2)]].subpriority - 1;
+ else
+ sprite->subpriority = gSprites[gBattlerSpriteIds[battler2]].subpriority - 1;
+ }
+ else
+ {
+ r9 = GetBattlerSpriteCoord(battler1, r10) - gBattleAnimArgs[0];
+ if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler1)))
+ {
+ if (gSprites[gBattlerSpriteIds[battler1]].pos1.x < gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].pos1.x)
+ sprite->subpriority = gSprites[gBattlerSpriteIds[BATTLE_PARTNER(battler1)]].subpriority + 1;
+ else
+ sprite->subpriority = gSprites[gBattlerSpriteIds[battler1]].subpriority - 1;
+ }
+ else
+ {
+ sprite->subpriority = gSprites[gBattlerSpriteIds[battler1]].subpriority - 1;
+ }
+
+ }
+
+ r6 = GetBattlerSpriteCoord(battler1, sp4) + gBattleAnimArgs[1];
+ if (!IsContest() && IsBattlerSpriteVisible(BATTLE_PARTNER(battler2)))
+ {
+ SetAverageBattlerPositions(battler2, gBattleAnimArgs[6], &sp0, &sp1);
+ }
+ else
+ {
+ sp0 = GetBattlerSpriteCoord(battler2, r10);
+ sp1 = GetBattlerSpriteCoord(battler2, sp4);
+ }
+
+ if (GetBattlerSide(battler2))
+ sp0 += gBattleAnimArgs[3];
+ else
+ sp0 -= gBattleAnimArgs[3];
+
+ sp1 += gBattleAnimArgs[4];
+ sprite->pos1.x = sprite->data[1] = r9;
+ sprite->pos1.y = sprite->data[3] = r6;
+ sprite->data[2] = sp0;
+ sprite->data[4] = sp1;
+ sprite->data[0] = gBattleAnimArgs[0];
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_8105284;
+ sprite->callback(sprite);
+}
+
+void sub_81054E8(struct Sprite *sprite)
+{
+ u8 index = IndexOfSpritePaletteTag(ANIM_TAG_THIN_RING);
+ if (index != 0xFF)
+ {
+ BlendPalette(((index << 20) + 0x1010000) >> 16, 15, gBattleAnimArgs[5], gBattleAnimArgs[4]);
+ }
+
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_80A77C8;
+ sprite->callback(sprite);
+}
+
+void sub_8105538(struct Sprite *sprite)
+{
+ s16 r1;
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ r1 = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? -160 : 160;
+ sprite->data[0] = 0x380;
+ sprite->data[1] = r1;
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->callback = sub_810557C;
+}
+
+static void sub_810557C(struct Sprite *sprite)
+{
+ s16 add;
+ sprite->pos2.y -= (sprite->data[0] >> 8);
+ sprite->pos2.x = sprite->data[1] >> 8;
+ sprite->data[0] -= 32;
+ add = GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER ? -160 : 160;
+ sprite->data[1] += add;
+ if (sprite->pos2.y > 0)
+ {
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 0;
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = sub_81055F4;
+ }
+}
+
+static void sub_81055F4(struct Sprite *sprite)
+{
+ if (sprite->data[0]++ > 19)
+ {
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->callback = sub_810561C;
+ }
+}
+
+static void sub_810561C(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[0] = 0;
+ if (sprite->data[7] == 0)
+ {
+ sprite->oam.tileNum += 16;
+ sprite->callback = sub_8105694;
+ }
+ else
+ {
+ sprite->oam.tileNum += 32;
+ sprite->callback = sub_810571C;
+ }
+ }
+}
+
+static void sub_8105694(struct Sprite *sprite)
+{
+ sprite->pos2.y -= 2;
+ if (++sprite->data[0] == 9)
+ {
+ sprite->data[0] = 16;
+ sprite->data[1] = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND((u16)sprite->data[0], 0));
+ sprite->callback = sub_81056D4;
+ }
+}
+
+static void sub_81056D4(struct Sprite *sprite)
+{
+ if (sprite->data[1]++ % 3 == 0)
+ {
+ sprite->data[0]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
+ if (sprite->data[0] == 0)
+ sprite->callback = sub_810571C;
+ }
+}
+
+static void sub_810571C(struct Sprite *sprite)
+{
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ {
+ sprite->invisible = 1;
+ if (sprite->data[7] == 0)
+ sprite->callback = sub_810575C;
+ else
+ sprite->callback = DestroyAnimSprite;
+ }
+}
+
+static void sub_810575C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810577C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[0] = spriteId;
+ PrepareAffineAnimInTaskData(task, spriteId, gUnknown_085938B0);
+ task->func = sub_81057B8;
+}
+
+static void sub_81057B8(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ gSprites[task->data[0]].pos2.y = 0;
+ gSprites[task->data[0]].invisible = 1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_8105810(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[12] = 3;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ task->data[13] = 0xFFFF;
+ task->data[14] = 8;
+ }
+ else
+ {
+ task->data[13] = 1;
+ task->data[14] = -8;
+ }
+
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_TARGET);
+ task->func = sub_8105878;
+}
+
+static void sub_8105878(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ gSprites[task->data[15]].pos2.x += task->data[14];
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.x += 6;
+ else
+ gSprites[task->data[15]].pos2.x -= 6;
+
+ if (++task->data[3] > 4)
+ {
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.x -= 6;
+
+ task->data[0]++;
+ }
+ }
+ break;
+ case 2:
+ if (--task->data[12] != 0)
+ task->data[0] = 0;
+ else
+ task->data[0]++;
+ break;
+ case 3:
+ gSprites[task->data[15]].pos2.x += task->data[13];
+ if (gSprites[task->data[15]].pos2.x == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_810599C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 1;
+ task->data[13] = 14;
+ task->data[14] = 2;
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->func = sub_81059E0;
+}
+
+static void sub_81059E0(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ if (task->data[0] == 0 && ++task->data[1] > task->data[4])
+ {
+ task->data[1] = 0;
+ if (++task->data[2] & 1)
+ gSprites[task->data[15]].invisible = 0;
+ else
+ gSprites[task->data[15]].invisible = 1;
+
+ if (++task->data[3] >= task->data[13])
+ {
+ if (++task->data[4] < task->data[14])
+ {
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ }
+ else
+ {
+ gSprites[task->data[15]].invisible = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ }
+}
+
+void sub_8105AAC(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[5] = 0;
+ task->data[6] = 0;
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[13] = 0;
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_ATTACKER);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, ANIM_TARGET);
+ task->func = sub_8105B08;
+}
+
+static void sub_8105B08(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ switch (task->data[8])
+ {
+ case 0:
+ if (++task->data[4] > 1)
+ {
+ task->data[4] = 0;
+ task->data[5] = (task->data[5] + 1) & 1;
+ if (++task->data[6] > 20)
+ {
+ if (task->data[7] == 0)
+ {
+ task->data[6] = 0;
+ task->data[8] = 1;
+ }
+ else
+ task->data[8] = 2;
+ }
+ }
+ break;
+ case 1:
+ task->data[5] = 0;
+ if (++task->data[4] > 20)
+ {
+ task->data[7] = 1;
+ task->data[8] = 0;
+ }
+ break;
+ case 2:
+ task->data[5] = 1;
+ break;
+ }
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 4)
+ {
+ u8 spriteId;
+ task->data[1] = 0;
+ spriteId = CreateSprite(&gUnknown_085938DC, task->data[14], task->data[15], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = 13;
+ gSprites[spriteId].pos2.x = gUnknown_085938F4[task->data[2]][0];
+ gSprites[spriteId].pos2.y = gUnknown_085938F4[task->data[2]][1];
+ task->data[13]++;
+ if (++task->data[2] > 3)
+ {
+ task->data[2] = 0;
+ if (++task->data[3] > 5)
+ task->data[0]++;
+ }
+ }
+ }
+ break;
+ case 1:
+ if (task->data[13] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8105C48(struct Sprite *sprite)
+{
+ sprite->invisible = gTasks[sprite->data[0]].data[5];
+ if (sprite->animEnded)
+ {
+ gTasks[sprite->data[0]].data[sprite->data[1]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_8105CB4(u8 taskId)
+{
+ int i;
+ u8 paletteNums[3];
+
+ paletteNums[0] = IndexOfSpritePaletteTag(ANIM_TAG_MUSIC_NOTES_2);
+ for (i = 1; i < 3; i++)
+ paletteNums[i] = AllocSpritePalette(ANIM_SPRITES_START - i);
+
+ gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000);
+ LZDecompressWram(gBattleAnimSpritePalette_206, gMonSpritesGfxPtr->field_17C);
+ for (i = 0; i < 3; i++)
+ LoadPalette(&gMonSpritesGfxPtr->field_17C[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32);
+
+ FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8105D60(u8 taskId)
+{
+ int i;
+ for (i = 0; i < 3; i++)
+ FreeSpritePaletteByTag(gUnknown_08593950[i]);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_8105D88(struct Sprite *sprite, u8 a, u8 b)
+{
+ u8 tile;
+ tile = (b & 1);
+ tile = ((-tile | tile) >> 31) & 32;
+ sprite->oam.tileNum += tile + (a << 2);
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(gUnknown_08593950[b >> 1]);
+}
+
+void sub_8105DE8(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[3];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sub_8105D88(sprite, gBattleAnimArgs[5], gBattleAnimArgs[6]);
+}
+
+void sub_8105E60(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 1)
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+
+ sprite->pos2.x = Sin(sprite->data[1], 8);
+ sprite->pos2.y = sprite->data[2] >> 8;
+ sprite->data[1] = (sprite->data[1] + 7) & 0xFF;
+ sprite->data[2] -= 0x80;
+ if (sprite->data[0] == 60)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8105EB0(u8 taskId)
+{
+ u16 win0h = IsContest() ? 0x98 : 0xF0;
+ u16 win0v = 0;
+
+ gBattle_WIN0H = win0h;
+ gBattle_WIN0V = 0xA0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+ SetGpuReg(REG_OFFSET_WININ, 0x3F1F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x3F3F);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0xC8);
+ SetGpuReg(REG_OFFSET_BLDY, 0x10);
+ gTasks[taskId].data[0] = win0v;
+ gTasks[taskId].data[1] = win0h;
+ gTasks[taskId].func = sub_8105F30;
+}
+
+static void sub_8105F30(u8 taskId)
+{
+ gTasks[taskId].data[0] += 13;
+ gTasks[taskId].data[1] -= 13;
+ if (gTasks[taskId].data[0] >= gTasks[taskId].data[1])
+ {
+ gBattle_WIN0H = 0;
+ gTasks[taskId].func = sub_8105F84;
+ }
+ else
+ {
+ gBattle_WIN0H = gTasks[taskId].data[1] | (gTasks[taskId].data[0] << 8);
+ }
+}
+
+static void sub_8105F84(u8 taskId)
+{
+ if (++gTasks[taskId].data[10] == 5)
+ {
+ gTasks[taskId].data[11] = 0x88;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_LIGHTEN);
+ BlendPalettes(sub_80A75AC(1, 0, 0, 0, 0, 0, 0), 16, RGB(31, 31, 31));
+ }
+ else if (gTasks[taskId].data[10] > 4)
+ {
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_8106020(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+ if (++gTasks[taskId].data[0] == 1)
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(1), gUnknown_08593988);
+ gSprites[spriteId].pos2.x = 4;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_81060B0(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ if (++gTasks[taskId].data[0] == 1)
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_08593988);
+ gSprites[spriteId].pos2.x = 4;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_8106140(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = 95;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_810618C;
+}
+
+static void sub_810618C(struct Sprite *sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.y += Sin(sprite->data[5], 14);
+ sprite->data[5] = (sprite->data[5] + 4) & 0xFF;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81061C4(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.x = sprite->data[4] >> 8;
+ sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ if (sprite->data[3] > 100)
+ sprite->invisible = sprite->data[3] % 2;
+
+ if (sprite->data[3] > 120)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_810624C(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = 160;
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_810627C);
+}
+
+static void sub_810627C(struct Sprite *sprite)
+{
+ s16 y;
+ sprite->data[2] += sprite->data[1];
+ sprite->pos2.y = -((u16)sprite->data[2] >> 8);
+ sprite->pos2.x = Sin(sprite->data[3], 4);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ y = sprite->pos1.y + sprite->pos2.y;
+ if (y <= 72)
+ {
+ sprite->invisible = sprite->data[3] % 2;
+ if (y <= 64)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81062E8(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 3);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ sub_80A6B30(&unknownStruct);
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C232E0, unknownStruct.tilesOffset);
+ sub_80A6D60(&unknownStruct, &gUnknown_08C23D78, 0);
+ LoadCompressedPalette(&gUnknown_08C23D50, unknownStruct.unk8 << 4, 32);
+ gTasks[taskId].func = sub_81063A8;
+}
+
+static void sub_81063A8(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 16)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 141)
+ {
+ gTasks[taskId].data[11] = 16;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 4)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(unknownStruct.bgId);
+ gTasks[taskId].data[12]++;
+ break;
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_81064F8(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ sub_80A6B30(&unknownStruct);
+ if (IsContest())
+ sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFaceContest, 0);
+ else if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
+ sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFacePlayer, 0);
+ else
+ sub_80A6D60(&unknownStruct, &gBattleAnimBackgroundTilemap_ScaryFaceOpponent, 0);
+
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C249F8, unknownStruct.tilesOffset);
+ LoadCompressedPalette(&gUnknown_08C249D0, unknownStruct.unk8 << 4, 32);
+ gTasks[taskId].func = sub_81065EC;
+}
+
+static void sub_81065EC(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[12])
+ {
+ case 0:
+ if (++gTasks[taskId].data[10] == 2)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 14)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 1:
+ if (++gTasks[taskId].data[11] == 21)
+ {
+ gTasks[taskId].data[11] = 14;
+ gTasks[taskId].data[12]++;
+ }
+ break;
+ case 2:
+ if (++gTasks[taskId].data[10] == 2)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11]--;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[11], 16 - gTasks[taskId].data[11]));
+ if (gTasks[taskId].data[11] == 0)
+ {
+ gTasks[taskId].data[12]++;
+ gTasks[taskId].data[11] = 0;
+ }
+ }
+ break;
+ case 3:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(1);
+ sub_80A6C68(2);
+ gTasks[taskId].data[12]++;
+ // fall through
+ case 4:
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+// Orbits a sphere in an ellipse around the mon.
+// Used by MOVE_HIDDEN_POWER
+// arg 0: duration
+// arg 1: initial wave offset
+void AnimOrbitFast(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->affineAnimPaused = 1;
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[7] = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ sprite->callback = AnimOrbitFastStep;
+ sprite->callback(sprite);
+}
+
+static void AnimOrbitFastStep(struct Sprite *sprite)
+{
+ if ((u16)(sprite->data[1] - 64) < 128)
+ sprite->subpriority = sprite->data[7] + 1;
+ else
+ sprite->subpriority = sprite->data[7] - 1;
+
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
+ sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
+ switch (sprite->data[5])
+ {
+ case 1:
+ sprite->data[2] -= 0x400;
+ sprite->data[3] -= 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[5] = 2;
+ return;
+ }
+ break;
+ case 0:
+ sprite->data[2] += 0x400;
+ sprite->data[3] += 0x100;
+ if (++sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[4] = 0;
+ sprite->data[5] = 1;
+ }
+ break;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyAnimSprite(sprite);
+}
+
+// Moves orbs away from the mon, based on where they are in their orbit.
+// Used in MOVE_HIDDEN_POWER.
+// arg 0: initial wave offset
+void AnimOrbitScatter(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
+ sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
+ sprite->callback = AnimOrbitScatterStep;
+}
+
+static void AnimOrbitScatterStep(struct Sprite *sprite)
+{
+ sprite->pos2.x += sprite->data[0];
+ sprite->pos2.y += sprite->data[1];
+ if (sprite->pos1.x + sprite->pos2.x + 16 > 272u || sprite->pos1.y + sprite->pos2.y > 160 || sprite->pos1.y + sprite->pos2.y < -16)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_8106914(struct Sprite *sprite)
+{
+ sprite->pos2.x += sprite->data[0];
+ sprite->pos2.y += sprite->data[1];
+ if (sprite->data[3]++ >= sprite->data[2])
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106944(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = Sin(gBattleAnimArgs[0], 10);
+ sprite->data[1] = Cos(gBattleAnimArgs[0], 7);
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->callback = sub_8106914;
+}
+
+static void sub_810699C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81069B8(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->callback = sub_810699C;
+}
+
+void sub_81069D0(struct Sprite *sprite)
+{
+ s16 var0;
+ if (!sprite->data[0])
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+
+ sprite->data[0]++;
+ var0 = (sprite->data[0] * 10) & 0xFF;
+ sprite->pos2.x = Sin(var0, 80) >> 8;
+ if (sprite->data[0] < 80)
+ sprite->pos2.y = (sprite->data[0] / 2) + (Cos(var0, 80) >> 8);
+
+ if (sprite->data[0] > 90)
+ {
+ sprite->data[2]++;
+ sprite->pos2.x -= sprite->data[2] / 2;
+ }
+
+ if (sprite->data[0] > 100)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_8106A64(struct Sprite *sprite)
+{
+ sprite->data[5]++;
+ sprite->pos2.x = Sin(sprite->data[3], 5);
+ sprite->pos2.y = sprite->data[5] / 2;
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ if (sprite->data[5] > 20)
+ sprite->invisible = sprite->data[5] % 2;
+
+ if (sprite->data[5] > 30)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106AD0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[4] += sprite->data[1];
+ sprite->pos2.x = sprite->data[4] >> 8;
+ sprite->pos2.y = Sin(sprite->data[3], sprite->data[2]);
+ sprite->data[3] = (sprite->data[3] + 3) & 0xFF;
+ if (sprite->data[3] > 70)
+ {
+ sprite->callback = sub_8106A64;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[3] = Random2() % 180;
+ }
+ }
+}
+
+void sub_8106B54(struct Sprite *sprite)
+{
+ if (sprite->data[3] == 0)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ StartSpriteAnim(sprite, 0);
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 1;
+ sprite->data[2] = 1;
+ }
+ sprite->data[0] += sprite->data[2];
+ sprite->data[1] = (sprite->data[0] * 4) % 256;
+ if (sprite->data[1] < 0)
+ sprite->data[1] = 0;
+ sprite->pos2.x = Cos(sprite->data[1], 30 - sprite->data[0] / 4);
+ sprite->pos2.y = Sin(sprite->data[1], 10 - sprite->data[0] / 8);
+ if (sprite->data[1] > 128 && sprite->data[2] > 0)
+ sprite->data[2] = -1;
+ if (sprite->data[1] == 0 && sprite->data[2] < 0)
+ sprite->data[2] = 1;
+ sprite->data[3]++;
+ if (sprite->data[3] < 10 || sprite->data[3] > 80)
+ sprite->invisible = sprite->data[0] % 2;
+ else
+ sprite->invisible = FALSE;
+ if (sprite->data[3] > 90)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106C80(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ StartSpriteAnim(sprite, gBattleAnimArgs[2]);
+ sprite->data[0]++;
+ }
+ else if (sprite->animEnded)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_8106CD0(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[2])
+ {
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ }
+
+ if (!gBattleAnimArgs[1])
+ sprite->pos1.x += 32;
+ else
+ sprite->pos1.x -= 32;
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[1];
+ StartSpriteAnim(sprite, sprite->data[1]);
+ sprite->callback = sub_8106D5C;
+ }
+}
+
+static void sub_8106D5C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ if (--sprite->data[0])
+ StartSpriteAnim(sprite, sprite->data[1]);
+ else
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_8106D90(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ PrepareAffineAnimInTaskData(&gTasks[taskId], spriteId, gUnknown_08593B98);
+ gTasks[taskId].func = sub_8106DD4;
+}
+
+static void sub_8106DD4(u8 taskId)
+{
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8106E00(struct Sprite *sprite)
+{
+ int var1;
+ u8 battler = !gBattleAnimArgs[0] ? gBattleAnimAttacker : gBattleAnimTarget;
+
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[1] *= -1;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3) + gBattleAnimArgs[2];
+ sprite->data[0] = 0;
+ sprite->data[1] = (u16)sprite->pos1.x << 3;
+ sprite->data[2] = (u16)sprite->pos1.y << 3;
+
+ var1 = gBattleAnimArgs[1] << 3;
+ if (var1 < 0)
+ var1 += 7;
+ sprite->data[3] = var1 >> 3;
+
+ var1 = gBattleAnimArgs[2] << 3;
+ if (var1 < 0)
+ var1 += 7;
+ sprite->data[4] = var1 >> 3;
+
+ sprite->oam.tileNum += gBattleAnimArgs[3] * 16;
+ sprite->callback = sub_8106EC8;
+}
+
+static void sub_8106EC8(struct Sprite *sprite)
+{
+ sprite->data[1] += sprite->data[3];
+ sprite->data[2] += sprite->data[4];
+ sprite->pos1.x = sprite->data[1] >> 3;
+ sprite->pos1.y = sprite->data[2] >> 3;
+ if (++sprite->data[0] > 16)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106F00(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->data[1] = 120 - gBattleAnimArgs[0];
+ sprite->invisible = 1;
+ }
+
+ if (++sprite->data[0] == sprite->data[1])
+ SetGreyscaleOrOriginalPalette(sprite->oam.paletteNum + 16, 0);
+
+ if (sprite->data[0] == sprite->data[1] + 80)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8106F60(struct Sprite *sprite)
+{
+ int index;
+ int var2;
+
+ if (!sprite->data[0])
+ {
+ sprite->pos1.x = 120;
+ sprite->pos1.y = (gBattleAnimArgs[0] + (((u16)gBattleAnimArgs[0]) >> 31)) / 2 - 15;
+
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+
+ sprite->data[5] = 120;
+ sprite->data[3] = gBattleAnimArgs[2];
+ }
+
+ sprite->data[0]++;
+
+ sprite->data[1] = (sprite->data[0] + ((u16)sprite->data[0] >> 31)) / 2;
+ index = ((sprite->data[0] * 3) + (u16)sprite->data[3]);
+ var2 = 0xFF;
+ sprite->data[6] = (sprite->data[6] + 10) & 0xFF;
+
+ index &= var2;
+ sprite->pos2.x = Cos(index, 100);
+
+ sprite->pos2.y = sprite->data[1] + Sin(index, 10) + Cos(sprite->data[6], 4);
+
+ if (sprite->data[0] > sprite->data[5])
+ {
+ sprite->callback = sub_8107018;
+
+ sprite->data[0] = 0;
+ oamt_add_pos2_onto_pos1(sprite);
+ sprite->data[2] = 5;
+ sprite->data[4] = 0;
+ sprite->data[3] = 0;
+
+ StartSpriteAffineAnim(sprite, 1);
+ }
+}
+
+static void sub_8107018(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 10)
+ {
+ sprite->data[0] = 0;
+ sprite->callback = sub_810703C;
+ }
+}
+
+static void sub_810703C(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[2];
+ sprite->pos2.y = sprite->data[3];
+
+ sprite->data[2]++;
+
+ if (sprite->data[3] > 48 && sprite->data[2] > 0)
+ {
+ sprite->data[2] = sprite->data[4] - 5;
+ sprite->data[4]++;
+ }
+
+ if (sprite->data[4] > 3)
+ {
+ int var1 = sprite->data[2];
+ sprite->invisible = var1 - (((s32)(var1 + ((u32)var1 >> 31)) >> 1) << 1);
+ DestroyAnimSprite(sprite);
+ }
+
+ if (sprite->data[4] == 4)
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_81070AC(struct Sprite *sprite)
+{
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ {
+ SetAverageBattlerPositions(gBattleAnimAttacker, 0, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->pos1.y += 40;
+
+ StartSpriteAffineAnim(sprite, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 40;
+ }
+
+ sprite->data[0] = 13;
+ sprite->data[2] = sprite->pos1.x;
+ sprite->data[4] = sprite->pos1.y - 72;
+
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void AnimTask_IsFuryCutterHitRight(u8 taskId)
+{
+ gBattleAnimArgs[7] = gAnimDisableStructPtr->furyCutterCounter & 1;
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_GetFuryCutterHitCount(u8 taskId)
+{
+ gBattleAnimArgs[7] = gAnimDisableStructPtr->furyCutterCounter;
+ DestroyAnimVisualTask(taskId);
+}
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
new file mode 100755
index 000000000..d887eeabf
--- /dev/null
+++ b/src/battle_anim_effects_3.c
@@ -0,0 +1,4889 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "bg.h"
+#include "contest.h"
+#include "data2.h"
+#include "decompress.h"
+#include "dma3.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "palette.h"
+#include "pokemon_icon.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/battle_anim.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+
+extern u8 sub_807521C(s16 x, s16 y, u8 a3);
+extern void sub_810E2C8(struct Sprite *);
+
+extern const struct SpriteTemplate gUnknown_08593114;
+extern const union AffineAnimCmd *const gUnknown_082FF6C0[];
+extern const union AffineAnimCmd *const gUnknown_082FF694[];
+
+void sub_815A0D4(struct Sprite *);
+void sub_815A1B0(struct Sprite *);
+void sub_815A254(struct Sprite *);
+void sub_815A2F0(struct Sprite *);
+void sub_815A6C4(struct Sprite *);
+void sub_815A7B0(struct Sprite *);
+void sub_815A7EC(struct Sprite *);
+void sub_815A8AC(struct Sprite *);
+void sub_815A934(struct Sprite *);
+void sub_815AAA4(struct Sprite *);
+void sub_815ABD0(struct Sprite *);
+void sub_815ACD0(struct Sprite *);
+void sub_815B27C(struct Sprite *);
+void sub_815B394(struct Sprite *);
+void sub_815B49C(struct Sprite *);
+void sub_815B570(struct Sprite *);
+void sub_815B70C(struct Sprite *);
+void sub_815BE04(struct Sprite *);
+void sub_815C400(struct Sprite *);
+void sub_815C6B0(struct Sprite *);
+void sub_815C95C(struct Sprite *);
+void sub_815CB88(struct Sprite *);
+void sub_815CC94(struct Sprite *);
+void sub_815CDB4(struct Sprite *);
+void sub_815D7B4(struct Sprite *);
+void sub_815D870(struct Sprite *);
+void sub_815DEBC(struct Sprite *);
+void sub_815E01C(struct Sprite *);
+void sub_815E404(struct Sprite *);
+void sub_815E444(struct Sprite *);
+void sub_815E6D8(struct Sprite *);
+void sub_815E954(struct Sprite *);
+void sub_815EA14(struct Sprite *);
+void sub_815EE84(struct Sprite *);
+void sub_815F18C(struct Sprite *);
+void sub_815F48C(struct Sprite *);
+void sub_815FE80(struct Sprite *);
+void sub_81061C4(struct Sprite *);
+void sub_8160338(struct Sprite *);
+void sub_81603A8(struct Sprite *);
+static void sub_815A114(struct Sprite *);
+static void sub_815A1F4(struct Sprite *);
+static void sub_815A234(struct Sprite *);
+static void sub_815A31C(struct Sprite *);
+static void sub_815A3AC(struct Sprite *);
+static void sub_815A3F0(struct Sprite *);
+static void sub_815A49C(struct Sprite *);
+static void sub_815A52C(u8);
+static void sub_815A5F0(u8);
+static void sub_815A73C(struct Sprite *);
+static void sub_815A76C(struct Sprite *);
+static void sub_815A9A0(struct Sprite *);
+static void sub_815AA6C(struct Sprite *);
+static void sub_815AB5C(struct Sprite *);
+static void sub_815AD4C(struct Sprite *);
+static void sub_815AED8(u8);
+static void sub_815B054(u8);
+static void sub_815B23C(struct Sprite *);
+static void sub_815B4D4(struct Sprite *);
+static void sub_815B5D0(struct Sprite *);
+static void sub_815BF44(struct Sprite *);
+static void sub_815BFF4(struct Sprite *);
+static void sub_815C050(struct Sprite *);
+static void sub_815C548(u8);
+static void sub_815C700(struct Sprite *);
+static void sub_815C7C4(u8);
+static void sub_815CC34(struct Sprite *);
+static void sub_815CD0C(struct Sprite *);
+static void sub_815CDFC(struct Sprite *);
+static void sub_815D1BC(u8);
+static void sub_815D398(u8);
+static void sub_815D694(u8);
+static void sub_815D804(struct Sprite *);
+static void sub_815DD48(u8);
+static void sub_815DDE0(u8, bool8);
+static void sub_815DF64(u8);
+static void sub_815E0DC(struct Sprite *);
+static void sub_815E20C(u8);
+static void sub_815E34C(s16, s16, s16, s16, u8, u8, s16 *, s16 *);
+static void sub_815E5CC(u8);
+static void sub_815E784(struct Sprite *);
+static void sub_815E898(u8);
+static void sub_815E9BC(struct Sprite *);
+static void sub_815EA60(struct Sprite *);
+static void sub_815ECE4(u8);
+static void sub_815EF08(struct Sprite *);
+static void sub_815F330(u8);
+static void sub_815F4F0(struct Sprite *);
+static void sub_815F79C(u8);
+static void sub_815F7C4(struct Sprite *);
+
+const union AnimCmd gUnknown_085CE004[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE01C[] =
+{
+ gUnknown_085CE004,
+};
+
+const struct SpriteTemplate gUnknown_085CE020 =
+{
+ .tileTag = ANIM_TAG_SCRATCH,
+ .paletteTag = ANIM_TAG_SCRATCH,
+ .oam = &gUnknown_08524A34,
+ .anims = gUnknown_085CE01C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_085CE038 =
+{
+ .tileTag = ANIM_TAG_BLACK_SMOKE,
+ .paletteTag = ANIM_TAG_BLACK_SMOKE,
+ .oam = &gUnknown_08524934,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A0D4,
+};
+
+const struct SpriteTemplate gUnknown_085CE050 =
+{
+ .tileTag = ANIM_TAG_BLACK_BALL,
+ .paletteTag = ANIM_TAG_BLACK_BALL,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A78AC,
+};
+
+const union AnimCmd gUnknown_085CE068[] =
+{
+ ANIMCMD_FRAME(0, 40),
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_FRAME(32, 40),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE078[] =
+{
+ gUnknown_085CE068,
+};
+
+const struct SpriteTemplate gUnknown_085CE07C =
+{
+ .tileTag = ANIM_TAG_OPENING_EYE,
+ .paletteTag = ANIM_TAG_OPENING_EYE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE078,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const struct SpriteTemplate gUnknown_085CE094 =
+{
+ .tileTag = ANIM_TAG_ROUND_WHITE_HALO,
+ .paletteTag = ANIM_TAG_ROUND_WHITE_HALO,
+ .oam = &gUnknown_08524A3C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A1B0,
+};
+
+const struct SpriteTemplate gUnknown_085CE0AC =
+{
+ .tileTag = ANIM_TAG_TEAL_ALERT,
+ .paletteTag = ANIM_TAG_TEAL_ALERT,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A254,
+};
+
+const union AffineAnimCmd gUnknown_085CE0C4[] =
+{
+ AFFINEANIMCMD_FRAME(0x180, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x20, 0x18, 0, 5),
+ AFFINEANIMCMD_FRAME(0x18, -0x20, 0, 5),
+ AFFINEANIMCMD_JUMP(1),
+};
+
+const union AffineAnimCmd gUnknown_085CE0E4[] =
+{
+ AFFINEANIMCMD_FRAME(0x30, 0x30, 0, 0),
+ AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE0FC[] =
+{
+ gUnknown_085CE0C4,
+ gUnknown_085CE0E4,
+};
+
+const struct SpriteTemplate gUnknown_085CE104 =
+{
+ .tileTag = ANIM_TAG_EYE,
+ .paletteTag = ANIM_TAG_EYE,
+ .oam = &gUnknown_08524AFC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE0FC,
+ .callback = sub_815A2F0,
+};
+
+const struct SpriteTemplate gUnknown_085CE11C =
+{
+ .tileTag = ANIM_TAG_SPIKES,
+ .paletteTag = ANIM_TAG_SPIKES,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A6C4,
+};
+
+const union AnimCmd gUnknown_085CE134[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE14C[] =
+{
+ gUnknown_085CE134,
+};
+
+const struct SpriteTemplate gUnknown_085CE150 =
+{
+ .tileTag = ANIM_TAG_LEER,
+ .paletteTag = ANIM_TAG_LEER,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE14C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815A7B0,
+};
+
+const union AnimCmd gUnknown_085CE168[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE170[] =
+{
+ gUnknown_085CE168,
+};
+
+const union AffineAnimCmd gUnknown_085CE174[] =
+{
+ AFFINEANIMCMD_FRAME(-7, -7, -3, 16),
+ AFFINEANIMCMD_FRAME(7, 7, 3, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE18C[] =
+{
+ gUnknown_085CE174,
+};
+
+const struct SpriteTemplate gUnknown_085CE190 =
+{
+ .tileTag = ANIM_TAG_LETTER_Z,
+ .paletteTag = ANIM_TAG_LETTER_Z,
+ .oam = &gUnknown_08524974,
+ .anims = gUnknown_085CE170,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE18C,
+ .callback = sub_815A7EC,
+};
+
+const union AnimCmd gUnknown_085CE1A8[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(16, 16),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE1BC[] =
+{
+ gUnknown_085CE1A8,
+};
+
+const union AffineAnimCmd gUnknown_085CE1C0[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x20, -0x20, 0, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE1D8[] =
+{
+ gUnknown_085CE1C0,
+};
+
+const struct SpriteTemplate gUnknown_085CE1DC =
+{
+ .tileTag = ANIM_TAG_FANG_ATTACK,
+ .paletteTag = ANIM_TAG_FANG_ATTACK,
+ .oam = &gUnknown_085249D4,
+ .anims = gUnknown_085CE1BC,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE1D8,
+ .callback = sub_815A8AC,
+};
+
+const union AffineAnimCmd gUnknown_085CE1F4[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(0x10, 0x0, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE20C[] =
+{
+ AFFINEANIMCMD_FRAME(0x140, 0x180, 0, 0),
+ AFFINEANIMCMD_FRAME(-0x10, 0x0, 0, 19),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE224[] =
+{
+ gUnknown_085CE1F4,
+ gUnknown_085CE20C,
+};
+
+const struct SpriteTemplate gUnknown_085CE22C =
+{
+ .tileTag = ANIM_TAG_SPOTLIGHT,
+ .paletteTag = ANIM_TAG_SPOTLIGHT,
+ .oam = &gUnknown_085249DC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE224,
+ .callback = sub_815A934,
+};
+
+const struct SpriteTemplate gUnknown_085CE244 =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815AAA4,
+};
+
+const struct SpriteTemplate gUnknown_085CE25C =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815ABD0,
+};
+
+const union AnimCmd gUnknown_085CE274[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_085CE284[] =
+{
+ gUnknown_085CE274,
+};
+
+const struct SpriteTemplate gUnknown_085CE288 =
+{
+ .tileTag = ANIM_TAG_RAPID_SPIN,
+ .paletteTag = ANIM_TAG_RAPID_SPIN,
+ .oam = &gUnknown_08524934,
+ .anims = gUnknown_085CE284,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815ACD0,
+};
+
+const union AffineAnimCmd gUnknown_085CE2A0[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
+ AFFINEANIMCMD_FRAME(20, -20, 0, 4),
+ AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
+ AFFINEANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085CE2C0[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE2C8[] =
+{
+ gUnknown_085CE2C0,
+};
+
+const union AffineAnimCmd gUnknown_085CE2CC[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 5, 40),
+ AFFINEANIMCMD_FRAME(0, 0, 10, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 15, 10),
+ AFFINEANIMCMD_FRAME(0, 0, 20, 40),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE2F4[] =
+{
+ gUnknown_085CE2CC,
+};
+
+const struct SpriteTemplate gUnknown_085CE2F8 =
+{
+ .tileTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
+ .paletteTag = ANIM_TAG_TRI_FORCE_TRIANGLE,
+ .oam = &gUnknown_085249DC,
+ .anims = gUnknown_085CE2C8,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE2F4,
+ .callback = sub_815B27C,
+};
+
+const union AnimCmd gUnknown_085CE310[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
+ ANIMCMD_LOOP(1),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE334[] =
+{
+ gUnknown_085CE310,
+};
+
+const struct SpriteTemplate gUnknown_085CE338 =
+{
+ .tileTag = ANIM_TAG_ECLIPSING_ORB,
+ .paletteTag = ANIM_TAG_ECLIPSING_ORB,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE334,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80A77C8,
+};
+
+const union AffineAnimCmd gUnknown_085CE350[] =
+{
+ AFFINEANIMCMD_FRAME(-12, 20, 0, 8),
+ AFFINEANIMCMD_FRAME(12, -20, 0, 8),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE370 =
+{
+ .tileTag = ANIM_TAG_POKEBALL,
+ .paletteTag = ANIM_TAG_POKEBALL,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B394,
+};
+
+const struct SpriteTemplate gUnknown_085CE388 =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B49C,
+};
+
+const struct SpriteTemplate gUnknown_085CE3A0 =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B570,
+};
+
+const union AffineAnimCmd gUnknown_085CE3B8[] =
+{
+ AFFINEANIMCMD_FRAME(8, -8, 0, 12),
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 12),
+ AFFINEANIMCMD_FRAME(8, -8, 0, 12),
+ AFFINEANIMCMD_LOOP(1),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE3E0[] =
+{
+ AFFINEANIMCMD_FRAME(0, 6, 0, 20),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 20),
+ AFFINEANIMCMD_FRAME(0, -18, 0, 6),
+ AFFINEANIMCMD_FRAME(-18, -18, 0, 3),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 15),
+ AFFINEANIMCMD_FRAME(4, 4, 0, 13),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE418 =
+{
+ .tileTag = ANIM_TAG_BLUE_ORB,
+ .paletteTag = ANIM_TAG_BLUE_ORB,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815B70C,
+};
+
+const union AffineAnimCmd gUnknown_085CE430[] =
+{
+ AFFINEANIMCMD_FRAME(0, 6, 0, 20),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 20),
+ AFFINEANIMCMD_FRAME(7, -30, 0, 6),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 20),
+ AFFINEANIMCMD_FRAME(-2, 3, 0, 20),
+ AFFINEANIMCMD_END,
+};
+
+const s8 gUnknown_085CE460[] =
+{
+ 0xE8,
+ 0x18,
+ 0xFC,
+ 0x00,
+};
+
+const union AnimCmd gUnknown_085CE464[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(4, 6),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE470[] =
+{
+ ANIMCMD_FRAME(8, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gUnknown_085CE478[] =
+{
+ ANIMCMD_FRAME(12, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE480[] =
+{
+ gUnknown_085CE464,
+ gUnknown_085CE470,
+ gUnknown_085CE478,
+};
+
+const struct SpriteTemplate gUnknown_085CE48C =
+{
+ .tileTag = ANIM_TAG_GREEN_STAR,
+ .paletteTag = ANIM_TAG_GREEN_STAR,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085CE480,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815BE04,
+};
+
+const s8 gUnknown_085CE4A4[] =
+{
+ 0x78,
+ 0x50,
+ 0x28,
+ 0x00,
+};
+
+const u8 gUnknown_085CE4A8[] =
+{
+ 0,
+ 0,
+ 0,
+ 0,
+ 50,
+};
+
+const union AffineAnimCmd gUnknown_085CE4B0[] =
+{
+ AFFINEANIMCMD_FRAME(0, -15, 0, 7),
+ AFFINEANIMCMD_FRAME(0, 15, 0, 7),
+ AFFINEANIMCMD_LOOP(2),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE4D0 =
+{
+ .tileTag = ANIM_TAG_ANGER,
+ .paletteTag = ANIM_TAG_ANGER,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815C400,
+};
+
+const union AnimCmd gUnknown_085CE4E8[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(3, 8, .vFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .vFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .vFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .vFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE50C[] =
+{
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .vFlip = TRUE, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE530[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE538[] =
+{
+ gUnknown_085CE4E8,
+ gUnknown_085CE50C,
+ gUnknown_085CE530,
+};
+
+const struct SpriteTemplate gUnknown_085CE544 =
+{
+ .tileTag = ANIM_TAG_PINK_PETAL,
+ .paletteTag = ANIM_TAG_PINK_PETAL,
+ .oam = &gUnknown_08524904,
+ .anims = gUnknown_085CE538,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815C6B0,
+};
+
+const u16 gUnknown_085CE55C[] = INCBIN_U16("graphics/unknown/unknown_85CE55C.gbapal");
+
+const union AnimCmd gUnknown_085CE57C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(4, 9),
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE58C[] =
+{
+ gUnknown_085CE57C,
+};
+
+const struct SpriteTemplate gUnknown_085CE590 =
+{
+ .tileTag = ANIM_TAG_PAIN_SPLIT,
+ .paletteTag = ANIM_TAG_PAIN_SPLIT,
+ .oam = &gUnknown_0852490C,
+ .anims = gUnknown_085CE58C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815C95C,
+};
+
+const struct SpriteTemplate gUnknown_085CE5A8 =
+{
+ .tileTag = ANIM_TAG_CONFETTI,
+ .paletteTag = ANIM_TAG_CONFETTI,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815CB88,
+};
+
+const struct SpriteTemplate gUnknown_085CE5C0 =
+{
+ .tileTag = ANIM_TAG_SPOTLIGHT,
+ .paletteTag = ANIM_TAG_SPOTLIGHT,
+ .oam = &gUnknown_085249DC,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE224,
+ .callback = sub_815CC94,
+};
+
+const struct SpriteTemplate gBattleAnimSpriteTemplate_85CE5D8 =
+{
+ .tileTag = ANIM_TAG_BLUE_ORB,
+ .paletteTag = ANIM_TAG_BLUE_ORB,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815CDB4,
+};
+
+const union AffineAnimCmd gUnknown_085CE5F0[] =
+{
+ AFFINEANIMCMD_FRAME(16, 0, 0, 4),
+ AFFINEANIMCMD_FRAME(0, -3, 0, 16),
+ AFFINEANIMCMD_FRAME(4, 0, 0, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(-5, 3, 0, 16),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE620[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE640[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 8),
+ AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE660[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 8),
+ AFFINEANIMCMD_FRAME(-8, -8, 0, 8),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE680[] =
+{
+ gUnknown_085CE620,
+ gUnknown_085CE640,
+ gUnknown_085CE660,
+};
+
+const struct SpriteTemplate gUnknown_085CE68C =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_PINK_CLOUD,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE680,
+ .callback = sub_815D7B4,
+};
+
+const union AffineAnimCmd gUnknown_085CE6A4[] =
+{
+ AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
+ AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
+ AFFINEANIMCMD_FRAME(4, 6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE6C4[] =
+{
+ AFFINEANIMCMD_FRAME(0xC0, 0xC0, 0, 0),
+ AFFINEANIMCMD_FRAME(4, 6, 0, 16),
+ AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE6E4[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(4, 6, 0, 16),
+ AFFINEANIMCMD_FRAME(-4, -6, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd gUnknown_085CE704[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 10, 0, 30),
+ AFFINEANIMCMD_FRAME(-8, -10, 0, 16),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE724[] =
+{
+ gUnknown_085CE6A4,
+ gUnknown_085CE6C4,
+ gUnknown_085CE6E4,
+ gUnknown_085CE704,
+};
+
+const struct SpriteTemplate gUnknown_085CE734 =
+{
+ .tileTag = ANIM_TAG_PINK_CLOUD,
+ .paletteTag = ANIM_TAG_PINK_CLOUD,
+ .oam = &gUnknown_085249D4,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE724,
+ .callback = sub_815D870,
+};
+
+const union AffineAnimCmd gUnknown_085CE74C[] =
+{
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
+ AFFINEANIMCMD_FRAME(16, -16, 0, 12),
+ AFFINEANIMCMD_FRAME(-16, 16, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE76C =
+{
+ .tileTag = ANIM_TAG_SWEAT_DROP,
+ .paletteTag = ANIM_TAG_SWEAT_DROP,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815DEBC,
+};
+
+const u16 gUnknown_085CE784[] = INCBIN_U16("graphics/battle_anims/sprites/effect.gbapal");
+
+const union AnimCmd gUnknown_085CE7B4[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd gUnknown_085CE7C0[] =
+{
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(48, 3),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gUnknown_085CE7CC[] =
+{
+ gUnknown_085CE7B4,
+ gUnknown_085CE7C0,
+};
+
+const struct SpriteTemplate gUnknown_085CE7D4 =
+{
+ .tileTag = ANIM_TAG_NOISE_LINE,
+ .paletteTag = ANIM_TAG_NOISE_LINE,
+ .oam = &gUnknown_08524914,
+ .anims = gUnknown_085CE7CC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E01C,
+};
+
+const struct SpriteTemplate gUnknown_085CE7EC =
+{
+ .tileTag = ANIM_TAG_SMALL_RED_EYE,
+ .paletteTag = ANIM_TAG_SMALL_RED_EYE,
+ .oam = &gUnknown_08524904,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E404,
+};
+
+const struct SpriteTemplate gUnknown_085CE804 =
+{
+ .tileTag = ANIM_TAG_PAW_PRINT,
+ .paletteTag = ANIM_TAG_PAW_PRINT,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E444,
+};
+
+const union AffineAnimCmd gUnknown_085CE81C[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -4, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE82C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 24),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE844[] =
+{
+ gUnknown_085CE81C,
+ gUnknown_085CE82C,
+};
+
+const struct SpriteTemplate gUnknown_085CE84C =
+{
+ .tileTag = ANIM_TAG_RED_BALL,
+ .paletteTag = ANIM_TAG_RED_BALL,
+ .oam = &gUnknown_08524974,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE844,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct SpriteTemplate gUnknown_085CE864 =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E6D8,
+};
+
+const union AffineAnimCmd gUnknown_085CE87C[] =
+{
+ AFFINEANIMCMD_FRAME(0, -16, 0, 6),
+ AFFINEANIMCMD_FRAME(0, 16, 0, 6),
+ AFFINEANIMCMD_END,
+};
+
+const struct SpriteTemplate gUnknown_085CE894 =
+{
+ .tileTag = ANIM_TAG_SMELLINGSALT_EFFECT,
+ .paletteTag = ANIM_TAG_SMELLINGSALT_EFFECT,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815E954,
+};
+
+const struct SpriteTemplate gUnknown_085CE8AC =
+{
+ .tileTag = ANIM_TAG_TAG_HAND,
+ .paletteTag = ANIM_TAG_TAG_HAND,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815EA14,
+};
+
+const struct SpriteTemplate gUnknown_085CE8C4 =
+{
+ .tileTag = ANIM_TAG_MAGNIFYING_GLASS,
+ .paletteTag = ANIM_TAG_MAGNIFYING_GLASS,
+ .oam = &gUnknown_08524A34,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815EE84,
+};
+
+const struct SpriteTemplate gUnknown_085CE8DC =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815F18C,
+};
+
+const struct SpriteTemplate gUnknown_085CE8F4 =
+{
+ .tileTag = ANIM_TAG_GOLD_STARS,
+ .paletteTag = ANIM_TAG_GOLD_STARS,
+ .oam = &gUnknown_0852490C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81061C4,
+};
+
+const struct SpriteTemplate gUnknown_085CE90C =
+{
+ .tileTag = ANIM_TAG_X_SIGN,
+ .paletteTag = ANIM_TAG_X_SIGN,
+ .oam = &gUnknown_0852491C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815F48C,
+};
+
+const struct SpriteTemplate gUnknown_085CE924 =
+{
+ .tileTag = ANIM_TAG_ITEM_BAG,
+ .paletteTag = ANIM_TAG_ITEM_BAG,
+ .oam = &gUnknown_08524914,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_815FE80,
+};
+
+const union AnimCmd gUnknown_085CE93C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gUnknown_085CE948[] =
+{
+ gUnknown_085CE93C,
+};
+
+const union AffineAnimCmd gUnknown_085CE94C[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd gUnknown_085CE964[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 4, 8),
+ AFFINEANIMCMD_END,
+};
+
+const union AffineAnimCmd *const gUnknown_085CE97C[] =
+{
+ gUnknown_085CE94C,
+ gUnknown_085CE964,
+};
+
+const struct SpriteTemplate gUnknown_085CE984 =
+{
+ .tileTag = ANIM_TAG_SLAM_HIT_2,
+ .paletteTag = ANIM_TAG_SLAM_HIT_2,
+ .oam = &gUnknown_0852497C,
+ .anims = gUnknown_085CE948,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE97C,
+ .callback = sub_8160338,
+};
+
+const union AffineAnimCmd gUnknown_085CE99C[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -4, 64),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+const union AffineAnimCmd *const gUnknown_085CE9AC[] =
+{
+ gUnknown_085CE99C,
+};
+
+const struct SpriteTemplate gUnknown_085CE9B0 =
+{
+ .tileTag = ANIM_TAG_RECYCLE,
+ .paletteTag = ANIM_TAG_RECYCLE,
+ .oam = &gUnknown_08524A9C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gUnknown_085CE9AC,
+ .callback = sub_81603A8,
+};
+
+const union AffineAnimCmd gUnknown_085CE9C8[] =
+{
+ AFFINEANIMCMD_FRAME(0, 16, 0, 4),
+ AFFINEANIMCMD_FRAME(-2, 0, 0, 8),
+ AFFINEANIMCMD_FRAME(0, 4, 0, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 24),
+ AFFINEANIMCMD_FRAME(1, -5, 0, 16),
+ AFFINEANIMCMD_END,
+};
+
+void sub_815A0D4(struct Sprite *sprite)
+{
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+
+ if (!gBattleAnimArgs[3])
+ sprite->data[0] = gBattleAnimArgs[2];
+ else
+ sprite->data[0] = -gBattleAnimArgs[2];
+
+ sprite->data[1] = gBattleAnimArgs[4];
+ sprite->callback = sub_815A114;
+}
+
+static void sub_815A114(struct Sprite *sprite)
+{
+ if (sprite->data[1] > 0)
+ {
+ sprite->pos2.x = sprite->data[2] >> 8;
+ sprite->data[2] += sprite->data[0];
+ sprite->invisible ^= 1;
+ sprite->data[1]--;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815A160(u8 taskId)
+{
+ sub_807521C(
+ GetBattlerSpriteCoord(gBattleAnimTarget, 2) + 8,
+ GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 8,
+ 0);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815A1B0(struct Sprite *sprite)
+{
+ sprite->data[0] = 90;
+ sprite->callback = WaitAnimForDuration;
+ sprite->data[1] = 7;
+ StoreSpriteCallbackInData6(sprite, sub_815A1F4);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
+}
+
+static void sub_815A1F4(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], 16 - sprite->data[1]));
+ if (--sprite->data[1] < 0)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_815A234;
+ }
+}
+
+static void sub_815A234(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815A254(struct Sprite *sprite)
+{
+ u16 rotation;
+ u8 x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ u8 y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+
+ InitSpritePosToAnimTarget(sprite, TRUE);
+
+ rotation = ArcTan2Neg(sprite->pos1.x - x, sprite->pos1.y - y);
+ rotation += 0x6000;
+ if (IsContest())
+ rotation += 0x4000;
+
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[2] = x;
+ sprite->data[4] = y;
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_815A2F0(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ sprite->data[0] = 4;
+ sprite->callback = sub_815A31C;
+}
+
+static void sub_815A31C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
+
+ if (sprite->data[1])
+ sprite->data[0]--;
+ else
+ sprite->data[0]++;
+
+ if (sprite->data[0] == 15 || sprite->data[0] == 4)
+ sprite->data[1] ^= 1;
+
+ if (sprite->data[2]++ > 70)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[2] = 0;
+ sprite->invisible = 1;
+ sprite->affineAnimPaused = 1;
+ sprite->callback = sub_815A3AC;
+ }
+}
+
+static void sub_815A3AC(struct Sprite *sprite)
+{
+ if (sprite->data[2]++ > 9)
+ {
+ sprite->invisible = 0;
+ sprite->affineAnimPaused = 0;
+ if (sprite->affineAnimEnded)
+ sprite->callback = sub_815A3F0;
+ }
+}
+
+static void sub_815A3F0(struct Sprite *sprite)
+{
+ switch (sprite->data[3])
+ {
+ case 0:
+ case 1:
+ sprite->pos2.x = 1;
+ sprite->pos2.y = 0;
+ break;
+ case 2:
+ case 3:
+ sprite->pos2.x = -1;
+ sprite->pos2.y = 0;
+ break;
+ case 4:
+ case 5:
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 1;
+ break;
+ case 6:
+ default:
+ sprite->pos2.x = 0;
+ sprite->pos2.y = -1;
+ break;
+ }
+
+ if (++sprite->data[3] > 7)
+ sprite->data[3] = 0;
+
+ if (sprite->data[4]++ > 15)
+ {
+ sprite->data[0] = 16;
+ sprite->data[1] = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 0));
+ sprite->callback = sub_815A49C;
+ }
+}
+
+static void sub_815A49C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[0], 16 - sprite->data[0]));
+
+ if (sprite->data[1]++ > 1)
+ {
+ sprite->data[0]--;
+ sprite->data[1] = 0;
+ }
+
+ if (sprite->data[0] == 0)
+ sprite->invisible = 1;
+
+ if (sprite->data[0] < 0)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815A504(u8 taskId)
+{
+ gTasks[taskId].func = sub_815A52C;
+ gAnimVisualTaskCount--;
+}
+
+static void sub_815A52C(u8 taskId)
+{
+ int i;
+ u16 lastColor;
+ u8 paletteIndex = sub_80A6D94();
+
+ if (++gTasks[taskId].data[5] == 4)
+ {
+ lastColor = gPlttBufferFaded[paletteIndex * 16 + 11];
+ for (i = 10; i > 0; i--)
+ gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i];
+
+ gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor;
+ gTasks[taskId].data[5] = 0;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyTask(taskId);
+}
+
+void sub_815A5C8(u8 taskId)
+{
+ gTasks[taskId].func = sub_815A5F0;
+ gAnimVisualTaskCount--;
+}
+
+static void sub_815A5F0(u8 taskId)
+{
+ int i;
+ u16 lastColor;
+ u8 paletteIndex = sub_80A6D94();
+
+ if (++gTasks[taskId].data[5] == 4)
+ {
+ lastColor = gPlttBufferFaded[paletteIndex * 16 + 11];
+ for (i = 10; i > 0; i--)
+ gPlttBufferFaded[paletteIndex * 16 + i + 1] = gPlttBufferFaded[paletteIndex * 16 + i];
+ gPlttBufferFaded[paletteIndex * 16 + 1] = lastColor;
+
+ lastColor = gPlttBufferUnfaded[paletteIndex * 16 + 11];
+ for (i = 10; i > 0; i--)
+ gPlttBufferUnfaded[paletteIndex * 16 + i + 1] = gPlttBufferUnfaded[paletteIndex * 16 + i];
+ gPlttBufferUnfaded[paletteIndex * 16 + 1] = lastColor;
+
+ gTasks[taskId].data[5] = 0;
+ }
+
+ if ((u16)gBattleAnimArgs[7] == 0xFFFF)
+ DestroyTask(taskId);
+}
+
+void sub_815A6C4(struct Sprite *sprite)
+{
+ u16 x;
+ u16 y;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &x, &y);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = x + gBattleAnimArgs[2];
+ sprite->data[4] = y + gBattleAnimArgs[3];
+ sprite->data[5] = -50;
+
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_815A73C;
+}
+
+static void sub_815A73C(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ sprite->data[0] = 30;
+ sprite->data[1] = 0;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_815A76C);
+ }
+}
+
+static void sub_815A76C(struct Sprite *sprite)
+{
+ if (sprite->data[1] & 1)
+ sprite->invisible ^= 1;
+
+ if (++sprite->data[1] == 16)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815A7B0(struct Sprite *sprite)
+{
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+// This is likely fakematching due to some strange type casting behavior.
+void sub_815A7EC(struct Sprite *sprite)
+{
+ int var0;
+ int var1;
+ if (sprite->data[0] == 0)
+ {
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
+ if (!IsContest())
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ }
+ else
+ {
+ var1 = -gBattleAnimArgs[2];
+ sprite->data[1] = var1;
+ var1 = -gBattleAnimArgs[3];
+ sprite->data[2] = var1;
+ }
+ }
+ else
+ {
+ var1 = -gBattleAnimArgs[2];
+ sprite->data[1] = var1;
+ sprite->data[2] = gBattleAnimArgs[3];
+ }
+ }
+
+ sprite->data[0]++;
+ var0 = (sprite->data[0] * 20) & 0xFF;
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ sprite->pos2.x = (sprite->data[3] + (s32)((u32)sprite->data[3] >> 31)) >> 1;
+ sprite->pos2.y = Sin(var0 & 0xFF, 5) + ((s32)(sprite->data[4] + ((u32)sprite->data[4] >> 31)) >> 1);
+
+ if ((u16)(sprite->pos1.x + sprite->pos2.x) > 240)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815A8AC(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void AnimTask_IsTargetPlayerSide(u8 taskId)
+{
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[7] = 0;
+ else
+ gBattleAnimArgs[7] = 1;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void AnimTask_IsHealingMove(u8 taskId)
+{
+ if (gAnimMoveDmg > 0)
+ gBattleAnimArgs[7] = 0;
+ else
+ gBattleAnimArgs[7] = 1;
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815A934(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+
+ InitSpritePosToAnimTarget(sprite, FALSE);
+
+ sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
+ sprite->invisible = 1;
+ sprite->callback = sub_815A9A0;
+}
+
+static void sub_815A9A0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->invisible = 0;
+ if (sprite->affineAnimEnded)
+ sprite->data[0]++;
+ break;
+ case 1:
+ case 3:
+ sprite->data[1] += 117;
+ sprite->pos2.x = sprite->data[1] >> 8;
+ if (++sprite->data[2] == 21)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1] -= 117;
+ sprite->pos2.x = sprite->data[1] >> 8;
+ if (++sprite->data[2] == 41)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ ChangeSpriteAffineAnim(sprite, 1);
+ sprite->data[0]++;
+ break;
+ case 5:
+ if (sprite->affineAnimEnded)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_815AA6C;
+ }
+ break;
+ }
+}
+
+static void sub_815AA6C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815AAA4(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->oam.tileNum += 16;
+
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->oam.matrixNum = 8;
+ sprite->pos2.x = -12;
+ sprite->data[1] = 2;
+ }
+ else
+ {
+ sprite->pos2.x = 12;
+ sprite->data[1] = -2;
+ }
+
+ sprite->data[0] = gBattleAnimArgs[4];
+
+ if (sprite->data[3] != 255)
+ sprite->data[3] = gBattleAnimArgs[2];
+
+ sprite->callback = sub_815AB5C;
+}
+
+static void sub_815AB5C(struct Sprite *sprite)
+{
+ if (sprite->data[2] == 0)
+ {
+ sprite->pos2.x += sprite->data[1];
+ if (sprite->pos2.x == 0)
+ {
+ sprite->data[2]++;
+ if (sprite->data[3] == 0)
+ {
+ PlaySE1WithPanning(SE_W227, BattleAnimAdjustPanning(-64));
+ }
+ }
+ }
+ else
+ {
+ sprite->pos2.x -= sprite->data[1];
+ if (abs(sprite->pos2.x) == 12)
+ {
+ sprite->data[0]--;
+ sprite->data[2]--;
+ }
+
+ }
+
+ if (sprite->data[0] == 0)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815ABD0(struct Sprite *sprite)
+{
+ sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
+ sprite->data[3] = 255;
+ sub_815AAA4(sprite);
+}
+
+void sub_815ABEC(u8 taskId)
+{
+ if (IsContest())
+ {
+ SetGpuReg(REG_OFFSET_WININ, 0x1F3F);
+ gBattle_WIN1H = 0x98F0;
+ gBattle_WIN1V = 0x00A0;
+ SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN0V);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
+ gBattle_WIN1H = 0x00F0;
+ gBattle_WIN1V = 0x78A0;
+ SetGpuReg(REG_OFFSET_WIN1H, 0x00F0);
+ SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+ }
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815AC8C(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ gBattle_WIN1H = 0;
+ gBattle_WIN1V = 0;
+ if (!IsContest())
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815ACD0(struct Sprite *sprite)
+{
+ int var0;
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
+ }
+
+ sprite->pos2.y = gBattleAnimArgs[2];
+ var0 = 0;
+ if (sprite->pos2.y > gBattleAnimArgs[3])
+ var0 = 1;
+
+ sprite->data[0] = var0;
+ sprite->data[1] = 0;
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->callback = sub_815AD4C;
+}
+
+static void sub_815AD4C(struct Sprite *sprite)
+{
+ sprite->data[1] = (sprite->data[1] + sprite->data[2]) & 0xFF;
+ sprite->pos2.x = gSineTable[sprite->data[1]] >> 4;
+ sprite->pos2.y += sprite->data[3];
+
+ if (sprite->data[0])
+ {
+ if (sprite->pos2.y < sprite->data[4])
+ DestroyAnimSprite(sprite);
+ }
+ else
+ {
+ if (sprite->pos2.y > sprite->data[4])
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815ADB0(u8 taskId)
+{
+ s16 var0;
+ u8 toBG2;
+ s16 var2;
+ int var3;
+ int var4;
+ s16 i;
+ struct ScanlineEffectParams scanlineParams;
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[0])
+ {
+ var0 = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
+ toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
+ }
+ else
+ {
+ var0 = GetBattlerYCoordWithElevation(gBattleAnimTarget);
+ toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
+ }
+
+ task->data[0] = var0 + 36;
+ task->data[1] = task->data[0];
+ task->data[2] = var0 - 33;
+ if (task->data[2] < 0)
+ task->data[2] = 0;
+
+ task->data[3] = task->data[0];
+ task->data[4] = 8;
+ task->data[5] = gBattleAnimArgs[1];
+ task->data[6] = 0;
+ task->data[7] = 0;
+
+ if (toBG2 == 1)
+ {
+ var3 = gBattle_BG1_X;
+ task->data[8] = var3;
+ var4 = var3 + 240;
+ }
+ else
+ {
+ var3 = gBattle_BG2_X;
+ task->data[8] = var3;
+ var4 = var3 + 240;
+ }
+
+ task->data[9] = var4;
+ task->data[10] = gBattleAnimArgs[2];
+
+ if (!gBattleAnimArgs[2])
+ {
+ task->data[11] = var4;
+ var2 = task->data[8];
+ }
+ else
+ {
+ task->data[11] = var3;
+ var2 = task->data[9];
+ }
+
+ task->data[15] = 0;
+
+ i = task->data[2];
+ while (i <= task->data[3])
+ {
+ gScanlineEffectRegBuffers[0][i] = var2;
+ gScanlineEffectRegBuffers[1][i] = var2;
+ i++;
+ }
+
+ if (toBG2 == 1)
+ scanlineParams.dmaDest = &REG_BG1HOFS;
+ else
+ scanlineParams.dmaDest = &REG_BG2HOFS;
+
+ scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ scanlineParams.initState = 1;
+ scanlineParams.unused9 = 0;
+ ScanlineEffect_SetParams(scanlineParams);
+
+ task->func = sub_815AED8;
+}
+
+static void sub_815AED8(u8 taskId)
+{
+ s16 i;
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] -= task->data[5];
+ if (task->data[0] < task->data[2])
+ task->data[0] = task->data[2];
+
+ if (task->data[4] == 0)
+ {
+ task->data[1] -= task->data[5];
+ if (task->data[1] < task->data[2])
+ {
+ task->data[1] = task->data[2];
+ task->data[15] = 1;
+ }
+ }
+ else
+ {
+ task->data[4]--;
+ }
+
+ if (++task->data[6] > 1)
+ {
+ task->data[6] = 0;
+ task->data[7] = task->data[7] == 0 ? 1 : 0;
+
+ if (task->data[7])
+ task->data[12] = task->data[8];
+ else
+ task->data[12] = task->data[9];
+ }
+
+ i = task->data[0];
+ while (i < task->data[1])
+ {
+ gScanlineEffectRegBuffers[0][i] = task->data[12];
+ gScanlineEffectRegBuffers[1][i] = task->data[12];
+ i++;
+ }
+
+ i = task->data[1];
+ while (i <= task->data[3])
+ {
+ gScanlineEffectRegBuffers[0][i] = task->data[11];
+ gScanlineEffectRegBuffers[1][i] = task->data[11];
+ i++;
+ }
+
+ if (task->data[15])
+ {
+ if (task->data[10])
+ gScanlineEffect.state = 3;
+
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815AFF0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[4] = 32;
+ task->data[5] = -20;
+ task->data[6] = 0;
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->func = sub_815B054;
+}
+
+static void sub_815B054(u8 taskId)
+{
+ int var0, var1;
+ s16 x, y;
+ u16 i, j;
+ u8 spriteId;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ var0 = task->data[2];
+ if (task->data[1] & 1)
+ {
+ var1 = task->data[4];
+ x = var0 - var1;
+ }
+ else
+ {
+ var1 = task->data[4];
+ x = var0 + var1;
+ }
+
+ y = task->data[3] + task->data[5];
+ spriteId = CreateSprite(&gUnknown_08593114, x, y, 6 - task->data[1]);
+ PlaySE12WithPanning(SE_W118, BattleAnimAdjustPanning(-64));
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].hFlip = task->data[1] & 1;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ }
+
+ if (task->data[1] & 1)
+ {
+ task->data[4] -= 6;
+ task->data[5] -= 6;
+ }
+
+ PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE2A0);
+ task->data[1]++;
+ task->data[0] = 1;
+ break;
+ case 1:
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ if (task->data[1] == 6)
+ {
+ task->data[6] = 8;
+ task->data[0] = 3;
+ }
+ else
+ {
+ if (task->data[1] <= 2)
+ task->data[6] = 10;
+ else
+ task->data[6] = 0;
+
+ task->data[0] = 2;
+ }
+ }
+ break;
+ case 2:
+ if (task->data[6] != 0)
+ task->data[6]--;
+ else
+ task->data[0] = 0;
+ break;
+ case 3:
+ if (task->data[6] != 0)
+ task->data[6]--;
+ else
+ task->data[0] = 4;
+ break;
+ case 4:
+ for (i = 0, j = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].template == &gUnknown_08593114)
+ {
+ gSprites[i].data[0] = taskId;
+ gSprites[i].data[1] = 6;
+ StartSpriteAnim(&gSprites[i], 2);
+ gSprites[i].callback = sub_815B23C;
+
+ if (++j == 6)
+ break;
+ }
+ }
+
+ task->data[6] = j;
+ task->data[0] = 5;
+ break;
+ case 5:
+ if (task->data[6] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_815B23C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ gTasks[sprite->data[0]].data[sprite->data[1]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_815B27C(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+
+ if (++sprite->data[0] < 40)
+ {
+ u16 var = sprite->data[0];
+ if ((var & 1) == 0)
+ sprite->invisible = 1;
+ else
+ sprite->invisible = 0;
+ }
+
+ if (sprite->data[0] > 30)
+ sprite->invisible = 0;
+
+ if (sprite->data[0] == 61)
+ {
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0] = 20;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->callback = StartAnimLinearTranslation;
+ }
+}
+
+void sub_815B338(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE350);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815B394(struct Sprite *sprite)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+ sprite->data[1] = 256;
+ sprite->data[2] = 256;
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->data[1] += 96;
+ sprite->data[2] -= 26;
+ SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0);
+
+ if (++sprite->data[3] == 5)
+ sprite->data[0]++;
+ // fall through
+ case 2:
+ sprite->data[1] += 96;
+ sprite->data[2] += 48;
+ SetSpriteRotScale(spriteId, sprite->data[1], sprite->data[2], 0);
+
+ if (++sprite->data[3] == 9)
+ {
+ sprite->data[3] = 0;
+ gSprites[spriteId].invisible = 1;
+ ResetSpriteRotScale(spriteId);
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ sprite->pos2.y -= 6;
+ if (sprite->pos1.y + sprite->pos2.y < -32)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815B49C(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x = -16;
+ else
+ sprite->pos1.x = 256;
+
+ sprite->pos1.y = 0;
+ sprite->callback = sub_815B4D4;
+}
+
+static void sub_815B4D4(struct Sprite *sprite)
+{
+ u32 newX;
+
+ sprite->data[0] += 72;
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos2.x = sprite->data[0] >> 4;
+ else
+ sprite->pos2.x = -(sprite->data[0] >> 4);
+
+ sprite->data[1] += 16;
+ sprite->pos2.y += sprite->data[1] >> 8;
+
+ if (++sprite->data[2] % 3 == 0)
+ {
+ CreateSpriteAndAnimate(
+ &gUnknown_085CE3A0,
+ sprite->pos1.x + sprite->pos2.x,
+ sprite->pos1.y + sprite->pos2.y,
+ sprite->subpriority + 1);
+ }
+
+ newX = sprite->pos1.x + sprite->pos2.x + 32;
+ if (newX > 304)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815B570(struct Sprite *sprite)
+{
+ u8 rand;
+ s8 y;
+
+ rand = Random2() & 3;
+ if (rand == 0)
+ sprite->oam.tileNum += 4;
+ else
+ sprite->oam.tileNum += 5;
+
+ y = Random2() & 7;
+ if (y > 3)
+ y = -y;
+
+ sprite->pos2.y = y;
+ sprite->callback = sub_815B5D0;
+}
+
+static void sub_815B5D0(struct Sprite *sprite)
+{
+ if (++sprite->data[0] < 30)
+ {
+ if (++sprite->data[1] == 2)
+ {
+ sprite->invisible ^= 1;
+ sprite->data[1] = 0;
+ }
+ }
+ else
+ {
+ if (sprite->data[1] == 2)
+ sprite->invisible = 0;
+
+ if (sprite->data[1] == 3)
+ {
+ sprite->invisible = 1;
+ sprite->data[1] = -1;
+ }
+
+ sprite->data[1]++;
+ }
+
+ if (sprite->data[0] > 60)
+ DestroySprite(sprite);
+}
+
+void sub_815B65C(u8 taskId)
+{
+ if (!gTasks[taskId].data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3B8);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815B6B4(u8 taskId)
+{
+ if (!gTasks[taskId].data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE3E0);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815B70C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ InitSpritePosToAnimAttacker(sprite, FALSE);
+ sprite->data[1] = 0x900;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ sprite->data[1] -= 96;
+ if (sprite->pos1.y + sprite->pos2.y > sprite->data[2])
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815B778(u8 taskId)
+{
+ if (!gTasks[taskId].data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(ANIM_ATTACKER), gUnknown_085CE430);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815B7D0(u8 taskId)
+{
+ int i, j;
+ u8 position;
+ struct UnknownAnimStruct2 unknownStruct;
+ u8 *dest;
+ u8 *src;
+ u16 *unk4;
+ u16 stretch;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
+ SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 1);
+ else
+ SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 1);
+
+ gTasks[taskId].data[10] = gBattleAnimArgs[0];
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (gTasks[taskId].data[2]++ > 1)
+ {
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[1]++;
+ stretch = gTasks[taskId].data[1];
+ SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch);
+ if (stretch == 15)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]);
+ sub_80A6BFC(&unknownStruct, gBattleAnimAttacker);
+
+ if (IsContest())
+ position = 0;
+ else
+ position = GetBattlerPosition(gBattleAnimAttacker);
+
+ src = gMonSpritesGfxPtr->sprites[position] + (gBattleMonForms[gBattleAnimAttacker] << 11);
+ dest = unknownStruct.bgTiles;
+ CpuCopy32(src, dest, 0x800);
+ LoadBgTiles(1, unknownStruct.bgTiles, 0x800, unknownStruct.tilesOffset);
+ if (IsContest())
+ {
+ if (IsSpeciesNotUnown(gContestResources->field_18->species) != IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ {
+ unk4 = (u16 *)unknownStruct.unk4;
+ for (i = 0; i < 8; i++)
+ {
+ for (j = 0; j < 4; j++)
+ {
+ u16 temp = unk4[j + i * 0x20];
+ unk4[j + i * 0x20] = unk4[(7 - j) + i * 0x20];
+ unk4[(7 - j) + i * 0x20] = temp;
+ }
+ }
+
+ for (i = 0; i < 8; i++)
+ {
+ for (j = 0; j < 8; j++)
+ {
+ unk4[j + i * 0x20] ^= 0x400;
+ }
+ }
+ }
+
+ if (IsSpeciesNotUnown(gContestResources->field_18->unk2))
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
+ else
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF694;
+
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ }
+
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (gTasks[taskId].data[2]++ > 1)
+ {
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[1]--;
+ stretch = gTasks[taskId].data[1];
+ SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 4) | stretch);
+
+ if (stretch == 0)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
+ SetAnimBgAttribute(1, BG_ANIM_MOSAIC, 0);
+ else
+ SetAnimBgAttribute(2, BG_ANIM_MOSAIC, 0);
+
+ if (!IsContest())
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ if (gTasks[taskId].data[10] == 0)
+ SetBattlerShadowSpriteCallback(gBattleAnimAttacker, gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].transformSpecies);
+ }
+ }
+
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815BB18(u8 taskId)
+{
+ gBattleAnimArgs[7] = gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].invisible;
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815BB58(u8 taskId)
+{
+ HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, TRUE);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815BB84(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ sub_80A6B30(&unknownStruct);
+ sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0);
+ if (IsContest())
+ {
+ gBattle_BG1_X = -56;
+ gBattle_BG1_Y = 0;
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattle_BG1_X = -135;
+ else
+ gBattle_BG1_X = -10;
+
+ gBattle_BG1_Y = 0;
+ }
+
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
+ LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
+
+ gTasks[taskId].data[10] = gBattle_BG1_X;
+ gTasks[taskId].data[11] = gBattle_BG1_Y;
+
+ gTasks[taskId].data[0]++;
+ PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
+ break;
+ case 1:
+ if (gTasks[taskId].data[4]++ > 0)
+ {
+ gTasks[taskId].data[4] = 0;
+ if (++gTasks[taskId].data[1] > 12)
+ gTasks[taskId].data[1] = 12;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+
+ if (gTasks[taskId].data[1] == 12)
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ if (--gTasks[taskId].data[1] < 0)
+ gTasks[taskId].data[1] = 0;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+
+ if (!gTasks[taskId].data[1])
+ {
+ gBattle_BG1_X = gUnknown_085CE460[gTasks[taskId].data[2]] + gTasks[taskId].data[10];
+ if (++gTasks[taskId].data[2] == 4)
+ gTasks[taskId].data[0] = 4;
+ else
+ gTasks[taskId].data[0] = 3;
+ }
+ break;
+ case 3:
+ if (++gTasks[taskId].data[3] == 4)
+ {
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[0] = 1;
+ PlaySE12WithPanning(SE_W234, BattleAnimAdjustPanning(-64));
+ }
+ break;
+ case 4:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(unknownStruct.bgId);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815BE04(struct Sprite *sprite)
+{
+ s16 xOffset;
+ u8 spriteId1;
+ u8 spriteId2;
+
+ xOffset = Random2();
+ xOffset &= 0x3F;
+ if (xOffset > 31)
+ xOffset = 32 - xOffset;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + xOffset;
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 32;
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+
+ spriteId1 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ spriteId2 = CreateSprite(&gUnknown_085CE48C, sprite->pos1.x, sprite->pos1.y, sprite->subpriority + 1);
+ StartSpriteAnim(&gSprites[spriteId1], 1);
+ StartSpriteAnim(&gSprites[spriteId2], 2);
+
+ gSprites[spriteId1].data[1] = gBattleAnimArgs[0];
+ gSprites[spriteId1].data[2] = gBattleAnimArgs[1];
+ gSprites[spriteId2].data[1] = gBattleAnimArgs[0];
+ gSprites[spriteId2].data[2] = gBattleAnimArgs[1];
+ gSprites[spriteId1].data[7] = -1;
+ gSprites[spriteId2].data[7] = -1;
+ gSprites[spriteId1].invisible = 1;
+ gSprites[spriteId2].invisible = 1;
+ gSprites[spriteId1].callback = sub_815C050;
+ gSprites[spriteId2].callback = sub_815C050;
+
+ sprite->data[6] = spriteId1;
+ sprite->data[7] = spriteId2;
+ sprite->callback = sub_815BF44;
+}
+
+static void sub_815BF44(struct Sprite *sprite)
+{
+ int var0;
+ s8 var1;
+
+ var0 = (u16)sprite->data[2] + (u16)sprite->data[3];
+ var1 = var0 >> 8;
+ sprite->pos2.y -= var1;
+ sprite->data[3] = var0 & 0xFF;
+ if (sprite->data[4] == 0 && sprite->pos2.y < -8)
+ {
+ gSprites[sprite->data[6]].invisible = 0;
+ sprite->data[4]++;
+ }
+
+ if (sprite->data[4] == 1 && sprite->pos2.y < -16)
+ {
+ gSprites[sprite->data[7]].invisible = 0;
+ sprite->data[4]++;
+ }
+
+ if (--sprite->data[1] == -1)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_815BFF4;
+ }
+}
+
+static void sub_815BFF4(struct Sprite *sprite)
+{
+ if (gSprites[sprite->data[6]].callback == SpriteCallbackDummy
+ && gSprites[sprite->data[7]].callback == SpriteCallbackDummy)
+ {
+ DestroySprite(&gSprites[sprite->data[6]]);
+ DestroySprite(&gSprites[sprite->data[7]]);
+ DestroyAnimSprite(sprite);
+ }
+}
+
+static void sub_815C050(struct Sprite *sprite)
+{
+ u16 d2;
+ register u16 d3 asm("r1");
+ int var0;
+ s8 var1;
+
+ if (!sprite->invisible)
+ {
+ d2 = sprite->data[2];
+ d3 = sprite->data[3];
+ var0 = d2 + d3;
+ var1 = var0 >> 8;
+ sprite->pos2.y -= var1;
+ sprite->data[3] = var0 & 0xFF;
+ if (--sprite->data[1] == -1)
+ {
+ sprite->invisible = 1;
+ sprite->callback = SpriteCallbackDummy;
+ }
+ }
+}
+
+void sub_815C0A4(u8 taskId)
+{
+ struct UnknownAnimStruct2 unknownStruct;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, 13));
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0);
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+
+ sub_80A6B30(&unknownStruct);
+ sub_80A6D60(&unknownStruct, &gUnknown_08C2A6EC, 0);
+ if (IsContest())
+ {
+ gBattle_BG1_X = -56;
+ gBattle_BG1_Y = 0;
+ }
+ else
+ {
+ u8 position = GetBattlerPosition(gBattleAnimTarget);
+ if (IsDoubleBattle() == TRUE)
+ {
+ if (position == B_POSITION_OPPONENT_LEFT)
+ gBattle_BG1_X = -155;
+ if (position == B_POSITION_OPPONENT_RIGHT)
+ gBattle_BG1_X = -115;
+ if (position == B_POSITION_PLAYER_LEFT)
+ gBattle_BG1_X = 14;
+ if (position == B_POSITION_PLAYER_RIGHT)
+ gBattle_BG1_X = -20;
+ }
+ else
+ {
+ if (position == B_POSITION_OPPONENT_LEFT)
+ gBattle_BG1_X = -135;
+ if (position == B_POSITION_PLAYER_LEFT)
+ gBattle_BG1_X = -10;
+ }
+
+ gBattle_BG1_Y = 0;
+ }
+
+ sub_80A6CC0(unknownStruct.bgId, &gUnknown_08C2A634, unknownStruct.tilesOffset);
+ LoadCompressedPalette(&gUnknown_08C2A6D4, unknownStruct.unk8 << 4, 32);
+ gTasks[taskId].data[10] = gBattle_BG1_X;
+ gTasks[taskId].data[11] = gBattle_BG1_Y;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[3] = 0;
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_OPPONENT)
+ gBattle_BG1_X = gTasks[taskId].data[10] + gUnknown_085CE4A4[gTasks[taskId].data[2]];
+ else
+ gBattle_BG1_X = gTasks[taskId].data[10] - gUnknown_085CE4A4[gTasks[taskId].data[2]];
+
+ if (++gTasks[taskId].data[2] == 5)
+ gTasks[taskId].data[0] = 5;
+ else
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ if (--gTasks[taskId].data[1] <= 4)
+ gTasks[taskId].data[1] = 5;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 5)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ if (++gTasks[taskId].data[3] > gUnknown_085CE4A8[gTasks[taskId].data[2]])
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ if (++gTasks[taskId].data[1] > 13)
+ gTasks[taskId].data[1] = 13;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(3, gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 13)
+ gTasks[taskId].data[0] = 1;
+ break;
+ case 5:
+ sub_80A6B30(&unknownStruct);
+ sub_80A6C68(unknownStruct.bgId);
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815C3A8(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], GetAnimBattlerSpriteId(0), gUnknown_085CE4B0);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815C400(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ InitSpritePosToAnimAttacker(sprite, 0);
+ sprite->data[0]++;
+ }
+ else if (sprite->data[0]++ > 20)
+ {
+ sprite->data[1] += 160;
+ sprite->data[2] += 128;
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos2.x = -(sprite->data[1] >> 8);
+ else
+ sprite->pos2.x = sprite->data[1] >> 8;
+
+ sprite->pos2.y += sprite->data[2] >> 8;
+ if (sprite->pos2.y > 64)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815C478(u8 taskId)
+{
+ u8 side;
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[1])
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ if (gBattleAnimArgs[2] < 0)
+ gBattleAnimArgs[2] = 0;
+ if (gBattleAnimArgs[2] > 2)
+ gBattleAnimArgs[2] = 2;
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 8 - (2 * gBattleAnimArgs[2]);
+ task->data[4] = 0x100 + (gBattleAnimArgs[2] * 128);
+ task->data[5] = gBattleAnimArgs[2] + 2;
+ task->data[6] = gBattleAnimArgs[1] - 1;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ if (!gBattleAnimArgs[0])
+ side = GetBattlerSide(gBattleAnimAttacker);
+ else
+ side = GetBattlerSide(gBattleAnimTarget);
+
+ if (side == B_SIDE_OPPONENT)
+ {
+ task->data[4] *= -1;
+ task->data[5] *= -1;
+ }
+
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
+ task->func = sub_815C548;
+}
+
+static void sub_815C548(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ gSprites[task->data[15]].pos2.x += task->data[5];
+ task->data[2] -= task->data[4];
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ if (++task->data[1] >= task->data[3])
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ gSprites[task->data[15]].pos2.x -= task->data[5];
+ task->data[2] += task->data[4];
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ if (++task->data[1] >= task->data[3] * 2)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ gSprites[task->data[15]].pos2.x += task->data[5];
+ task->data[2] -= task->data[4];
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ if (++task->data[1] >= task->data[3])
+ {
+ if (task->data[6])
+ {
+ task->data[6]--;
+ task->data[1] = 0;
+ task->data[0] = 0;
+ }
+ else
+ {
+ task->data[0]++;
+ }
+ }
+ break;
+ case 3:
+ ResetSpriteRotScale(task->data[15]);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815C6B0(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x = 0;
+ sprite->pos1.y = gBattleAnimArgs[0];
+ }
+ else
+ {
+ sprite->pos1.x = 240;
+ sprite->pos1.y = gBattleAnimArgs[0] - 30;
+ }
+
+ sprite->data[2] = gBattleAnimArgs[2];
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ sprite->callback = sub_815C700;
+}
+
+static void sub_815C700(struct Sprite *sprite)
+{
+ sprite->data[0] += 3;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos1.x += 5;
+ sprite->pos1.y -= 1;
+
+ if (sprite->pos1.x > 240)
+ DestroyAnimSprite(sprite);
+
+ sprite->pos2.y = Sin(sprite->data[0] & 0xFF, 16);
+ }
+ else
+ {
+ sprite->pos1.x -= 5;
+ sprite->pos1.y += 1;
+
+ if (sprite->pos1.x < 0)
+ DestroyAnimSprite(sprite);
+
+ sprite->pos2.y = Cos(sprite->data[0] & 0xFF, 16);
+ }
+}
+
+void sub_815C770(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[12] = 0x20;
+ task->data[13] = 0x40;
+ task->data[14] = 0x800;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
+ task->func = sub_815C7C4;
+}
+
+static void sub_815C7C4(u8 taskId)
+{
+ int temp;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[2] += 0x200;
+ if (task->data[2] >= task->data[14])
+ {
+ s16 diff = task->data[14] - task->data[2];
+ s16 div = diff / (task->data[14] * 2);
+ s16 mod = diff % (task->data[14] * 2);
+
+ if ((div & 1) == 0)
+ {
+ task->data[2] = task->data[14] - mod;
+ task->data[0] = 1;
+ }
+ else
+ {
+ task->data[2] = mod - task->data[14];
+ }
+ }
+ break;
+ case 1:
+ task->data[2] -= 0x200;
+ if (task->data[2] <= -task->data[14])
+ {
+ s16 diff = task->data[14] - task->data[2];
+ s16 div = diff / (task->data[14] * 2);
+ s16 mod = diff % (task->data[14] * 2);
+
+ if ((1 & div) == 0)
+ {
+ task->data[2] = mod - task->data[14];
+ task->data[0] = 0;
+ }
+ else
+ {
+ task->data[2] = task->data[14] - mod;
+ }
+ }
+ break;
+ case 2:
+ ResetSpriteRotScale(task->data[15]);
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ SetSpriteRotScale(task->data[15], 0x100, 0x100, task->data[2]);
+ SetBattlerSpriteYOffsetFromRotation(task->data[15]);
+ gSprites[task->data[15]].pos2.x = -(((temp = task->data[2]) >= 0 ? task->data[2] : temp + 63) >> 6);
+
+ if (++task->data[1] > 8)
+ {
+ if (task->data[12])
+ {
+ task->data[12]--;
+ task->data[14] -= task->data[13];
+ if (task->data[14] < 16)
+ task->data[14] = 16;
+ }
+ else
+ {
+ task->data[0] = 2;
+ }
+ }
+}
+
+void sub_815C95C(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ if (!gBattleAnimArgs[2])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ }
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->data[1] = 0x80;
+ sprite->data[2] = 0x300;
+ sprite->data[3] = gBattleAnimArgs[1];
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->pos2.x = sprite->data[1] >> 8;
+ sprite->pos2.y += sprite->data[2] >> 8;
+ if (sprite->data[4] == 0 && sprite->pos2.y > -sprite->data[3])
+ {
+ sprite->data[4] = 1;
+ sprite->data[2] = (-sprite->data[2] / 3) * 2;
+ }
+
+ sprite->data[1] += 192;
+ sprite->data[2] += 128;
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815CA20(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ if (gBattleAnimArgs[0] == 0)
+ gTasks[taskId].data[11] = gBattleAnimAttacker;
+ else
+ gTasks[taskId].data[11] = gBattleAnimTarget;
+
+ spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ gTasks[taskId].data[10] = spriteId;
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL);
+
+ switch (gBattleAnimArgs[1])
+ {
+ case 0:
+ SetSpriteRotScale(spriteId, 0xE0, 0x140, 0);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ break;
+ case 1:
+ SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF00);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.y += 16;
+ break;
+ case 2:
+ SetSpriteRotScale(spriteId, 0xD0, 0x130, 0xF100);
+ SetBattlerSpriteYOffsetFromYScale(spriteId);
+ if (IsContest() || GetBattlerSide(gTasks[taskId].data[11]) == B_SIDE_PLAYER)
+ gSprites[spriteId].pos2.y += 16;
+ break;
+ }
+
+ gSprites[spriteId].pos2.x = 2;
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ spriteId = gTasks[taskId].data[10];
+ if (++gTasks[taskId].data[2] == 3)
+ {
+ gTasks[taskId].data[2] = 0;
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].pos2.x;
+ }
+
+ if (++gTasks[taskId].data[1] == 13)
+ {
+ ResetSpriteRotScale(spriteId);
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_815CB88(struct Sprite *sprite)
+{
+ u8 tileOffset;
+ int rand1;
+ int rand2;
+
+ tileOffset = Random2() % 12;
+ sprite->oam.tileNum += tileOffset;
+ rand1 = Random2() & 0x1FF;
+ rand2 = Random2() & 0xFF;
+
+ if (rand1 & 1)
+ sprite->data[0] = 0x5E0 + rand1;
+ else
+ sprite->data[0] = 0x5E0 - rand1;
+
+ if (rand2 & 1)
+ sprite->data[1] = 0x480 + rand2;
+ else
+ sprite->data[1] = 0x480 - rand2;
+
+ sprite->data[2] = gBattleAnimArgs[0];
+ if (sprite->data[2] == 0)
+ sprite->pos1.x = -8;
+ else
+ sprite->pos1.x = 248;
+
+ sprite->pos1.y = 104;
+ sprite->callback = sub_815CC34;
+}
+
+static void sub_815CC34(struct Sprite *sprite)
+{
+ if (sprite->data[2] == 0)
+ {
+ sprite->pos2.x += sprite->data[0] >> 8;
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ }
+ else
+ {
+ sprite->pos2.x -= sprite->data[0] >> 8;
+ sprite->pos2.y -= sprite->data[1] >> 8;
+ }
+
+ sprite->data[0] -= 22;
+ sprite->data[1] -= 48;
+ if (sprite->data[0] < 0)
+ sprite->data[0] = 0;
+
+ if (++sprite->data[3] == 31)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815CC94(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
+ SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ sprite->oam.objMode = ST_OAM_OBJ_WINDOW;
+ sprite->invisible = 1;
+ sprite->callback = sub_815CD0C;
+}
+
+static void sub_815CD0C(struct Sprite *sprite)
+{
+ switch (sprite->data[1])
+ {
+ case 0:
+ sprite->invisible = 0;
+ if (sprite->affineAnimEnded)
+ sprite->data[1]++;
+ break;
+ case 1:
+ if (--sprite->data[0] == 0)
+ {
+ ChangeSpriteAffineAnim(sprite, 1);
+ sprite->data[1]++;
+ }
+ break;
+ case 2:
+ if (sprite->affineAnimEnded)
+ {
+ sprite->invisible = 1;
+ sprite->data[1]++;
+ }
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815CDB4(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = gBattleAnimArgs[0];
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->callback = sub_815CDFC;
+ sprite->callback(sprite);
+}
+
+static void sub_815CDFC(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[1], sprite->data[2] >> 8);
+ sprite->pos2.y = Cos(sprite->data[1], sprite->data[3] >> 8);
+ sprite->data[1] = (sprite->data[1] + 9) & 0xFF;
+
+ if ((u16)sprite->data[1] < 64 || sprite->data[1] > 195)
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ else
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) + 1;
+
+ if (!sprite->data[5])
+ {
+ sprite->data[2] += 0x400;
+ sprite->data[3] += 0x100;
+ sprite->data[4]++;
+ if (sprite->data[4] == sprite->data[0])
+ {
+ sprite->data[4] = 0;
+ sprite->data[5] = 1;
+ }
+ }
+ else if (sprite->data[5] == 1)
+ {
+ sprite->data[2] -= 0x400;
+ sprite->data[3] -= 0x100;
+ sprite->data[4]++;
+ if (sprite->data[4] == sprite->data[0])
+ DestroyAnimSprite(sprite);
+ }
+}
+
+
+
+extern void sub_815D160(u8);
+
+void sub_815CED8(u8 taskId)
+{
+ u8 isBackPic;
+ u32 personality;
+ u32 otId;
+ u16 species;
+ s16 xOffset;
+ u32 priority;
+ u8 spriteId;
+ s16 coord1, coord2;
+
+ GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ if (IsContest())
+ {
+ isBackPic = 1;
+ personality = gContestResources->field_18->unk10;
+ otId = gContestResources->field_18->unkC;
+ species = gContestResources->field_18->unk2;
+ xOffset = 20;
+ priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ isBackPic = 0;
+ personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID);
+ if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE)
+ {
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ else
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ }
+ else
+ {
+ species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies;
+ }
+
+ xOffset = 20;
+ priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+ }
+ else
+ {
+ isBackPic = 1;
+ personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_PERSONALITY);
+ otId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_OT_ID);
+ if (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies == SPECIES_NONE)
+ {
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ else
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimTarget]], MON_DATA_SPECIES);
+ }
+ else
+ {
+ species = gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].transformSpecies;
+ }
+
+ xOffset = -20;
+ priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+ }
+ }
+
+ coord1 = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ coord2 = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ spriteId = sub_80A8394(species, isBackPic, 0, coord1 + xOffset, coord2, 5, personality, otId, gBattleAnimTarget, 1);
+
+ gSprites[spriteId].oam.priority = priority;
+ gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ FillPalette(RGB(31, 31, 31), (gSprites[spriteId].oam.paletteNum << 4) + 0x100, 32);
+ gSprites[spriteId].oam.priority = priority;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0x3F40);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+
+ gTasks[taskId].data[0] = spriteId;
+ gTasks[taskId].func = sub_815D160;
+}
+
+void sub_815D160(u8 taskId)
+{
+ if (gTasks[taskId].data[10]++ > 1)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[1]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[1], 16 - gTasks[taskId].data[1]));
+ if (gTasks[taskId].data[1] == 10)
+ {
+ gTasks[taskId].data[10] = 256;
+ gTasks[taskId].data[11] = 256;
+ gTasks[taskId].func = sub_815D1BC;
+ }
+ }
+}
+
+static void sub_815D1BC(u8 taskId)
+{
+ u8 spriteId = gTasks[taskId].data[0];
+ gTasks[taskId].data[10] -= 16;
+ gTasks[taskId].data[11] += 128;
+ gSprites[spriteId].oam.affineMode |= ST_OAM_AFFINE_DOUBLE_MASK;
+ TrySetSpriteRotScale(&gSprites[spriteId], TRUE, gTasks[taskId].data[10], gTasks[taskId].data[11], 0);
+ if (++gTasks[taskId].data[12] == 9)
+ {
+ sub_80A749C(&gSprites[spriteId]);
+ sub_80A8610(&gSprites[spriteId]);
+ gTasks[taskId].func = sub_80A6814;
+ }
+}
+
+void sub_815D240(u8 taskId)
+{
+ u8 battler;
+ u16 bgX, bgY;
+ s16 y, i;
+ struct ScanlineEffectParams scanlineParams;
+ struct Task *task = &gTasks[taskId];
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 16;
+ task->data[4] = 0;
+ task->data[5] = battler;
+ task->data[6] = 32;
+ task->data[7] = 0;
+ task->data[8] = 24;
+
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
+ task->data[8] *= -1;
+
+ task->data[13] = GetBattlerYCoordWithElevation(battler) - 34;
+ if (task->data[13] < 0)
+ task->data[13] = 0;
+
+ task->data[14] = task->data[13] + 66;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ if (GetBattlerSpriteBGPriorityRank(battler) == 1)
+ {
+ scanlineParams.dmaDest = &REG_BG1HOFS;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1);
+ bgX = gBattle_BG1_X;
+ bgY = gBattle_BG1_Y;
+ }
+ else
+ {
+ scanlineParams.dmaDest = &REG_BG2HOFS;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG2);
+ bgX = gBattle_BG2_X;
+ bgY = gBattle_BG2_Y;
+ }
+
+ for (y = 0, i = 0; y < 160; y++, i += 2)
+ {
+ gScanlineEffectRegBuffers[0][i] = bgX;
+ gScanlineEffectRegBuffers[1][i] = bgX;
+ gScanlineEffectRegBuffers[0][i + 1] = bgY;
+ gScanlineEffectRegBuffers[1][i + 1] = bgY;
+ }
+
+ scanlineParams.dmaControl = SCANLINE_EFFECT_DMACNT_32BIT;
+ scanlineParams.initState = 1;
+ scanlineParams.unused9 = 0;
+ ScanlineEffect_SetParams(scanlineParams);
+ task->func = sub_815D398;
+}
+
+static void sub_815D398(u8 taskId)
+{
+ struct Task *task;
+ s16 var1;
+ s16 var2;
+ s16 bgX, bgY;
+ s16 offset;
+ s16 var0;
+ s16 i;
+ s16 sineIndex;
+ s16 var3;
+
+ task = &gTasks[taskId];
+ if (GetBattlerSpriteBGPriorityRank(task->data[5]) == 1)
+ {
+ bgX = gBattle_BG1_X;
+ bgY = gBattle_BG1_Y;
+ }
+ else
+ {
+ bgX = gBattle_BG2_X;
+ bgY = gBattle_BG2_Y;
+ }
+
+ switch (task->data[0])
+ {
+ case 0:
+ offset = task->data[14] * 2;
+ var1 = 0;
+ var2 = 0;
+ i = 0;
+ task->data[1] = (task->data[1] + 2) & 0xFF;
+ sineIndex = task->data[1];
+ task->data[9] = 0x7E0 / task->data[6];
+ task->data[10] = -((task->data[7] * 2) / task->data[9]);
+ task->data[11] = task->data[7];
+ var3 = task->data[11] >> 5;
+ task->data[12] = var3;
+ var0 = task->data[14];
+ while (var0 > task->data[13])
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset + 1] = (i - var2) + bgY;
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][offset] = bgX + var3 + (gSineTable[sineIndex] >> 5);
+ sineIndex = (sineIndex + 10) & 0xFF;
+ task->data[11] += task->data[10];
+ var3 = task->data[11] >> 5;
+ task->data[12] = var3;
+
+ i++;
+ offset -= 2;
+ var1 += task->data[6];
+ var2 = var1 >> 5;
+ var0--;
+ }
+
+ var0 *= 2;
+ while (var0 >= 0)
+ {
+ gScanlineEffectRegBuffers[0][var0] = bgX + 240;
+ gScanlineEffectRegBuffers[1][var0] = bgX + 240;
+ var0 -= 2;
+ }
+
+ if (++task->data[6] > 63)
+ {
+ task->data[6] = 64;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ task->data[3]--;
+ else
+ task->data[4]++;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
+ if (task->data[3] == 0 && task->data[4] == 16)
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ }
+ else
+ {
+ task->data[7] += task->data[8];
+ }
+ break;
+ case 1:
+ if (++task->data[2] > 12)
+ {
+ gScanlineEffect.state = 3;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ task->data[2]++;
+ if (task->data[2] & 1)
+ task->data[3]++;
+ else
+ task->data[4]--;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
+ if (task->data[3] == 16 && task->data[4] == 0)
+ {
+ task->data[2] = 0;
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815D64C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ task->data[0] = 0;
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], task->data[15], gUnknown_085CE5F0);
+ task->func = sub_815D694;
+}
+
+static void sub_815D694(u8 taskId)
+{
+ u16 var0;
+
+ struct Task *task = &gTasks[taskId];
+ var0 = task->data[0];
+ task->data[0]++;
+ var0 -= 20;
+ if (var0 < 23)
+ {
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ if (task->data[2] & 1)
+ gSprites[task->data[15]].pos2.x = 1;
+ else
+ gSprites[task->data[15]].pos2.x = -1;
+ }
+ }
+ else
+ {
+ gSprites[task->data[15]].pos2.x = 0;
+ }
+
+ if (!RunAffineAnimFromTaskData(&gTasks[taskId]))
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_815D72C(struct Sprite *sprite, s16 b, s16 c, s16 d, s16 e, u16 f)
+{
+ sprite->pos1.x = b;
+ sprite->pos1.y = c;
+ sprite->data[4] = b << 4;
+ sprite->data[5] = c << 4;
+ sprite->data[6] = ((d - b) << 4) / f;
+ sprite->data[7] = ((e - c) << 4) / f;
+}
+
+void sub_815D794(struct Sprite *sprite)
+{
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+}
+
+void sub_815D7B4(struct Sprite *sprite)
+{
+ s16 x = sprite->pos1.x;
+ s16 y = sprite->pos1.y;
+
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
+ sub_815D72C(sprite, sprite->pos1.x, sprite->pos1.y, x, y, 64);
+ sprite->data[0] = 0;
+ sprite->callback = sub_815D804;
+}
+
+static void sub_815D804(struct Sprite *sprite)
+{
+ int index;
+
+ sprite->data[0]++;
+ index = (sprite->data[0] * 8) & 0xFF;
+ sub_815D794(sprite);
+ sprite->pos2.y = Sin(index, 8);
+ if (sprite->data[0] > 58)
+ {
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ sprite->invisible = sprite->data[2] & 1;
+ if (sprite->data[2] > 3)
+ DestroySpriteAndMatrix(sprite);
+ }
+ }
+}
+
+void sub_815D870(struct Sprite *sprite)
+{
+ sprite->data[0] = gBattleAnimArgs[3];
+ StartSpriteAffineAnim(sprite, gBattleAnimArgs[0]);
+ if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER)
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[2];
+ sprite->callback = sub_810E2C8;
+}
+
+static void sub_815D8D8(u8 taskId)
+{
+ u16 var0 = 0;
+ u16 var1 = 0;
+
+ gTasks[taskId].data[0]--;
+ if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
+ {
+ if (gTasks[taskId].data[9] == 0)
+ {
+ gTasks[taskId].data[9] = gTasks[taskId].data[4];
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ }
+ else
+ {
+ gTasks[taskId].data[9] = 0;
+ }
+
+ if (gTasks[taskId].data[10] == 0)
+ {
+ gTasks[taskId].data[10] = gTasks[taskId].data[5];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+ else
+ {
+ gTasks[taskId].data[10] = 0;
+ }
+
+ gTasks[taskId].data[1] = gTasks[taskId].data[13];
+ }
+
+ var0 = gTasks[taskId].data[7];
+ var1 = gTasks[taskId].data[8];
+ if (gTasks[taskId].data[2] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
+
+ if (gTasks[taskId].data[3] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
+
+ if (gTasks[taskId].data[0] < 1)
+ {
+ DestroyTask(taskId);
+ gAnimVisualTaskCount--;
+ }
+}
+
+static void sub_815DA20(u8 taskId)
+{
+ u16 var0 = 0;
+ u16 var1 = 0;
+
+ gTasks[taskId].data[0]--;
+ if ((gTasks[taskId].data[6] & 0x8000) && (--gTasks[taskId].data[1] == -1))
+ {
+ if (gTasks[taskId].data[9] == 0)
+ {
+ gTasks[taskId].data[9] = gTasks[taskId].data[4];
+ gTasks[taskId].data[4] = -gTasks[taskId].data[4];
+ }
+ else
+ {
+ gTasks[taskId].data[9] = var0;
+ }
+
+ if (gTasks[taskId].data[10] == 0)
+ {
+ gTasks[taskId].data[10] = gTasks[taskId].data[5];
+ gTasks[taskId].data[5] = -gTasks[taskId].data[5];
+ }
+ else
+ {
+ gTasks[taskId].data[10] = 0;
+ }
+
+ gTasks[taskId].data[1] = gTasks[taskId].data[13];
+ }
+
+ var0 = (gTasks[taskId].data[2] & 0x7FFF) + gTasks[taskId].data[7];
+ var1 = (gTasks[taskId].data[3] & 0x7FFF) + gTasks[taskId].data[8];
+ if (gTasks[taskId].data[2] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] - (var0 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.x = gTasks[taskId].data[9] + (var0 >> 8);
+
+ if (gTasks[taskId].data[3] & 0x8000)
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] - (var1 >> 8);
+ else
+ gSprites[gTasks[taskId].data[15]].pos2.y = gTasks[taskId].data[10] + (var1 >> 8);
+
+ gTasks[taskId].data[7] = var0;
+ gTasks[taskId].data[8] = var1;
+ if (gTasks[taskId].data[0] < 1)
+ {
+ gTasks[taskId].data[0] = 30;
+ gTasks[taskId].data[13] = 0;
+ gTasks[taskId].func = sub_815D8D8;
+ }
+}
+
+void sub_815DB90(u8 taskId)
+{
+ gTasks[taskId].data[15] = gBattlerSpriteIds[gBattleAnimAttacker];
+ gTasks[taskId].data[14] = gBattleAnimArgs[0];
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[13] = gBattleAnimArgs[6];
+ if (gBattleAnimArgs[3])
+ gTasks[taskId].data[6] = gTasks[taskId].data[6] | -0x8000;
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ gTasks[taskId].data[2] = gBattleAnimArgs[1];
+ gTasks[taskId].data[3] = gBattleAnimArgs[2];
+ }
+ else
+ {
+ if (gBattleAnimArgs[1] & 0x8000)
+ gTasks[taskId].data[2] = gBattleAnimArgs[1] & 0x7FFF;
+ else
+ gTasks[taskId].data[2] = gBattleAnimArgs[1] | -0x8000;
+
+ if (gBattleAnimArgs[2] & 0x8000)
+ gTasks[taskId].data[3] = gBattleAnimArgs[2] & 0x7FFF;
+ else
+ gTasks[taskId].data[3] = gBattleAnimArgs[2] | -0x8000;
+ }
+
+ gTasks[taskId].data[8] = 0;
+ gTasks[taskId].data[7] = 0;
+ gTasks[taskId].data[4] = gBattleAnimArgs[4];
+ gTasks[taskId].data[5] = gBattleAnimArgs[5];
+ gTasks[taskId].func = sub_815DA20;
+}
+
+void sub_815DCA4(u8 taskId)
+{
+ u8 battler;
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[1])
+ DestroyAnimVisualTask(taskId);
+
+ task->data[0] = 0;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = gBattleAnimArgs[1];
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ task->data[4] = GetBattlerSpriteCoord(battler, 0);
+ task->data[5] = GetBattlerSpriteCoord(battler, 1);
+ task->data[6] = GetBattlerSpriteSubpriority(battler);
+ task->data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
+ task->func = sub_815DD48;
+}
+
+static void sub_815DD48(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] == 6)
+ sub_815DDE0(taskId, TRUE);
+
+ if (task->data[1] == 18)
+ sub_815DDE0(taskId, FALSE);
+
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ if (--task->data[3] == 0)
+ {
+ task->data[0]++;
+ }
+ else
+ {
+ task->data[1] = 0;
+ PrepareAffineAnimInTaskData(task, task->data[15], gUnknown_085CE74C);
+ }
+ }
+ break;
+ case 1:
+ if (task->data[2] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_815DDE0(u8 taskId, bool8 arg1)
+{
+ u8 i;
+ s8 xOffset, yOffset;
+ struct Task *task;
+ s16 xCoords[4];
+ s16 yCoords[2];
+
+ task = &gTasks[taskId];
+ if (!arg1)
+ {
+ xOffset = 18;
+ yOffset = -20;
+ }
+ else
+ {
+ xOffset = 30;
+ yOffset = 20;
+ }
+
+ xCoords[0] = task->data[4] - xOffset;
+ xCoords[1] = task->data[4] - xOffset - 4;
+ xCoords[2] = task->data[4] + xOffset;
+ xCoords[3] = task->data[4] + xOffset + 4;
+ yCoords[0] = task->data[5] + yOffset;
+ yCoords[1] = task->data[5] + yOffset + 6;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_085CE76C, xCoords[i], yCoords[i & 1], task->data[6] - 5);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = i < 2 ? -2 : 2;
+ gSprites[spriteId].data[2] = -1;
+ gSprites[spriteId].data[3] = taskId;
+ gSprites[spriteId].data[4] = 2;
+ task->data[2]++;
+ }
+ }
+}
+
+void sub_815DEBC(struct Sprite *sprite)
+{
+ sprite->pos1.x += sprite->data[1];
+ sprite->pos1.y += sprite->data[2];
+ if (++sprite->data[0] > 6)
+ {
+ gTasks[sprite->data[3]].data[sprite->data[4]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_815DF0C(u8 taskId)
+{
+ u8 spriteId;
+
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = gBattleAnimArgs[1];
+ spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ gTasks[taskId].data[2] = 0x100 + gSprites[spriteId].oam.paletteNum * 16;
+ gTasks[taskId].func = sub_815DF64;
+}
+
+static void sub_815DF64(u8 taskId)
+{
+ if (gTasks[taskId].data[1])
+ {
+ BlendPalette(gTasks[taskId].data[2], 16, 8, gUnknown_085CE784[gTasks[taskId].data[0]]);
+ if (++gTasks[taskId].data[0] > 23)
+ gTasks[taskId].data[0] = 0;
+
+ gTasks[taskId].data[1]--;
+ }
+ else
+ {
+ BlendPalette(gTasks[taskId].data[2], 16, 0, RGB(0, 0, 0));
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_815DFCC(u8 taskId)
+{
+ sub_8117854(
+ taskId,
+ 0,
+ 0x1A0,
+ gBattleAnimAttacker,
+ gBattleAnimArgs[0],
+ 10,
+ 2,
+ 30,
+ gUnknown_08C2DC68,
+ gUnknown_08C2DDC4,
+ gUnknown_08C2DDA4);
+}
+
+void sub_815E01C(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + gBattleAnimArgs[1];
+ if (gBattleAnimArgs[2] == 0)
+ {
+ sprite->data[0] = 640;
+ sprite->data[1] = -640;
+ }
+ else if (gBattleAnimArgs[2] == 1)
+ {
+ sprite->vFlip = 1;
+ sprite->data[0] = 640;
+ sprite->data[1] = 640;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0] = 640;
+ }
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->data[0] = -sprite->data[0];
+ sprite->hFlip = 1;
+ }
+
+ sprite->callback = sub_815E0DC;
+}
+
+static void sub_815E0DC(struct Sprite *sprite)
+{
+ sprite->data[6] += sprite->data[0];
+ sprite->data[7] += sprite->data[1];
+ sprite->pos2.x = sprite->data[6] >> 8;
+ sprite->pos2.y = sprite->data[7] >> 8;
+ if (++sprite->data[5] == 14)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_815E114(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (IsContest())
+ {
+ task->data[5] = 8;
+ task->data[6] = 3;
+ task->data[7] = 1;
+ }
+ else
+ {
+ task->data[5] = 12;
+ task->data[6] = 3;
+ task->data[7] = 0;
+ }
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + sub_80A861C(gBattleAnimAttacker, 0) / 4;
+ else
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
+
+ task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) - sub_80A861C(gBattleAnimAttacker, 0) / 4;
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ task->func = sub_815E20C;
+}
+
+static void sub_815E20C(u8 taskId)
+{
+ u8 i;
+ s16 x, y;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 3)
+ {
+ task->data[1] = 0;
+ sub_815E34C(
+ task->data[11],
+ task->data[12],
+ task->data[13],
+ task->data[14],
+ task->data[5],
+ task->data[2],
+ &x,
+ &y);
+
+ for (i = 0; i < 2; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_085CE7EC, x, y, 35);
+ if (spriteId != MAX_SPRITES)
+ {
+ if (task->data[7] == 0)
+ {
+ if (i == 0)
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = -task->data[6];
+ else
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = task->data[6];
+ }
+ else
+ {
+ if (i == 0)
+ {
+ gSprites[spriteId].pos2.x = -task->data[6];
+ gSprites[spriteId].pos2.y = task->data[6];
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = task->data[6];
+ gSprites[spriteId].pos2.y = -task->data[6];
+ }
+ }
+
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = taskId;
+ gSprites[spriteId].data[2] = 10;
+ task->data[10]++;
+ }
+ }
+
+ if (task->data[2] == task->data[5])
+ task->data[0]++;
+
+ task->data[2]++;
+ }
+ break;
+ case 1:
+ if (task->data[10] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_815E34C(s16 arg0, s16 arg1, s16 arg2, s16 arg3, u8 arg4, u8 arg5, s16 *x, s16 *y)
+{
+ int x2;
+ int y2;
+
+ if (arg5 == 0)
+ {
+ *x = arg0;
+ *y = arg1;
+ return;
+ }
+
+ if (arg5 >= arg4)
+ {
+ *x = arg2;
+ *y = arg3;
+ return;
+ }
+
+ arg4--;
+ x2 = (arg0 << 8) + arg5 * (((arg2 - arg0) << 8) / arg4);
+ y2 = (arg1 << 8) + arg5 * (((arg3 - arg1) << 8) / arg4);
+ *x = x2 >> 8;
+ *y = y2 >> 8;
+}
+
+void sub_815E404(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 36)
+ {
+ gTasks[sprite->data[1]].data[sprite->data[2]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_815E444(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ sprite->data[2] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[0] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = InitAndRunAnimFastLinearTranslation;
+}
+
+void sub_815E47C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[11] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[12] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + sub_80A861C(gBattleAnimTarget, 0) / 4;
+ task->data[15] = CreateSprite(&gUnknown_085CE84C, task->data[11], task->data[12], GetBattlerSpriteSubpriority(gBattleAnimTarget) - 5);
+ if (task->data[15] != MAX_SPRITES)
+ {
+ gSprites[task->data[15]].data[0] = 16;
+ gSprites[task->data[15]].data[2] = task->data[13];
+ gSprites[task->data[15]].data[4] = task->data[14];
+ gSprites[task->data[15]].data[5] = -32;
+ InitAnimArcTranslation(&gSprites[task->data[15]]);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ StartSpriteAffineAnim(&gSprites[task->data[15]], 1);
+
+ task->func = sub_815E5CC;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_815E5CC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ TranslateAnimArc(&gSprites[task->data[15]]);
+ if (++task->data[2] > 7)
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ if (TranslateAnimArc(&gSprites[task->data[15]]))
+ {
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ task->data[2]++;
+ gSprites[task->data[15]].invisible = task->data[2] & 1;
+ if (task->data[2] == 16)
+ {
+ FreeOamMatrix(gSprites[task->data[15]].oam.matrixNum);
+ DestroySprite(&gSprites[task->data[15]]);
+ task->data[0]++;
+ }
+ }
+ break;
+ case 3:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815E6D8(struct Sprite *sprite)
+{
+ u8 battler;
+
+ if (gBattleAnimArgs[0] == 0)
+ battler = gBattleAnimAttacker;
+ else
+ battler = gBattleAnimTarget;
+
+ sprite->oam.tileNum += 16;
+ sprite->data[6] = gBattleAnimArgs[2];
+ sprite->data[7] = gBattleAnimArgs[1] == 0 ? -1 : 1;
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, 3);
+ if (gBattleAnimArgs[1] == 0)
+ {
+ sprite->oam.matrixNum |= 0x8;
+ sprite->pos1.x = sub_80A861C(battler, 4) - 8;
+ }
+ else
+ {
+ sprite->pos1.x = sub_80A861C(battler, 5) + 8;
+ }
+
+ sprite->callback = sub_815E784;
+}
+
+static void sub_815E784(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.x += sprite->data[7];
+ if (++sprite->data[2] == 12)
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] == 8)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->pos2.x -= sprite->data[7] * 4;
+ if (++sprite->data[1] == 6)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ sprite->pos2.x += sprite->data[7] * 3;
+ if (++sprite->data[1] == 8)
+ {
+ if (--sprite->data[6])
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]--;
+ }
+ else
+ {
+ DestroyAnimSprite(sprite);
+ }
+ }
+ break;
+ }
+}
+
+void sub_815E840(u8 taskId)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[0] = gBattleAnimArgs[1];
+ gTasks[taskId].data[15] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]);
+ PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
+ gTasks[taskId].func = sub_815E898;
+ }
+}
+
+static void sub_815E898(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if (!(task->data[2] & 1))
+ gSprites[task->data[15]].pos2.x = 2;
+ else
+ gSprites[task->data[15]].pos2.x = -2;
+ }
+
+ if (!RunAffineAnimFromTaskData(task))
+ {
+ gSprites[task->data[15]].pos2.x = 0;
+ if (--task->data[0])
+ {
+ PrepareAffineAnimInTaskData(&gTasks[taskId], gTasks[taskId].data[15], gUnknown_085CE87C);
+ task->data[1] = 0;
+ task->data[2] = 0;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+}
+
+void sub_815E954(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = sub_80A861C(gBattleAnimAttacker, 2);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = sub_80A861C(gBattleAnimTarget, 2);
+ }
+
+ if (sprite->pos1.y < 8)
+ sprite->pos1.y = 8;
+
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[1];
+ sprite->data[2] = 0;
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->callback = sub_815E9BC;
+}
+
+static void sub_815E9BC(struct Sprite *sprite)
+{
+ if (++sprite->data[0] >= sprite->data[1])
+ {
+ sprite->data[0] = 0;
+ sprite->data[2] = (sprite->data[2] + 1) & 1;
+ sprite->invisible = sprite->data[2];
+ if (sprite->data[2] && --sprite->data[3] == 0)
+ DestroyAnimSprite(sprite);
+ }
+}
+
+void sub_815EA14(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ sprite->oam.matrixNum |= 0x8;
+ sprite->pos1.x = 100;
+ sprite->data[7] = 1;
+ }
+ else
+ {
+ sprite->pos1.x = 140;
+ sprite->data[7] = -1;
+ }
+
+ sprite->pos1.y = 56;
+ sprite->callback = sub_815EA60;
+}
+
+static void sub_815EA60(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.y -= sprite->data[7] * 2;
+ if (sprite->data[1] & 1)
+ sprite->pos1.x -= sprite->data[7] * 2;
+
+ if (++sprite->data[1] == 9)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[1] == 4)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1]++;
+ sprite->pos1.y += sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 12)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ if (++sprite->data[1] == 2)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ sprite->data[1]++;
+ sprite->pos1.y -= sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 12)
+ sprite->data[0]++;
+ break;
+ case 5:
+ sprite->data[1]++;
+ sprite->pos1.y += sprite->data[7] * 3;
+ sprite->pos2.x = sprite->data[7] * (gSineTable[sprite->data[1] * 10] >> 3);
+ if (sprite->data[1] == 15)
+ sprite->oam.tileNum += 16;
+
+ if (sprite->data[1] == 18)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 6:
+ sprite->pos1.x += sprite->data[7] * 6;
+ if (++sprite->data[1] == 9)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 7:
+ sprite->pos1.x += sprite->data[7] * 2;
+ if (++sprite->data[1] == 1)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 8:
+ sprite->pos1.x -= sprite->data[7] * 3;
+ if (++sprite->data[1] == 5)
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+void sub_815EC48(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ if (!IsContest())
+ {
+ if (IsDoubleBattle() == TRUE)
+ {
+ int x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ int y = GetBattlerSpriteCoord(BATTLE_PARTNER(gBattleAnimAttacker), 0);
+ if (x > y)
+ task->data[14] = 1;
+ else
+ task->data[14] = -1;
+ }
+ else
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ task->data[14] = -1;
+ else
+ task->data[14] = 1;
+ }
+ }
+ else
+ {
+ task->data[14] = 1;
+ }
+
+ task->func = sub_815ECE4;
+}
+
+static void sub_815ECE4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[1] == 13)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 1:
+ gSprites[task->data[15]].pos2.x -= task->data[14] * 3;
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ gSprites[task->data[15]].pos2.x += task->data[14] * 3;
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ if (++task->data[1] == 2)
+ {
+ task->data[1] = 0;
+ if (task->data[2] == 0)
+ {
+ task->data[2]++;
+ task->data[0] = 1;
+ }
+ else
+ {
+ task->data[0]++;
+ }
+ }
+ break;
+ case 4:
+ gSprites[task->data[15]].pos2.x += task->data[14];
+ if (++task->data[1] == 3)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 5:
+ if (++task->data[1] == 6)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 6:
+ gSprites[task->data[15]].pos2.x -= task->data[14] * 4;
+ if (++task->data[1] == 5)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 7:
+ gSprites[task->data[15]].pos2.x += task->data[14] * 4;
+ if (++task->data[1] == 5)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 8:
+ gSprites[task->data[15]].pos2.x = 0;
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_815EE84(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[0] == 0)
+ {
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[7] = gBattleAnimAttacker;
+ }
+ else
+ {
+ sprite->data[7] = gBattleAnimTarget;
+ }
+
+ if (GetBattlerSide(sprite->data[7]) == B_SIDE_OPPONENT)
+ sprite->oam.matrixNum = 8;
+
+ sprite->oam.priority = GetBattlerSpriteBGPriority(sprite->data[7]);
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+ sprite->callback = sub_815EF08;
+}
+
+static void sub_815EF08(struct Sprite *sprite)
+{
+ u16 x, y;
+
+ switch (sprite->data[5])
+ {
+ case 0:
+ switch (sprite->data[6])
+ {
+ default:
+ sprite->data[6] = 0;
+ case 0:
+ case 4:
+ x = sub_80A861C(sprite->data[7], 5) - 4;
+ y = sub_80A861C(sprite->data[7], 3) - 4;
+ break;
+ case 1:
+ x = sub_80A861C(sprite->data[7], 5) - 4;
+ y = sub_80A861C(sprite->data[7], 2) + 4;
+ break;
+ case 2:
+ x = sub_80A861C(sprite->data[7], 4) + 4;
+ y = sub_80A861C(sprite->data[7], 3) - 4;
+ break;
+ case 3:
+ x = sub_80A861C(sprite->data[7], 4) + 4;
+ y = sub_80A861C(sprite->data[7], 2) - 4;
+ break;
+ case 5:
+ x = GetBattlerSpriteCoord(sprite->data[7], 2);
+ y = GetBattlerSpriteCoord(sprite->data[7], 3);
+ break;
+ }
+
+ if (sprite->data[6] == 4)
+ sprite->data[0] = 24;
+ else if (sprite->data[6] == 5)
+ sprite->data[0] = 6;
+ else
+ sprite->data[0] = 12;
+
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = x;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = y;
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5]++;
+ break;
+ case 1:
+ if (AnimTranslateLinear(sprite))
+ {
+ switch (sprite->data[6])
+ {
+ default:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[0] = 0;
+ sprite->data[5]++;
+ sprite->data[6]++;
+ break;
+ case 4:
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos2.x = 0;
+ sprite->data[5] = 0;
+ sprite->data[6]++;
+ break;
+ case 5:
+ sprite->data[0] = 0;
+ sprite->data[1] = 16;
+ sprite->data[2] = 0;
+ sprite->data[5] = 3;
+ break;
+ }
+ }
+ break;
+ case 2:
+ if (++sprite->data[0] == 4)
+ sprite->data[5] = 0;
+ break;
+ case 3:
+ if (!(sprite->data[0] & 1))
+ sprite->data[1]--;
+ else
+ sprite->data[2]++;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[1], sprite->data[2]));
+ if (++sprite->data[0] == 32)
+ {
+ sprite->invisible = 1;
+ sprite->data[5]++;
+ }
+ break;
+ case 4:
+ DestroyAnimSprite(sprite);
+ break;
+ }
+}
+
+static void sub_815F10C(struct Sprite *sprite)
+{
+ sprite->pos2.x = ((sprite->data[2] - sprite->data[0]) * sprite->data[5]) / sprite->data[4];
+ sprite->pos2.y = ((sprite->data[3] - sprite->data[1]) * sprite->data[5]) / sprite->data[4];
+ if (!(sprite->data[5] & 1))
+ {
+ CreateSprite(
+ &gUnknown_085CE3A0,
+ sprite->pos1.x + sprite->pos2.x,
+ sprite->pos1.y + sprite->pos2.y, 5);
+ }
+
+ if (sprite->data[5] == sprite->data[4])
+ DestroyAnimSprite(sprite);
+
+ sprite->data[5]++;
+}
+
+void sub_815F18C(struct Sprite *sprite)
+{
+ GetBattlerSpriteCoord(gBattleAnimTarget, 2); // unused local variable
+ GetBattlerSpriteCoord(gBattleAnimTarget, 3); // unused local variable
+
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER || IsContest())
+ {
+ sprite->data[0] = sprite->pos1.x - gBattleAnimArgs[0];
+ sprite->data[2] = sprite->pos1.x - gBattleAnimArgs[2];
+ }
+ else
+ {
+ sprite->data[0] = sprite->pos1.x + gBattleAnimArgs[0];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ }
+
+ sprite->data[1] = sprite->pos1.y + gBattleAnimArgs[1];
+ sprite->data[3] = sprite->pos1.y + gBattleAnimArgs[3];
+ sprite->data[4] = gBattleAnimArgs[4];
+ sprite->pos1.x = sprite->data[0];
+ sprite->pos1.y = sprite->data[1];
+ sprite->callback = sub_815F10C;
+}
+
+void AnimTask_MonToSubstitute(u8 taskId)
+{
+ int i;
+ u8 spriteId = GetAnimBattlerSpriteId(0);
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ PrepareBattlerSpriteForRotScale(spriteId, FALSE);
+ gTasks[taskId].data[1] = 0x100;
+ gTasks[taskId].data[2] = 0x100;
+ gTasks[taskId].data[0]++;
+ }
+ else if (gTasks[taskId].data[0] == 1)
+ {
+ gTasks[taskId].data[1] += 0x60;
+ gTasks[taskId].data[2] -= 0xD;
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[1], gTasks[taskId].data[2], 0);
+ if (++gTasks[taskId].data[3] == 9)
+ {
+ gTasks[taskId].data[3] = 0;
+ ResetSpriteRotScale(spriteId);
+ gSprites[spriteId].invisible = 1;
+ gTasks[taskId].data[0]++;
+ }
+ }
+ else
+ {
+ LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, 0, spriteId);
+ if (IsContest())
+ {
+ gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].affineAnims = gUnknown_082FF6C0;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0);
+ }
+
+ for (i = 0; i < 16; i++)
+ gTasks[taskId].data[i] = 0;
+
+ gTasks[taskId].func = sub_815F330;
+ }
+}
+
+static void sub_815F330(u8 taskId)
+{
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gSprites[spriteId].pos2.y = -200;
+ gSprites[spriteId].pos2.x = 200;
+ gSprites[spriteId].invisible = 0;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gTasks[taskId].data[10] += 112;
+ gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
+ if (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y >= -32)
+ gSprites[spriteId].pos2.x = 0;
+
+ if (gSprites[spriteId].pos2.y > 0)
+ gSprites[spriteId].pos2.y = 0;
+
+ if (gSprites[spriteId].pos2.y == 0)
+ {
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ gTasks[taskId].data[10] -= 0x800;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ gTasks[taskId].data[10] -= 112;
+ if (gTasks[taskId].data[10] < 0)
+ gTasks[taskId].data[10] = 0;
+
+ gSprites[spriteId].pos2.y -= gTasks[taskId].data[10] >> 8;
+ if (gTasks[taskId].data[10] == 0)
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ gTasks[taskId].data[10] += 112;
+ gSprites[spriteId].pos2.y += gTasks[taskId].data[10] >> 8;
+ if (gSprites[spriteId].pos2.y > 0)
+ gSprites[spriteId].pos2.y = 0;
+
+ if (gSprites[spriteId].pos2.y == 0)
+ {
+ PlaySE12WithPanning(SE_W145B, BattleAnimAdjustPanning(-64));
+ DestroyAnimVisualTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_815F48C(struct Sprite *sprite)
+{
+ s16 y2;
+
+ if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ {
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
+ y2 = -144;
+ }
+ else
+ {
+ sprite->subpriority = GetBattlerSpriteSubpriority(gBattleAnimTarget) + 2;
+ y2 = -96;
+ }
+
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->pos2.y = y2;
+ sprite->callback = sub_815F4F0;
+}
+
+static void sub_815F4F0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.y += 10;
+ if (sprite->pos2.y >= 0)
+ {
+ PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ sprite->data[1] += 4;
+ sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 3);
+ if (sprite->data[1] > 127)
+ {
+ PlaySE12WithPanning(SE_W166, BattleAnimAdjustPanning(63));
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ sprite->data[1] += 6;
+ sprite->pos2.y = -(gSineTable[sprite->data[1]] >> 4);
+ if (sprite->data[1] > 127)
+ {
+ sprite->data[1] = 0;
+ sprite->pos2.y = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 3:
+ if (++sprite->data[1] > 8)
+ {
+ PlaySE12WithPanning(SE_W043, BattleAnimAdjustPanning(63));
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ if (++sprite->data[1] > 8)
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ sprite->invisible = sprite->data[2] & 1;
+ if (sprite->data[2] == 7)
+ DestroyAnimSprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_815F620(u8 taskId)
+{
+ s16 spriteId1, spriteId2;
+
+ if (IsContest())
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ spriteId1 = CloneBattlerSpriteWithBlend(ANIM_TARGET);
+ if (spriteId1 < 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ spriteId2 = CloneBattlerSpriteWithBlend(ANIM_TARGET);
+ if (spriteId2 < 0)
+ {
+ obj_delete_but_dont_free_vram(&gSprites[spriteId1]);
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ gSprites[spriteId2].pos2.x += 24;
+ gSprites[spriteId1].pos2.x -= 24;
+ gSprites[spriteId2].data[0] = 0;
+ gSprites[spriteId1].data[0] = 0;
+ gSprites[spriteId2].data[1] = 0;
+ gSprites[spriteId1].data[1] = 0;
+ gSprites[spriteId2].data[2] = 0;
+ gSprites[spriteId1].data[2] = 0;
+ gSprites[spriteId2].data[3] = 16;
+ gSprites[spriteId1].data[3] = -16;
+ gSprites[spriteId2].data[4] = 0;
+ gSprites[spriteId1].data[4] = 128;
+ gSprites[spriteId2].data[5] = 24;
+ gSprites[spriteId1].data[5] = 24;
+ gSprites[spriteId2].data[6] = taskId;
+ gSprites[spriteId1].data[6] = taskId;
+ gSprites[spriteId2].data[7] = 0;
+ gSprites[spriteId1].data[7] = 0;
+ gTasks[taskId].data[0] = 2;
+
+ if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible)
+ {
+ gSprites[spriteId2].invisible = 0;
+ gSprites[spriteId1].invisible = 1;
+ }
+ else
+ {
+ gSprites[spriteId2].invisible = 1;
+ gSprites[spriteId1].invisible = 1;
+ }
+
+
+ gSprites[spriteId2].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[spriteId1].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[spriteId2].callback = sub_815F7C4;
+ gSprites[spriteId1].callback = sub_815F7C4;
+ gTasks[taskId].func = sub_815F79C;
+}
+
+static void sub_815F79C(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_815F7C4(struct Sprite *sprite)
+{
+ int zero = 0;
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ if (!gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible)
+ sprite->invisible ^= 1;
+ }
+
+ sprite->data[4] = sprite->data[4] + sprite->data[3];
+ sprite->data[4] &= 0xFF;
+ sprite->pos2.x = Cos(sprite->data[4], sprite->data[5]);
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[2] == 60)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (++sprite->data[2] > 0)
+ {
+ sprite->data[2] = 0;
+ sprite->data[5] -= 2;
+ if (sprite->data[5] < 0)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ obj_delete_but_dont_free_vram(sprite);
+ }
+ }
+ break;
+ }
+}
diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c
index c3d0fe90f..f99b1aeac 100644
--- a/src/battle_anim_utility_funcs.c
+++ b/src/battle_anim_utility_funcs.c
@@ -40,10 +40,10 @@ static void sub_8117FD0(u8);
const u16 gUnknown_08597418 = RGB(31, 31, 31);
-// no clue what these are...
-// possibly some register offsets
-const u8 gUnknown_0859741A[] = {0x08, 0x0a, 0x0c, 0x0e};
-const u8 gUnknown_0859741E[] = {0x08, 0x0a, 0x0c, 0x0e};
+// These belong in battle_intro.c, but there putting them there causes 2 bytes of alignment padding
+// between the two .rodata segments. Perhaps battle_intro.c actually belongs in this file, too.
+const u8 gUnknown_0859741A[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT};
+const u8 gUnknown_0859741E[] = {REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT};
void sub_8116620(u8 taskId)
{
@@ -236,7 +236,7 @@ static void sub_81169F8(u8 taskId)
}
else
{
- task->data[6] = duplicate_obj_of_side_rel2move_in_transparent_mode(task->data[0]);
+ task->data[6] = CloneBattlerSpriteWithBlend(task->data[0]);
if (task->data[6] >= 0)
{
gSprites[task->data[6]].oam.priority = task->data[0] ? 1 : 2;
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 8cbc62aab..e81035fc7 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -1136,7 +1136,7 @@ static void LinkOpponentHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
@@ -1170,7 +1170,7 @@ static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1302,7 +1302,7 @@ static void LinkOpponentHandleDrawTrainerPic(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 0cd15f39e..533ec39de 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -1024,7 +1024,7 @@ static void LinkPartnerHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1055,7 +1055,7 @@ static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1143,7 +1143,7 @@ static void LinkPartnerHandleDrawTrainerPic(void)
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, sub_80A82E4(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, (8 - gTrainerBackPicCoords[trainerPicId].coords) * 4 + 80, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index c057e8575..30aa3217b 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -1128,7 +1128,7 @@ static void OpponentHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
@@ -1163,7 +1163,7 @@ static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
@@ -1293,7 +1293,7 @@ static void OpponentHandleDrawTrainerPic(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 2bd5ef365..2d8fba63a 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -2200,7 +2200,7 @@ static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -2314,7 +2314,7 @@ static void PlayerHandleDrawTrainerPic(void)
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -2329,7 +2329,7 @@ static void PlayerHandleDrawTrainerPic(void)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 02dd1383b..22018add4 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -1211,7 +1211,7 @@ static void PlayerPartnerHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1242,7 +1242,7 @@ static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1322,7 +1322,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1333,7 +1333,7 @@ static void PlayerPartnerHandleDrawTrainerPic(void)
{
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 0cf3634dc..1cf780264 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -1119,9 +1119,7 @@ static void RecordedOpponentHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- sub_80A82E4(gActiveBattler));
-
-
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
@@ -1154,7 +1152,7 @@ static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit)
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1251,7 +1249,7 @@ static void RecordedOpponentHandleDrawTrainerPic(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
xPos,
(8 - gTrainerFrontPicCoords[trainerPicId].coords) * 4 + 40,
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2;
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 4d7fdc01e..a788d6be3 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -1105,7 +1105,7 @@ static void RecordedPlayerHandleLoadMonSprite(void)
gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(gActiveBattler, 2),
GetBattlerSpriteDefault_Y(gActiveBattler),
- sub_80A82E4(gActiveBattler));
+ GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -240;
gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
@@ -1136,7 +1136,7 @@ static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit)
&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
@@ -1236,7 +1236,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
trainerPicId = PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender);
DecompressTrainerFrontPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerFront(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = IndexOfSpritePaletteTag(gTrainerFrontPicPaletteTable[trainerPicId].tag);
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
@@ -1250,7 +1250,7 @@ static void RecordedPlayerHandleDrawTrainerPic(void)
{
DecompressTrainerBackPic(trainerPicId, gActiveBattler);
SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler));
- gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, sub_80A82E4(gActiveBattler));
+ gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, xPos, yPos, GetBattlerSpriteSubpriority(gActiveBattler));
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler;
gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240;
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index 5d87c4f90..c0b496e47 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -1464,7 +1464,7 @@ static void sub_816AA80(u8 battlerId)
gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate,
GetBattlerSpriteCoord(battlerId, 2),
GetBattlerSpriteDefault_Y(battlerId),
- sub_80A82E4(battlerId));
+ GetBattlerSpriteSubpriority(battlerId));
gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 391128cb0..159d7e790 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -26,6 +26,7 @@
#include "international_string_util.h"
#include "trainer_pokemon_sprites.h"
#include "scanline_effect.h"
+#include "script_pokemon_util_80F87D8.h"
#include "graphics.h"
#include "constants/species.h"
#include "constants/moves.h"
@@ -57,19 +58,9 @@ struct UnkStruct_860DD10
};
extern void sub_81B8558(void);
-extern u16 GetFrontierBrainMonMove(u8 monId, u8 moveSlotId);
-extern u8 GetFrontierBrainMonEvs(u8, u8);
-extern u8 GetFrontierBrainMonNature(u8);
-extern void sub_81A4C30(void);
-extern u8 sub_81A3610(void);
-extern u16 GetFrontierBrainMonSpecies(u8);
-extern void ReducePlayerPartyToSelectedMons(void);
extern u8 gSelectedOrderFromParty[];
-extern const u16 gBattleFrontierHeldItems[];
-extern const struct FacilityMon gBattleFrontierMons[];
-extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
extern const struct SpriteTemplate gUnknown_0860CFA8;
// text
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 1d7fbafc9..801b33ba7 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -13,11 +13,6 @@
#include "constants/trainers.h"
#include "constants/moves.h"
-extern const struct FacilityMon gBattleFrontierMons[];
-extern const struct FacilityMon gSlateportBattleTentMons[];
-extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
-extern const u16 gBattleFrontierHeldItems[];
-
// IWRAM bss
static IWRAM_DATA bool8 gUnknown_03001288;
@@ -531,7 +526,7 @@ static void sub_81A67EC(void)
}
var_40 = sub_81A6F70(factoryBattleMode, factoryLvlMode);
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
i = 0;
while (i != PARTY_SIZE)
{
@@ -551,7 +546,7 @@ static void sub_81A67EC(void)
break;
if (species[j] == gFacilityTrainerMons[monSetId].species)
{
- if (currSpecies == 0)
+ if (currSpecies == SPECIES_NONE)
currSpecies = gFacilityTrainerMons[monSetId].species;
else
break;
@@ -566,7 +561,7 @@ static void sub_81A67EC(void)
if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
{
if (gFacilityTrainerMons[monSetId].species == currSpecies)
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
break;
}
}
@@ -584,7 +579,7 @@ static void sub_81A67EC(void)
static void sub_81A6A08(void)
{
u8 i;
- u8 typesCount[18];
+ u8 typesCount[NUMBER_OF_MON_TYPES];
u8 usedType[2];
gFacilityTrainerMons = gBattleFrontierMons;
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index d9409b230..a5d2566df 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -1097,14 +1097,14 @@ void sub_805EB9C(u8 affineMode)
if (IsBattlerSpritePresent(i))
{
gSprites[gBattlerSpriteIds[i]].oam.affineMode = affineMode;
- if (affineMode == 0)
+ if (affineMode == ST_OAM_AFFINE_OFF)
{
- gBattleSpritesDataPtr->healthBoxesData[i].field_6 = gSprites[gBattlerSpriteIds[i]].oam.matrixNum;
+ gBattleSpritesDataPtr->healthBoxesData[i].matrixNum = gSprites[gBattlerSpriteIds[i]].oam.matrixNum;
gSprites[gBattlerSpriteIds[i]].oam.matrixNum = 0;
}
else
{
- gSprites[gBattlerSpriteIds[i]].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[i].field_6;
+ gSprites[gBattlerSpriteIds[i]].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[i].matrixNum;
}
}
}
diff --git a/src/battle_intro.c b/src/battle_intro.c
index 0ccc7e828..736e35a87 100644
--- a/src/battle_intro.c
+++ b/src/battle_intro.c
@@ -1,21 +1,728 @@
#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_main.h"
+#include "battle_setup.h"
+#include "bg.h"
+#include "gpu_regs.h"
+#include "main.h"
+#include "scanline_effect.h"
#include "task.h"
+#include "trig.h"
+#include "constants/trainers.h"
-extern void task_battle_intro_80BC47C(u8);
-extern void task00_battle_intro_80BC6C8(u8);
-extern void task_battle_intro_80BC47C(u8);
-extern void task_battle_intro_anim(u8);
-
-const TaskFunc gUnknown_08597424[] =
-{
- task_battle_intro_80BC47C,
- task_battle_intro_80BC47C,
- task00_battle_intro_80BC6C8,
- task00_battle_intro_80BC6C8,
- task00_battle_intro_80BC6C8,
- task_battle_intro_80BC47C,
- task_battle_intro_80BC47C,
- task_battle_intro_80BC47C,
- task_battle_intro_anim,
- task_battle_intro_anim,
+static EWRAM_DATA u16 sBgCnt = 0;
+
+extern const u8 gUnknown_0859741A[];
+extern const u8 gUnknown_0859741E[];
+
+static void BattleIntroSlide1(u8);
+static void BattleIntroSlide2(u8);
+static void BattleIntroSlide3(u8);
+static void BattleIntroSlideLink(u8);
+static void BattleIntroSlidePartner(u8);
+
+static const TaskFunc sBattleIntroSlideFuncs[] =
+{
+ BattleIntroSlide1, // BATTLE_TERRAIN_GRASS
+ BattleIntroSlide1, // BATTLE_TERRAIN_LONG_GRASS
+ BattleIntroSlide2, // BATTLE_TERRAIN_SAND
+ BattleIntroSlide2, // BATTLE_TERRAIN_UNDERWATER
+ BattleIntroSlide2, // BATTLE_TERRAIN_WATER
+ BattleIntroSlide1, // BATTLE_TERRAIN_POND
+ BattleIntroSlide1, // BATTLE_TERRAIN_MOUNTAIN
+ BattleIntroSlide1, // BATTLE_TERRAIN_CAVE
+ BattleIntroSlide3, // BATTLE_TERRAIN_BUILDING
+ BattleIntroSlide3, // BATTLE_TERRAIN_PLAIN
};
+
+void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value)
+{
+ if (bgId < 4)
+ {
+ sBgCnt = GetGpuReg(gUnknown_0859741A[bgId]);
+ switch (attributeId)
+ {
+ case BG_ANIM_SCREEN_SIZE:
+ ((struct BgCnt *)&sBgCnt)->screenSize = value;
+ break;
+ case BG_ANIM_AREA_OVERFLOW_MODE:
+ ((struct BgCnt *)&sBgCnt)->areaOverflowMode = value;
+ break;
+ case BG_ANIM_MOSAIC:
+ ((struct BgCnt *)&sBgCnt)->mosaic = value;
+ break;
+ case BG_ANIM_CHAR_BASE_BLOCK:
+ ((struct BgCnt *)&sBgCnt)->charBaseBlock = value;
+ break;
+ case BG_ANIM_PRIORITY:
+ ((struct BgCnt *)&sBgCnt)->priority = value;
+ break;
+ case BG_ANIM_PALETTES_MODE:
+ ((struct BgCnt *)&sBgCnt)->palettes = value;
+ break;
+ case BG_ANIM_SCREEN_BASE_BLOCK:
+ ((struct BgCnt *)&sBgCnt)->screenBaseBlock = value;
+ break;
+ }
+
+ SetGpuReg(gUnknown_0859741A[bgId], sBgCnt);
+ }
+}
+
+int GetAnimBgAttribute(u8 bgId, u8 attributeId)
+{
+ u16 bgCnt;
+
+ if (bgId < 4)
+ {
+ bgCnt = GetGpuReg(gUnknown_0859741E[bgId]);
+ switch (attributeId)
+ {
+ case BG_ANIM_SCREEN_SIZE:
+ return ((struct BgCnt *)&bgCnt)->screenSize;
+ case BG_ANIM_AREA_OVERFLOW_MODE:
+ return ((struct BgCnt *)&bgCnt)->areaOverflowMode;
+ case BG_ANIM_MOSAIC:
+ return ((struct BgCnt *)&bgCnt)->mosaic;
+ case BG_ANIM_CHAR_BASE_BLOCK:
+ return ((struct BgCnt *)&bgCnt)->charBaseBlock;
+ case BG_ANIM_PRIORITY:
+ return ((struct BgCnt *)&bgCnt)->priority;
+ case BG_ANIM_PALETTES_MODE:
+ return ((struct BgCnt *)&bgCnt)->palettes;
+ case BG_ANIM_SCREEN_BASE_BLOCK:
+ return ((struct BgCnt *)&bgCnt)->screenBaseBlock;
+ }
+ }
+
+ return 0;
+}
+
+void HandleIntroSlide(u8 terrain)
+{
+ u8 taskId;
+
+ if ((gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER) && gPartnerTrainerId != TRAINER_STEVEN_PARTNER)
+ {
+ taskId = CreateTask(BattleIntroSlidePartner, 0);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ taskId = CreateTask(BattleIntroSlideLink, 0);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
+ {
+ taskId = CreateTask(BattleIntroSlide3, 0);
+ }
+ else if ((gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) && gGameVersion != VERSION_RUBY)
+ {
+ terrain = BATTLE_TERRAIN_UNDERWATER;
+ taskId = CreateTask(BattleIntroSlide2, 0);
+ }
+ else
+ {
+ taskId = CreateTask(sBattleIntroSlideFuncs[terrain], 0);
+ }
+
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = terrain;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[6] = 0;
+}
+
+void sub_811828C(u8 taskId)
+{
+ DestroyTask(taskId);
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = 0;
+ gBattle_BG2_X = 0;
+ gBattle_BG2_Y = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+}
+
+static void BattleIntroSlide1(u8 taskId)
+{
+ int i;
+
+ gBattle_BG1_X += 6;
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gTasks[taskId].data[2] = 16;
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 1;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (--gTasks[taskId].data[2] == 0)
+ {
+ gTasks[taskId].data[0]++;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ }
+ break;
+ case 2:
+ gBattle_WIN0V -= 0xFF;
+ if ((gBattle_WIN0V & 0xFF00) == 0x3000)
+ {
+ gTasks[taskId].data[0]++;
+ gTasks[taskId].data[2] = 240;
+ gTasks[taskId].data[3] = 32;
+ gIntroSlideFlags &= ~1;
+ }
+ break;
+ case 3:
+ if (gTasks[taskId].data[3])
+ {
+ gTasks[taskId].data[3]--;
+ }
+ else
+ {
+ if (gTasks[taskId].data[1] == 1)
+ {
+ if (gBattle_BG1_Y != 0xFFB0)
+ gBattle_BG1_Y -= 2;
+ }
+ else
+ {
+ if (gBattle_BG1_Y != 0xFFC8)
+ gBattle_BG1_Y -= 1;
+ }
+ }
+
+ if (gBattle_WIN0V & 0xFF00)
+ gBattle_WIN0V -= 0x3FC;
+
+ if (gTasks[taskId].data[2])
+ gTasks[taskId].data[2] -= 2;
+
+ // Scanline settings have already been set in CB2_InitBattleInternal()
+ for (i = 0; i < 80; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
+
+ for (; i < 160; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2];
+
+ if (!gTasks[taskId].data[2])
+ {
+ gScanlineEffect.state = 3;
+ gTasks[taskId].data[0]++;
+ CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
+ SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
+ }
+ break;
+ case 4:
+ sub_811828C(taskId);
+ break;
+ }
+}
+
+static void BattleIntroSlide2(u8 taskId)
+{
+ int i;
+
+ switch (gTasks[taskId].data[1])
+ {
+ case 2:
+ case 4:
+ gBattle_BG1_X += 8;
+ break;
+ case 3:
+ gBattle_BG1_X += 6;
+ break;
+ }
+
+ if (gTasks[taskId].data[1] == 4)
+ {
+ gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8;
+ if (gTasks[taskId].data[6] < 180)
+ gTasks[taskId].data[6] += 4;
+ else
+ gTasks[taskId].data[6] += 6;
+
+ if (gTasks[taskId].data[6] == 360)
+ gTasks[taskId].data[6] = 0;
+ }
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gTasks[taskId].data[4] = 16;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gTasks[taskId].data[2] = 16;
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 1;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (--gTasks[taskId].data[2] == 0)
+ {
+ gTasks[taskId].data[0]++;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ }
+ break;
+ case 2:
+ gBattle_WIN0V -= 0xFF;
+ if ((gBattle_WIN0V & 0xFF00) == 0x3000)
+ {
+ gTasks[taskId].data[0]++;
+ gTasks[taskId].data[2] = 240;
+ gTasks[taskId].data[3] = 32;
+ gTasks[taskId].data[5] = 1;
+ gIntroSlideFlags &= ~1;
+ }
+ break;
+ case 3:
+ if (gTasks[taskId].data[3])
+ {
+ if (--gTasks[taskId].data[3] == 0)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(15, 0));
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ }
+ }
+ else
+ {
+ if ((gTasks[taskId].data[4] & 0x1F) && --gTasks[taskId].data[5] == 0)
+ {
+ gTasks[taskId].data[4] += 0xFF;
+ gTasks[taskId].data[5] = 4;
+ }
+ }
+
+ if (gBattle_WIN0V & 0xFF00)
+ gBattle_WIN0V -= 0x3FC;
+
+ if (gTasks[taskId].data[2])
+ gTasks[taskId].data[2] -= 2;
+
+ // Scanline settings have already been set in CB2_InitBattleInternal()
+ for (i = 0; i < 80; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
+
+ for (; i < 160; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2];
+
+ if (!gTasks[taskId].data[2])
+ {
+ gScanlineEffect.state = 3;
+ gTasks[taskId].data[0]++;
+ CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
+ SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
+ }
+ break;
+ case 4:
+ sub_811828C(taskId);
+ break;
+ }
+
+ if (gTasks[taskId].data[0] != 4)
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0));
+}
+
+static void BattleIntroSlide3(u8 taskId)
+{
+ int i;
+
+ gBattle_BG1_X += 8;
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 8));
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ gTasks[taskId].data[4] = BLDALPHA_BLEND(8, 8);
+ if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ {
+ gTasks[taskId].data[2] = 16;
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 1;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 1:
+ if (--gTasks[taskId].data[2] == 0)
+ {
+ gTasks[taskId].data[0]++;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ }
+ break;
+ case 2:
+ gBattle_WIN0V -= 0xFF;
+ if ((gBattle_WIN0V & 0xFF00) == 0x3000)
+ {
+ gTasks[taskId].data[0]++;
+ gTasks[taskId].data[2] = 240;
+ gTasks[taskId].data[3] = 32;
+ gTasks[taskId].data[5] = 1;
+ gIntroSlideFlags &= ~1;
+ }
+ break;
+ case 3:
+ if (gTasks[taskId].data[3])
+ {
+ gTasks[taskId].data[3]--;
+ }
+ else
+ {
+ if ((gTasks[taskId].data[4] & 0xF) && --gTasks[taskId].data[5] == 0)
+ {
+ gTasks[taskId].data[4] += 0xFF;
+ gTasks[taskId].data[5] = 6;
+ }
+ }
+
+ if (gBattle_WIN0V & 0xFF00)
+ gBattle_WIN0V -= 0x3FC;
+
+ if (gTasks[taskId].data[2])
+ gTasks[taskId].data[2] -= 2;
+
+ // Scanline settings have already been set in CB2_InitBattleInternal()
+ for (i = 0; i < 80; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
+
+ for (; i < 160; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2];
+
+ if (!gTasks[taskId].data[2])
+ {
+ gScanlineEffect.state = 3;
+ gTasks[taskId].data[0]++;
+ CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
+ SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
+ }
+ break;
+ case 4:
+ sub_811828C(taskId);
+ break;
+ }
+
+ if (gTasks[taskId].data[0] != 4)
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[4], 0));
+}
+
+static void BattleIntroSlideLink(u8 taskId)
+{
+ int i;
+
+ if (gTasks[taskId].data[0] > 1 && !gTasks[taskId].data[4])
+ {
+ u16 var0 = gBattle_BG1_X & 0x8000;
+ if (var0 || gBattle_BG1_X < 80)
+ {
+ gBattle_BG1_X += 3;
+ gBattle_BG2_X -= 3;
+ }
+ else
+ {
+ CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE);
+ CpuFill32(0, (void *)BG_SCREEN_ADDR(30), BG_SCREEN_SIZE);
+ gTasks[taskId].data[4] = 1;
+ }
+ }
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gTasks[taskId].data[2] = 32;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (--gTasks[taskId].data[2] == 0)
+ {
+ gTasks[taskId].data[0]++;
+ gSprites[gBattleStruct->field_7D].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[gBattleStruct->field_7D].callback = sub_8038B74;
+ gSprites[gBattleStruct->field_7E].oam.objMode = ST_OAM_OBJ_WINDOW;
+ gSprites[gBattleStruct->field_7E].callback = sub_8038B74;
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2);
+ }
+ break;
+ case 2:
+ gBattle_WIN0V -= 0xFF;
+ if ((gBattle_WIN0V & 0xFF00) == 0x3000)
+ {
+ gTasks[taskId].data[0]++;
+ gTasks[taskId].data[2] = 240;
+ gTasks[taskId].data[3] = 32;
+ gIntroSlideFlags &= ~1;
+ }
+ break;
+ case 3:
+ if (gBattle_WIN0V & 0xFF00)
+ gBattle_WIN0V -= 0x3FC;
+
+ if (gTasks[taskId].data[2])
+ gTasks[taskId].data[2] -= 2;
+
+ // Scanline settings have already been set in CB2_InitBattleInternal()
+ for (i = 0; i < 80; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2];
+
+ for (; i < 160; i++)
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2];
+
+ if (!gTasks[taskId].data[2])
+ {
+ gScanlineEffect.state = 3;
+ gTasks[taskId].data[0]++;
+ SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
+ }
+ break;
+ case 4:
+ sub_811828C(taskId);
+ break;
+ }
+}
+
+static void BattleIntroSlidePartner(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ gTasks[taskId].data[2] = 1;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (--gTasks[taskId].data[2] == 0)
+ {
+ gTasks[taskId].data[0]++;
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT512x256);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON);
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
+ gBattle_BG0_Y = -48;
+ gBattle_BG1_X = 240;
+ gBattle_BG2_X = -240;
+ }
+ break;
+ case 2:
+ gBattle_WIN0V += 0x100;
+ if ((gBattle_WIN0V & 0xFF00) != 0x100)
+ gBattle_WIN0V--;
+
+ if ((gBattle_WIN0V & 0xFF00) == 0x2000)
+ {
+ gTasks[taskId].data[0]++;
+ gTasks[taskId].data[2] = 240;
+ gIntroSlideFlags &= ~1;
+ }
+ break;
+ case 3:
+ if ((gBattle_WIN0V & 0xFF00) != 0x4C00)
+ gBattle_WIN0V += 0x3FC;
+
+ if (gTasks[taskId].data[2])
+ gTasks[taskId].data[2] -= 2;
+
+ gBattle_BG1_X = gTasks[taskId].data[2];
+ gBattle_BG2_X = -gTasks[taskId].data[2];
+ if (!gTasks[taskId].data[2])
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ gBattle_BG0_Y += 2;
+ gBattle_BG2_Y += 2;
+ if ((gBattle_WIN0V & 0xFF00) != 0x5000)
+ gBattle_WIN0V += 0xFF;
+
+ if (!gBattle_BG0_Y)
+ {
+ CpuFill32(0, (void *)BG_SCREEN_ADDR(28), BG_SCREEN_SIZE * 4);
+ SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) & ~DISPCNT_WIN1_ON);
+ SetBgAttribute(1, BG_CTRL_ATTR_VISIBLE, 0);
+ SetBgAttribute(2, BG_CTRL_ATTR_VISIBLE, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(28) | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_16COLOR | BGCNT_SCREENBASE(30) | BGCNT_TXT512x256);
+ gScanlineEffect.state = 3;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 5:
+ sub_811828C(taskId);
+ break;
+ }
+}
+
+void sub_8118FBC(int bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset)
+{
+ int i, j;
+ u8 battler = GetBattlerAtPosition(battlerPosition);
+ int offset = tilesOffset;
+ CpuCopy16(gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE);
+ LoadBgTiles(bgId, arg5, 0x1000, tilesOffset);
+ for (i = arg2; i < arg2 + 8; i++)
+ {
+ for (j = arg1; j < arg1 + 8; j++)
+ {
+ arg6[i * 32 + j] = offset | (arg4 << 12);
+ offset++;
+ }
+ }
+
+ LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0);
+}
+
+#ifdef NONMATCHING
+void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7)
+{
+ int i, j;
+ int offset;
+ DmaCopy16(3, gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * arg3, (void *)BG_SCREEN_ADDR(0) + arg5, BG_SCREEN_SIZE);
+ offset = (arg5 >> 5) - (arg7 << 9);
+ for (i = arg1; i < arg1 + 8; i++)
+ {
+ for (j = arg0; j < arg0 + 8; j++)
+ {
+ ((u16 *)BG_VRAM)[i * 32 + j + (arg6 * 0x400) + arg0] = offset | (arg4 << 12);
+ offset++;
+ }
+ }
+}
+#else
+NAKED
+void unref_sub_8119094(u8 arg0, u8 arg1, u8 battlerPosition, u8 arg3, u8 arg4, u16 arg5, u8 arg6, u8 arg7)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ ldr r4, [sp, 0x24]\n\
+ ldr r5, [sp, 0x28]\n\
+ mov r8, r5\n\
+ ldr r5, [sp, 0x2C]\n\
+ ldr r6, [sp, 0x30]\n\
+ mov r9, r6\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r12, r0\n\
+ lsls r1, 24\n\
+ lsls r2, 24\n\
+ lsls r3, 24\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ mov r10, r4\n\
+ mov r7, r8\n\
+ lsls r7, 16\n\
+ lsrs r6, r7, 16\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ mov r0, r9\n\
+ lsls r0, 24\n\
+ mov r9, r0\n\
+ ldr r4, =0x040000d4\n\
+ ldr r0, =gMonSpritesGfxPtr\n\
+ ldr r0, [r0]\n\
+ lsrs r2, 22\n\
+ adds r0, 0x4\n\
+ adds r0, r2\n\
+ lsrs r3, 13\n\
+ ldr r0, [r0]\n\
+ adds r0, r3\n\
+ str r0, [r4]\n\
+ movs r0, 0xC0\n\
+ lsls r0, 19\n\
+ adds r6, r0\n\
+ str r6, [r4, 0x4]\n\
+ ldr r0, =0x80000400\n\
+ str r0, [r4, 0x8]\n\
+ ldr r0, [r4, 0x8]\n\
+ adds r2, r7, 0\n\
+ lsrs r2, 21\n\
+ mov r6, r9\n\
+ lsrs r6, 15\n\
+ subs r4, r2, r6\n\
+ lsrs r0, r1, 24\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x8\n\
+ cmp r0, r1\n\
+ bge _08119148\n\
+ mov r9, r1\n\
+ mov r7, r12\n\
+ lsls r7, 1\n\
+ mov r8, r7\n\
+ lsls r5, 11\n\
+ str r5, [sp]\n\
+_08119110:\n\
+ mov r2, r12\n\
+ adds r3, r2, 0\n\
+ adds r3, 0x8\n\
+ adds r5, r0, 0x1\n\
+ cmp r2, r3\n\
+ bge _08119142\n\
+ mov r1, r10\n\
+ lsls r6, r1, 12\n\
+ lsls r0, 6\n\
+ movs r7, 0xC0\n\
+ lsls r7, 19\n\
+ adds r0, r7\n\
+ ldr r1, [sp]\n\
+ adds r0, r1, r0\n\
+ mov r7, r8\n\
+ adds r1, r7, r0\n\
+ subs r2, r3, r2\n\
+_08119132:\n\
+ adds r0, r4, 0\n\
+ orrs r0, r6\n\
+ strh r0, [r1]\n\
+ adds r4, 0x1\n\
+ adds r1, 0x2\n\
+ subs r2, 0x1\n\
+ cmp r2, 0\n\
+ bne _08119132\n\
+_08119142:\n\
+ adds r0, r5, 0\n\
+ cmp r0, r9\n\
+ blt _08119110\n\
+_08119148:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool");
+}
+#endif
diff --git a/src/battle_main.c b/src/battle_main.c
index 9b7f58023..42f204508 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -4,6 +4,7 @@
#include "battle_arena.h"
#include "battle_controllers.h"
#include "battle_interface.h"
+#include "battle_main.h"
#include "battle_message.h"
#include "battle_pyramid.h"
#include "battle_scripts.h"
@@ -55,20 +56,6 @@
#include "constants/species.h"
#include "constants/trainers.h"
-struct UnknownPokemonStruct4
-{
- /*0x00*/ u16 species;
- /*0x02*/ u16 heldItem;
- /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
- /*0x0F*/ u8 level;
- /*0x10*/ u16 hp;
- /*0x12*/ u16 maxhp;
- /*0x14*/ u32 status;
- /*0x18*/ u32 personality;
- /*0x1C*/ u8 gender;
- /*0x1D*/ u8 language;
-};
-
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern u8 gUnknown_0203CF00[];
@@ -81,7 +68,7 @@ extern const u8 *const gBattlescriptsForBallThrow[];
extern const u8 *const gBattlescriptsForRunningByItem[];
extern const u8 *const gBattlescriptsForUsingItem[];
extern const u8 *const gBattlescriptsForSafariActions[];
-extern const struct ScanlineEffectParams gUnknown_0831AC70;
+extern const struct ScanlineEffectParams gBattleIntroSlideScanlineEffectParams;
// strings
extern const u8 gText_LinkStandby3[];
@@ -633,7 +620,7 @@ static void CB2_InitBattleInternal(void)
gScanlineEffectRegBuffers[1][i] = 0xFF10;
}
- ScanlineEffect_SetParams(gUnknown_0831AC70);
+ ScanlineEffect_SetParams(gBattleIntroSlideScanlineEffectParams);
}
ResetPaletteFade();
@@ -2122,12 +2109,12 @@ static void sub_8038B94(u8 taskId)
if (species != SPECIES_EGG && hp != 0 && status == 0)
r7 |= 1 << i * 2;
- if (species == 0)
+ if (species == SPECIES_NONE)
continue;
if (hp != 0 && (species == SPECIES_EGG || status != 0))
r7 |= 2 << i * 2;
- if (species == 0)
+ if (species == SPECIES_NONE)
continue;
if (species != SPECIES_EGG && hp == 0)
r7 |= 3 << i * 2;
diff --git a/src/battle_pike.c b/src/battle_pike.c
index 4b2a1574d..303146f6a 100644
--- a/src/battle_pike.c
+++ b/src/battle_pike.c
@@ -50,8 +50,6 @@ struct PikeWildMon
u16 moves[4];
};
-extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
-
// IWRAM bss
static IWRAM_DATA u8 sRoomType;
static IWRAM_DATA u8 sStatusMon;
diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c
index 6cc09d713..45aca91c8 100644
--- a/src/battle_pyramid.c
+++ b/src/battle_pyramid.c
@@ -37,9 +37,6 @@ extern void door_upload_tiles(void);
extern const struct MapLayout *const gMapLayouts[];
extern const u16 gUnknown_08D856C8[][16];
-extern const u16 gBattleFrontierHeldItems[];
-extern const struct FacilityMon gBattleFrontierMons[];
-extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
#define TOTAL_ROUNDS 20
#define PICKUP_ITEMS_PER_ROUND 10
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 475b16c98..d399cddbb 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -55,11 +55,11 @@ extern const u8* const gBattleScriptsForMoveEffects[];
extern void ShowSelectMovePokemonSummaryScreen(struct Pokemon* party, u8 monPartyId, u8 monCount, void (*callback)(void), u16 move); // pokemon summary screen
extern u8 sub_81C1B94(void); // pokemon summary screen
extern void sub_81D388C(struct Pokemon* mon, void* statStoreLocation); // pokenav.s
-extern void sub_81D3640(u8 arg0, void* statStoreLocation1, void* statStoreLocation2, u8 arg3, u8 arg4, u8 arg5); // pokenav.s
-extern void sub_81D3784(u8 arg0, void* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4); // pokenav.s
+extern void sub_81D3640(u16 arg0, void* statStoreLocation1, void* statStoreLocation2, u8 arg3, u8 arg4, u8 arg5); // pokenav.s
+extern void sub_81D3784(u16 arg0, void* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4); // pokenav.s
extern u8* GetMonNickname(struct Pokemon* mon, u8* dst); // party_menu
extern void sub_81B8E80(u8 battlerId, u8, u8); // party menu
-extern bool8 sub_81B1250(void); // ?
+extern bool8 IsMultiBattle(void); // ?
extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void);
@@ -7609,7 +7609,7 @@ static void atk8F_forcerandomswitch(void)
}
*(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i;
- if (!sub_81B1250())
+ if (!IsMultiBattle())
sub_803BDA0(gBattlerTarget);
if ((gBattleTypeFlags & BATTLE_TYPE_LINK && gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER)
@@ -8648,7 +8648,7 @@ static void atkAE_healpartystatus(void)
u16 species = GetMonData(&party[i], MON_DATA_SPECIES2);
u8 abilityBit = GetMonData(&party[i], MON_DATA_ALT_ABILITY);
- if (species != 0 && species != SPECIES_EGG)
+ if (species != SPECIES_NONE && species != SPECIES_EGG)
{
u8 ability;
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 5377f39b5..83ced1b7c 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -57,7 +57,7 @@ struct TrainerBattleParameter
};
extern bool32 InTrainerHill(void);
-extern bool32 FieldPoisonEffectIsRunning(void);
+extern bool32 FldEffPoison_IsActive(void);
extern void RestartWildEncounterImmunitySteps(void);
extern void ClearPoisonStepCounter(void);
extern void sub_81BE72C(void);
@@ -338,7 +338,7 @@ static void Task_BattleStart(u8 taskId)
switch (tState)
{
case 0:
- if (!FieldPoisonEffectIsRunning()) // is poison not active?
+ if (!FldEffPoison_IsActive()) // is poison not active?
{
BattleTransition_StartOnField(tTransition);
sub_81BE72C();
diff --git a/src/battle_tent.c b/src/battle_tent.c
index c7e70912c..c358deaa5 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -13,10 +13,7 @@
#include "string_util.h"
#include "constants/items.h"
#include "constants/region_map_sections.h"
-
-extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[];
-extern const struct FacilityMon gSlateportBattleTentMons[];
-extern const u16 gBattleFrontierHeldItems[];
+#include "constants/species.h"
// This file's functions.
static void sub_81B99D4(void);
@@ -296,7 +293,7 @@ static void sub_81B9EC0(void)
heldItems[i] = 0;
}
gFacilityTrainerMons = gSlateportBattleTentMons;
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
i = 0;
while (i != PARTY_SIZE)
{
@@ -309,7 +306,7 @@ static void sub_81B9EC0(void)
break;
if (species[j] == gFacilityTrainerMons[monSetId].species)
{
- if (currSpecies == 0)
+ if (currSpecies == SPECIES_NONE)
currSpecies = gFacilityTrainerMons[monSetId].species;
else
break;
@@ -324,7 +321,7 @@ static void sub_81B9EC0(void)
if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
{
if (gFacilityTrainerMons[monSetId].species == currSpecies)
- currSpecies = 0;
+ currSpecies = SPECIES_NONE;
break;
}
}
diff --git a/src/battle_tower.c b/src/battle_tower.c
index f9dfcabd1..e60783fa2 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -10,6 +10,7 @@
#include "international_string_util.h"
#include "battle.h"
#include "frontier_util.h"
+#include "strings.h"
#include "recorded_battle.h"
#include "easy_chat.h"
#include "gym_leader_rematch.h"
@@ -23,41 +24,14 @@
#include "tv.h"
#include "battle_factory.h"
#include "constants/battle_frontier.h"
+#include "constants/items.h"
#include "constants/trainers.h"
#include "constants/event_objects.h"
#include "constants/moves.h"
#include "constants/species.h"
+#include "constants/easy_chat.h"
-extern void sub_81A4C30(void);
-
-extern const u8 *const *const gUnknown_085DD690[];
-extern const u16 gBattleFrontierHeldItems[];
-extern const u8 sRubyFacilityClassToEmerald[82][2];
extern const u16 gUnknown_085DFA46[];
-extern const struct FacilityMon gSlateportBattleTentMons[];
-extern const struct FacilityMon gVerdanturfBattleTentMons[];
-extern const struct FacilityMon gFallarborBattleTentMons[];
-extern const struct FacilityMon gBattleFrontierMons[];
-extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
-extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[];
-extern const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[];
-extern const struct BattleFrontierTrainer gFallarborBattleTentTrainers[];
-
-struct
-{
- u32 facilityClass;
- const u8 *const *strings;
-} extern const gUnknown_085DD500[50];
-
-struct
-{
- u16 species;
- u8 fixedIV;
- u8 level;
- u8 nature;
- u8 evs[6];
- u16 moves[4];
-} extern const sStevenMons[3];
extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224157[];
extern const u8 MossdeepCity_SpaceCenter_2F_EventScript_224166[];
@@ -102,6 +76,982 @@ static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderT
static u8 SetTentPtrsGetLevel(void);
// Const rom data.
+const u16 gBattleFrontierHeldItems[] =
+{
+ ITEM_NONE,
+ ITEM_KINGS_ROCK,
+ ITEM_SITRUS_BERRY,
+ ITEM_ORAN_BERRY,
+ ITEM_CHESTO_BERRY,
+ ITEM_HARD_STONE,
+ ITEM_FOCUS_BAND,
+ ITEM_PERSIM_BERRY,
+ ITEM_MIRACLE_SEED,
+ ITEM_BERRY_JUICE,
+ ITEM_MACHO_BRACE,
+ ITEM_SILVER_POWDER,
+ ITEM_CHERI_BERRY,
+ ITEM_BLACK_GLASSES,
+ ITEM_BLACK_BELT,
+ ITEM_SOUL_DEW,
+ ITEM_CHOICE_BAND,
+ ITEM_MAGNET,
+ ITEM_SILK_SCARF,
+ ITEM_WHITE_HERB,
+ ITEM_DEEP_SEA_SCALE,
+ ITEM_DEEP_SEA_TOOTH,
+ ITEM_MYSTIC_WATER,
+ ITEM_SHARP_BEAK,
+ ITEM_QUICK_CLAW,
+ ITEM_LEFTOVERS,
+ ITEM_RAWST_BERRY,
+ ITEM_LIGHT_BALL,
+ ITEM_POISON_BARB,
+ ITEM_NEVER_MELT_ICE,
+ ITEM_ASPEAR_BERRY,
+ ITEM_SPELL_TAG,
+ ITEM_BRIGHT_POWDER,
+ ITEM_LEPPA_BERRY,
+ ITEM_SCOPE_LENS,
+ ITEM_TWISTED_SPOON,
+ ITEM_METAL_COAT,
+ ITEM_MENTAL_HERB,
+ ITEM_CHARCOAL,
+ ITEM_PECHA_BERRY,
+ ITEM_SOFT_SAND,
+ ITEM_LUM_BERRY,
+ ITEM_DRAGON_SCALE,
+ ITEM_DRAGON_FANG,
+ ITEM_IAPAPA_BERRY,
+ ITEM_WIKI_BERRY,
+ ITEM_SEA_INCENSE,
+ ITEM_SHELL_BELL,
+ ITEM_SALAC_BERRY,
+ ITEM_LANSAT_BERRY,
+ ITEM_APICOT_BERRY,
+ ITEM_STARF_BERRY,
+ ITEM_LIECHI_BERRY,
+ ITEM_STICK,
+ ITEM_LAX_INCENSE,
+ ITEM_AGUAV_BERRY,
+ ITEM_FIGY_BERRY,
+ ITEM_THICK_CLUB,
+ ITEM_MAGO_BERRY,
+ ITEM_METAL_POWDER,
+ ITEM_PETAYA_BERRY,
+ ITEM_LUCKY_PUNCH,
+ ITEM_GANLON_BERRY
+};
+
+#include "data/battle_frontier/battle_frontier_trainer_mons.h"
+#include "data/battle_frontier/battle_frontier_trainers.h"
+#include "data/battle_frontier/battle_frontier_mons.h"
+
+const u8 gTowerMaleFacilityClasses[30] =
+{
+ FACILITY_CLASS_RUIN_MANIAC,
+ FACILITY_CLASS_TUBER_M,
+ FACILITY_CLASS_COOLTRAINER_M,
+ FACILITY_CLASS_RICH_BOY,
+ FACILITY_CLASS_POKEMANIAC,
+ FACILITY_CLASS_SWIMMER_M,
+ FACILITY_CLASS_BLACK_BELT,
+ FACILITY_CLASS_GUITARIST,
+ FACILITY_CLASS_KINDLER,
+ FACILITY_CLASS_CAMPER,
+ FACILITY_CLASS_BUG_MANIAC,
+ FACILITY_CLASS_PSYCHIC_M,
+ FACILITY_CLASS_GENTLEMAN,
+ FACILITY_CLASS_SCHOOL_KID_M,
+ FACILITY_CLASS_POKEFAN_M,
+ FACILITY_CLASS_EXPERT_M,
+ FACILITY_CLASS_YOUNGSTER,
+ FACILITY_CLASS_FISHERMAN,
+ FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
+ FACILITY_CLASS_DRAGON_TAMER,
+ FACILITY_CLASS_BIRD_KEEPER,
+ FACILITY_CLASS_NINJA_BOY,
+ FACILITY_CLASS_SAILOR,
+ FACILITY_CLASS_COLLECTOR,
+ FACILITY_CLASS_PKMN_BREEDER_M,
+ FACILITY_CLASS_PKMN_RANGER_M,
+ FACILITY_CLASS_BUG_CATCHER,
+ FACILITY_CLASS_HIKER
+};
+
+const u8 gTowerFemaleFacilityClasses[20] =
+{
+ FACILITY_CLASS_AROMA_LADY,
+ FACILITY_CLASS_TUBER_F,
+ FACILITY_CLASS_COOLTRAINER_F,
+ FACILITY_CLASS_HEX_MANIAC,
+ FACILITY_CLASS_LADY,
+ FACILITY_CLASS_BEAUTY,
+ FACILITY_CLASS_PSYCHIC_F,
+ FACILITY_CLASS_SCHOOL_KID_F,
+ FACILITY_CLASS_POKEFAN_F,
+ FACILITY_CLASS_EXPERT_F,
+ FACILITY_CLASS_CYCLING_TRIATHLETE_F,
+ FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ FACILITY_CLASS_BATTLE_GIRL,
+ FACILITY_CLASS_PARASOL_LADY,
+ FACILITY_CLASS_SWIMMER_F,
+ FACILITY_CLASS_PICNICKER,
+ FACILITY_CLASS_POKEMON_BREEDER_F,
+ FACILITY_CLASS_PKMN_RANGER_F,
+ FACILITY_CLASS_LASS
+};
+
+const u8 gTowerMaleTrainerGfxIds[30] =
+{
+ EVENT_OBJ_GFX_HIKER,
+ EVENT_OBJ_GFX_TUBER_M,
+ EVENT_OBJ_GFX_MAN_3,
+ EVENT_OBJ_GFX_RICH_BOY,
+ EVENT_OBJ_GFX_MANIAC,
+ EVENT_OBJ_GFX_RUNNING_TRIATHLETE_M,
+ EVENT_OBJ_GFX_BLACK_BELT,
+ EVENT_OBJ_GFX_MAN_5,
+ EVENT_OBJ_GFX_MAN_5,
+ EVENT_OBJ_GFX_CAMPER,
+ EVENT_OBJ_GFX_MANIAC,
+ EVENT_OBJ_GFX_PSYCHIC_M,
+ EVENT_OBJ_GFX_GENTLEMAN,
+ EVENT_OBJ_GFX_SCHOOL_KID_M,
+ EVENT_OBJ_GFX_POKEFAN_M,
+ EVENT_OBJ_GFX_EXPERT_M,
+ EVENT_OBJ_GFX_YOUNGSTER,
+ EVENT_OBJ_GFX_FISHERMAN,
+ EVENT_OBJ_GFX_CYCLING_TRIATHLETE_M,
+ EVENT_OBJ_GFX_RUNNING_TRIATHLETE_M,
+ EVENT_OBJ_GFX_RUNNING_TRIATHLETE_M,
+ EVENT_OBJ_GFX_MAN_3,
+ EVENT_OBJ_GFX_MAN_5,
+ EVENT_OBJ_GFX_NINJA_BOY,
+ EVENT_OBJ_GFX_SAILOR,
+ EVENT_OBJ_GFX_MANIAC,
+ EVENT_OBJ_GFX_MAN_4,
+ EVENT_OBJ_GFX_CAMPER,
+ EVENT_OBJ_GFX_BUG_CATCHER,
+ EVENT_OBJ_GFX_HIKER
+};
+
+const u8 gTowerFemaleTrainerGfxIds[20] =
+{
+ EVENT_OBJ_GFX_WOMAN_2,
+ EVENT_OBJ_GFX_TUBER_F,
+ EVENT_OBJ_GFX_WOMAN_5,
+ EVENT_OBJ_GFX_HEX_MANIAC,
+ EVENT_OBJ_GFX_WOMAN_2,
+ EVENT_OBJ_GFX_BEAUTY,
+ EVENT_OBJ_GFX_LASS,
+ EVENT_OBJ_GFX_GIRL_3,
+ EVENT_OBJ_GFX_POKEFAN_F,
+ EVENT_OBJ_GFX_EXPERT_F,
+ EVENT_OBJ_GFX_CYCLING_TRIATHLETE_F,
+ EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F,
+ EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F,
+ EVENT_OBJ_GFX_GIRL_3,
+ EVENT_OBJ_GFX_WOMAN_5,
+ EVENT_OBJ_GFX_RUNNING_TRIATHLETE_F,
+ EVENT_OBJ_GFX_PICNICKER,
+ EVENT_OBJ_GFX_WOMAN_2,
+ EVENT_OBJ_GFX_PICNICKER,
+ EVENT_OBJ_GFX_LASS
+};
+
+static const u8 sRubyFacilityClassToEmerald[][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},
+};
+
+static const u8 *const gUnknown_085DCFD8[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244383,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2443E7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244413,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24444B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2444D6
+};
+
+static const u8 *const gUnknown_085DCFEC[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2444EF,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24451E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244549,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24459B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2445C5
+};
+
+static const u8 *const gUnknown_085DD000[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2445E8,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244618,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244643,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24468F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2446B4
+};
+
+static const u8 *const gUnknown_085DD014[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2446E5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24474D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24479E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24480C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2448A7
+};
+
+static const u8 *const gUnknown_085DD028[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2448CD,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2448F5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244939,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244989,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2449E6
+};
+
+static const u8 *const gUnknown_085DD03C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244A23,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244AA9,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244AD6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244B52,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244B93
+};
+
+static const u8 *const gUnknown_085DD050[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244BD2,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244C18,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244C6E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244CD6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244D07
+};
+
+static const u8 *const gUnknown_085DD064[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244D36,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244D82,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244DC6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244DFE,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244E5B
+};
+
+static const u8 *const gUnknown_085DD078[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244E7E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244ECA,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244EF4,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244F4F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244F98
+};
+
+static const u8 *const gUnknown_085DD08C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_244FD3,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245013,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24503D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245087,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2450C0
+};
+
+static const u8 *const gUnknown_085DD0A0[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2450E6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245196,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2451BD,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24522F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24529A
+};
+
+static const u8 *const gUnknown_085DD0B4[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2452EF,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2453B4,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245406,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245464,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2454A3
+};
+
+static const u8 *const gUnknown_085DD0C8[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2454D6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245535,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24555F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2455EC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245656
+};
+
+static const u8 *const gUnknown_085DD0DC[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24568A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2456F5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245740,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2457D9,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24581F
+};
+
+static const u8 *const gUnknown_085DD0F0[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245851,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24589C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2458CE,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245923,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24597F
+};
+
+static const u8 *const gUnknown_085DD104[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2459BE,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2459F7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245A5F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245AB4,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245B3E
+};
+
+static const u8 *const gUnknown_085DD118[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245B79,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245B91,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245BBD,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245C05,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245C2D
+};
+
+static const u8 *const gUnknown_085DD12C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245C66,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245C7F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245CAC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245CE6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245D07
+};
+
+static const u8 *const gUnknown_085DD140[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245D4B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245D60,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245D8D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245DC7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245DF0
+};
+
+static const u8 *const gUnknown_085DD154[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245E20,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245E41,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245E78,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245EBD,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245EEC
+};
+
+static const u8 *const gUnknown_085DD168[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245F2B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245F58,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245F87,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_245FC6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246002
+};
+
+static const u8 *const gUnknown_085DD17C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246020,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246051,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246082,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2460D5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24610D
+};
+
+static const u8 *const gUnknown_085DD190[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24614A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24615D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24617D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2461C7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2461F5
+};
+
+static const u8 *const gUnknown_085DD1A4[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24622A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246244,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24626E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2462AA,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2462E4
+};
+
+static const u8 *const gUnknown_085DD1B8[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24631F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24633C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24636B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2463C5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2463FF
+};
+
+static const u8 *const gUnknown_085DD1CC[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246449,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246478,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24649D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2464EE,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246529
+};
+
+static const u8 *const gUnknown_085DD1E0[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246571,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24658C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2465B5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246605,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24662A
+};
+
+static const u8 *const gUnknown_085DD1F4[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246662,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246686,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2466B4,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2466E6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24670A
+};
+
+static const u8 *const gUnknown_085DD208[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246741,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246760,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246791,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2467C4,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2467E6
+};
+
+static const u8 *const gUnknown_085DD21C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2467FF,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246831,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246864,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2468A7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2468FE
+};
+
+static const u8 *const gUnknown_085DD230[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24692B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24694B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24697C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2469B4,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2469F1
+};
+
+static const u8 *const gUnknown_085DD244[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246A22,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246A4E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246A85,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246ACF,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246AF7
+};
+
+static const u8 *const gUnknown_085DD258[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246B2B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246B3F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246B6B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246BB2,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246BE9
+};
+
+static const u8 *const gUnknown_085DD26C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246C22,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246C35,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246C6C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246CB3,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246CE9
+};
+
+static const u8 *const gUnknown_085DD280[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246D2D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246D3F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246D6A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246D9E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246DD3
+};
+
+static const u8 *const gUnknown_085DD294[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246E1A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246E39,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246E64,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246EB6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246EEE
+};
+
+static const u8 *const gUnknown_085DD2A8[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246F21,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246F4C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246F7B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_246FCC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247013
+};
+
+static const u8 *const gUnknown_085DD2BC[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24705B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24707D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2470B2,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2470FD,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24712A
+};
+
+static const u8 *const gUnknown_085DD2D0[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24716C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24718D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2471C7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2471FB,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247238
+};
+
+static const u8 *const gUnknown_085DD2E4[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247268,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247291,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2472C7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247313,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247348
+};
+
+static const u8 *const gUnknown_085DD2F8[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24737A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24738F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2473C6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2473FB,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247438
+};
+
+static const u8 *const gUnknown_085DD30C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247470,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247484,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2474AF,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2474EC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24751D
+};
+
+static const u8 *const gUnknown_085DD320[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24754A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24755C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24758B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2475BC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2475D5
+};
+
+static const u8 *const gUnknown_085DD334[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24760D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247629,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247655,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24769B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2476ED
+};
+
+static const u8 *const gUnknown_085DD348[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247724,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247749,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24777A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2477CE,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247807
+};
+
+static const u8 *const gUnknown_085DD35C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247838,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247854,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247889,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2478DD,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24790D
+};
+
+static const u8 *const gUnknown_085DD370[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247942,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24795F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247991,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2479CE,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247A18
+};
+
+static const u8 *const gUnknown_085DD384[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247A51,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247A76,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247AA1,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247AE3,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247B16
+};
+
+static const u8 *const gUnknown_085DD398[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247B3E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247B62,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247B9B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247BE7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247C23
+};
+
+static const u8 *const gUnknown_085DD3AC[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247C4E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247C8C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247CB2,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247D07,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247D4E
+};
+
+static const u8 *const gUnknown_085DD3C0[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247D97,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247DC7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247DFE,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247E3E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247E7E
+};
+
+static const u8 *const gUnknown_085DD3D4[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247EA1,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247EB5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247EE9,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247F3F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247F6D
+};
+
+static const u8 *const gUnknown_085DD3E8[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247FA3,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247FB7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_247FE9,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248031,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24805E
+};
+
+static const u8 *const gUnknown_085DD3FC[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24808D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2480AB,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2480DC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248128,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248151
+};
+
+static const u8 *const gUnknown_085DD410[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24818E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2481A9,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2481E1,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248221,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24824F
+};
+
+static const u8 *const gUnknown_085DD424[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248297,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2482B1,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2482DC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248321,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24833D
+};
+
+static const u8 *const gUnknown_085DD438[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248369,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24838D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2483C1,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248401,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248431
+};
+
+static const u8 *const gUnknown_085DD44C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248467,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248477,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2484AC,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2484E7,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248517
+};
+
+static const u8 *const gUnknown_085DD460[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248553,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24856A,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24857D,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2485E5,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248614
+};
+
+static const u8 *const gUnknown_085DD474[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24864E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248661,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248671,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2486C6,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2486FF
+};
+
+static const u8 *const gUnknown_085DD488[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248725,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248751,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248781,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2487C9,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2487F7
+};
+
+static const u8 *const gUnknown_085DD49C[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248829,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24885B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248892,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2488D8,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248908
+};
+
+static const u8 *const gUnknown_085DD4B0[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24894B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24895F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_24896F,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2489BD,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_2489E7
+};
+
+static const u8 *const gUnknown_085DD4C4[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248A10,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248A40,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248A72,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248AC0,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248AEB
+};
+
+static const u8 *const gUnknown_085DD4D8[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248B22,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248B39,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248B4C,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248BB4,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248BEE
+};
+
+static const u8 *const gUnknown_085DD4EC[] =
+{
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248C2E,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248C5B,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248C90,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248CCF,
+ BattleFrontier_BattleTowerMultiBattleRoom_Text_248D04
+};
+
+struct
+{
+ u32 facilityClass;
+ const u8 *const *strings;
+} const gUnknown_085DD500[] =
+{
+ {FACILITY_CLASS_LASS, gUnknown_085DD118},
+ {FACILITY_CLASS_YOUNGSTER, gUnknown_085DD12C},
+ {FACILITY_CLASS_HIKER, gUnknown_085DD140},
+ {FACILITY_CLASS_BEAUTY, gUnknown_085DD154},
+ {FACILITY_CLASS_FISHERMAN, gUnknown_085DD168},
+ {FACILITY_CLASS_LADY, gUnknown_085DD17C},
+ {FACILITY_CLASS_CYCLING_TRIATHLETE_F, gUnknown_085DD190},
+ {FACILITY_CLASS_BUG_CATCHER, gUnknown_085DD1A4},
+ {FACILITY_CLASS_SCHOOL_KID_M, gUnknown_085DD1B8},
+ {FACILITY_CLASS_RICH_BOY, gUnknown_085DD1CC},
+ {FACILITY_CLASS_BLACK_BELT, gUnknown_085DD1E0},
+ {FACILITY_CLASS_TUBER_F, gUnknown_085DD1F4},
+ {FACILITY_CLASS_HEX_MANIAC, gUnknown_085DD208},
+ {FACILITY_CLASS_PKMN_BREEDER_M, gUnknown_085DD21C},
+ {FACILITY_CLASS_RUNNING_TRIATHLETE_F, gUnknown_085DD230},
+ {FACILITY_CLASS_RUNNING_TRIATHLETE_M, gUnknown_085DD244},
+ {FACILITY_CLASS_BATTLE_GIRL, gUnknown_085DD258},
+ {FACILITY_CLASS_CYCLING_TRIATHLETE_M, gUnknown_085DD26C},
+ {FACILITY_CLASS_TUBER_M, gUnknown_085DD280},
+ {FACILITY_CLASS_GUITARIST, gUnknown_085DD294},
+ {FACILITY_CLASS_GENTLEMAN, gUnknown_085DD2A8},
+ {FACILITY_CLASS_POKEFAN_M, gUnknown_085DD2BC},
+ {FACILITY_CLASS_EXPERT_M, gUnknown_085DD2D0},
+ {FACILITY_CLASS_EXPERT_F, gUnknown_085DD2E4},
+ {FACILITY_CLASS_DRAGON_TAMER, gUnknown_085DD2F8},
+ {FACILITY_CLASS_BIRD_KEEPER, gUnknown_085DD30C},
+ {FACILITY_CLASS_NINJA_BOY, gUnknown_085DD320},
+ {FACILITY_CLASS_PARASOL_LADY, gUnknown_085DD334},
+ {FACILITY_CLASS_BUG_MANIAC, gUnknown_085DD348},
+ {FACILITY_CLASS_SAILOR, gUnknown_085DD35C},
+ {FACILITY_CLASS_COLLECTOR, gUnknown_085DD370},
+ {FACILITY_CLASS_PKMN_RANGER_M, gUnknown_085DD384},
+ {FACILITY_CLASS_PKMN_RANGER_F, gUnknown_085DD398},
+ {FACILITY_CLASS_AROMA_LADY, gUnknown_085DD3AC},
+ {FACILITY_CLASS_RUIN_MANIAC, gUnknown_085DD3C0},
+ {FACILITY_CLASS_COOLTRAINER_M, gUnknown_085DD3D4},
+ {FACILITY_CLASS_COOLTRAINER_F, gUnknown_085DD3E8},
+ {FACILITY_CLASS_POKEMANIAC, gUnknown_085DD3FC},
+ {FACILITY_CLASS_KINDLER, gUnknown_085DD410},
+ {FACILITY_CLASS_CAMPER, gUnknown_085DD424},
+ {FACILITY_CLASS_PICNICKER, gUnknown_085DD438},
+ {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_POKEFAN_F, gUnknown_085DD49C},
+ {FACILITY_CLASS_SWIMMER_F, gUnknown_085DD4B0},
+ {FACILITY_CLASS_SWIMMING_TRIATHLETE_M, gUnknown_085DD4C4},
+ {FACILITY_CLASS_SWIMMING_TRIATHLETE_F, gUnknown_085DD4D8},
+ {FACILITY_CLASS_SWIMMER_M, gUnknown_085DD4EC}
+};
+
+static const u8 *const *const gUnknown_085DD690[] =
+{
+ gUnknown_085DCFD8,
+ gUnknown_085DCFEC,
+ gUnknown_085DD000,
+ gUnknown_085DD014,
+ gUnknown_085DD028,
+ gUnknown_085DD03C,
+ gUnknown_085DD050,
+ gUnknown_085DD064,
+ gUnknown_085DD078,
+ gUnknown_085DD08C,
+ gUnknown_085DD0A0,
+ gUnknown_085DD0B4,
+ gUnknown_085DD0C8,
+ gUnknown_085DD0DC,
+ gUnknown_085DD0F0,
+ gUnknown_085DD104
+};
+
+struct
+{
+ u16 species;
+ u8 fixedIV;
+ u8 level;
+ u8 nature;
+ u8 evs[6];
+ u16 moves[4];
+} const sStevenMons[3] =
+{
+ {
+ .species = SPECIES_METANG,
+ .fixedIV = 31,
+ .level = 42,
+ .nature = NATURE_BRAVE,
+ .evs = {0, 252, 252, 0, 6, 0},
+ .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW}
+ },
+ {
+ .species = SPECIES_SKARMORY,
+ .fixedIV = 31,
+ .level = 43,
+ .nature = NATURE_IMPISH,
+ .evs = {252, 0, 0, 0, 6, 252},
+ .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING}
+ },
+ {
+ .species = SPECIES_AGGRON,
+ .fixedIV = 31,
+ .level = 44,
+ .nature = NATURE_ADAMANT,
+ .evs = {0, 252, 0, 0, 252, 6},
+ .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW}
+ }
+};
+
+#include "data/battle_frontier/battle_tent.h"
+
static void (* const gUnknown_085DF96C[])(void) =
{
sub_8161F94,
@@ -1197,7 +2147,7 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId)
void FrontierSpeechToString(const u16 *words)
{
ConvertEasyChatWordsToString(gStringVar4, words, 3, 2);
- if (GetStringWidth(1, gStringVar4, -1) > 204)
+ if (GetStringWidth(1, gStringVar4, -1) > 204u)
{
s32 i = 0;
@@ -2295,7 +3245,7 @@ static void FillPartnerParty(u16 trainerId)
for (i = 0; i < 2; i++)
{
struct EmeraldBattleTowerRecord *record = &gSaveBlock2Ptr->frontier.towerRecords[trainerId];
- struct UnknownPokemonStruct monData = record->party[gSaveBlock2Ptr->frontier.field_CB4[18 + i]];
+ struct BattleTowerPokemon monData = record->party[gSaveBlock2Ptr->frontier.field_CB4[18 + i]];
StringCopy(trainerName, record->name);
if (record->language == LANGUAGE_JAPANESE)
{
@@ -2347,12 +3297,13 @@ bool32 RubyBattleTowerRecordToEmerald(struct RSBattleTowerRecord *src, struct Em
{
dst->lvlMode = src->lvlMode;
dst->winStreak = src->winStreak;
- for (i = 0; i < (signed) ARRAY_COUNT(sRubyFacilityClassToEmerald); i++)
+ // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
+ for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
{
if (sRubyFacilityClassToEmerald[i][0] == src->facilityClass)
break;
}
- if (i != ARRAY_COUNT(sRubyFacilityClassToEmerald))
+ if (i != FACILITY_CLASSES_COUNT)
dst->facilityClass = sRubyFacilityClassToEmerald[i][1];
else
dst->facilityClass = FACILITY_CLASS_YOUNGSTER;
@@ -2395,12 +3346,13 @@ bool32 EmeraldBattleTowerRecordToRuby(struct EmeraldBattleTowerRecord *src, stru
{
dst->lvlMode = src->lvlMode;
dst->winStreak = src->winStreak;
- for (i = 0; i < (signed) ARRAY_COUNT(sRubyFacilityClassToEmerald); i++)
+ // BUG: Reading outside the array. sRubyFacilityClassToEmerald has less than FACILITY_CLASSES_COUNT entries.
+ for (i = 0; i < FACILITY_CLASSES_COUNT; i++)
{
if (sRubyFacilityClassToEmerald[i][1] == src->facilityClass)
break;
}
- if (i != ARRAY_COUNT(sRubyFacilityClassToEmerald))
+ if (i != FACILITY_CLASSES_COUNT)
dst->facilityClass = sRubyFacilityClassToEmerald[i][0];
else
dst->facilityClass = 0x24; // FACILITY_CLASS_YOUNGSTER in Ruby/Sapphire.
diff --git a/src/battle_transition.c b/src/battle_transition.c
index f74102467..37a8cd63f 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -59,7 +59,7 @@ typedef bool8 (*TransitionSpriteCallback)(struct Sprite *sprite);
extern const struct OamData gEventObjectBaseOam_32x32;
-extern void sub_80AC3D0(void);
+extern void SetWeatherScreenFadeOut(void);
// this file's functions
static void LaunchBattleTransitionTask(u8 transitionId);
@@ -981,7 +981,7 @@ static void Task_BattleTransitionMain(u8 taskId)
static bool8 Transition_Phase1(struct Task *task)
{
- sub_80AC3D0();
+ SetWeatherScreenFadeOut();
CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
if (sPhase1_Tasks[task->tTransitionId] != NULL)
{
diff --git a/src/battle_util.c b/src/battle_util.c
index 4c9ef75d9..2ddd4f550 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -17,13 +17,13 @@
#include "string_util.h"
#include "battle_message.h"
#include "constants/battle_string_ids.h"
+#include "constants/weather.h"
#include "battle_ai_script_commands.h"
#include "battle_controllers.h"
#include "event_data.h"
#include "link.h"
#include "berry.h"
-
-extern u8 weather_get_current(void);
+#include "field_weather.h"
// rom const data
static const u16 sSoundMovesTable[] =
@@ -1827,11 +1827,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
case ABILITYEFFECT_SWITCH_IN_WEATHER:
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
{
- switch (weather_get_current())
+ switch (GetCurrentWeather())
{
- case 3:
- case 5:
- case 13:
+ case WEATHER_RAIN_LIGHT:
+ case WEATHER_RAIN_MED:
+ case WEATHER_RAIN_HEAVY:
if (!(gBattleWeather & WEATHER_RAIN_ANY))
{
gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT);
@@ -1840,7 +1840,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
effect++;
}
break;
- case 8:
+ case WEATHER_SANDSTORM:
if (!(gBattleWeather & WEATHER_SANDSTORM_ANY))
{
gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
@@ -1849,7 +1849,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
effect++;
}
break;
- case 12:
+ case WEATHER_DROUGHT:
if (!(gBattleWeather & WEATHER_SUN_ANY))
{
gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY);
@@ -1862,7 +1862,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
}
if (effect)
{
- gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current();
+ gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather();
BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
}
break;
diff --git a/src/battle_util2.c b/src/battle_util2.c
index a9891814c..70c722298 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -42,7 +42,7 @@ void AllocateBattleResources(void)
if (gBattleTypeFlags & BATTLE_TYPE_SECRET_BASE)
{
- u16 currSecretBaseId = VarGet(VAR_0x4054);
+ u16 currSecretBaseId = VarGet(VAR_CURRENT_SECRET_BASE);
CreateSecretBaseEnemyParty(&gSaveBlock1Ptr->secretBases[currSecretBaseId]);
}
}
diff --git a/src/birch_pc.c b/src/birch_pc.c
index 3148832be..5179b1920 100644
--- a/src/birch_pc.c
+++ b/src/birch_pc.c
@@ -66,20 +66,20 @@ const u8 *GetPokedexRatingText(u16 count)
return gBirchDexRatingText_LessThan200;
if (count == 200)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
- || GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), FLAG_GET_CAUGHT)
+ || GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), FLAG_GET_CAUGHT)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
- if (count == 201)
+ if (count == HOENN_DEX_COUNT - 1)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
- && GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200.
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), FLAG_GET_CAUGHT)
+ && GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), FLAG_GET_CAUGHT)) // If both of these flags are enabled, it means the actual count is less than 200.
return gBirchDexRatingText_LessThan200;
return gBirchDexRatingText_DexCompleted;
}
- if (count == 202)
- return gBirchDexRatingText_DexCompleted; // Hoenn dex is considered complete, even though the hoenn dex count is 210.
+ if (count == HOENN_DEX_COUNT)
+ return gBirchDexRatingText_DexCompleted;
return gBirchDexRatingText_LessThan10;
}
diff --git a/src/blit.c b/src/blit.c
index b4d5f7de5..26a63fe9b 100644
--- a/src/blit.c
+++ b/src/blit.c
@@ -1,12 +1,12 @@
#include "global.h"
#include "blit.h"
-void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height)
+void BlitBitmapRect4BitWithoutColorKey(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height)
{
BlitBitmapRect4Bit(src, dst, srcX, srcY, dstX, dstY, width, height, 0xFF);
}
-void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey)
+void BlitBitmapRect4Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey)
{
s32 xEnd;
s32 yEnd;
@@ -14,7 +14,7 @@ void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 sr
s32 multiplierDstY;
s32 loopSrcY, loopDstY;
s32 loopSrcX, loopDstX;
- u8 *pixelsSrc;
+ const u8 *pixelsSrc;
u8 *pixelsDst;
s32 toOrr;
s32 toAnd;
@@ -103,7 +103,7 @@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 hei
}
}
-void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
+void BlitBitmapRect4BitTo8Bit(const struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
{
s32 palOffsetBits;
s32 xEnd;
@@ -112,7 +112,7 @@ void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX,
s32 multiplierDstY;
s32 loopSrcY, loopDstY;
s32 loopSrcX, loopDstX;
- u8 *pixelsSrc;
+ const u8 *pixelsSrc;
u8 *pixelsDst;
s32 colorKeyBits;
diff --git a/src/bug.c b/src/bug.c
index 59b31b37d..31d1a9740 100644
--- a/src/bug.c
+++ b/src/bug.c
@@ -252,7 +252,7 @@ void sub_81104E4(struct Sprite *sprite)
if (IsContest())
gBattleAnimArgs[2] /= 2;
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[1] = sprite->pos1.x;
sprite->data[3] = sprite->pos1.y;
@@ -274,7 +274,7 @@ void sub_81104E4(struct Sprite *sprite)
static void sub_811057C(struct Sprite *sprite)
{
- if (TranslateAnimLinear(sprite))
+ if (AnimTranslateLinear(sprite))
{
DestroyAnimSprite(sprite);
return;
@@ -389,13 +389,13 @@ void AnimTranslateStinger(struct Sprite *sprite)
}
}
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
lVarX = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
lVarY = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
rot = ArcTan2Neg(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y);
rot += 0xC000;
- sub_80A73E0(sprite, FALSE, 0x100, 0x100, rot);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rot);
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[2] = lVarX;
@@ -414,7 +414,7 @@ void AnimTranslateStinger(struct Sprite *sprite)
// arg 5: wave amplitude
void AnimMissileArc(struct Sprite *sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
if (GetBattlerSide(gBattleAnimAttacker))
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -458,7 +458,7 @@ static void AnimMissileArcStep(struct Sprite *sprite)
u16 rotation = ArcTan2Neg(sprite->pos1.x + sprite->pos2.x - x2,
sprite->pos1.y + sprite->pos2.y - y2);
rotation += 0xC000;
- sub_80A73E0(sprite, FALSE, 0x100, 0x100, rotation);
+ TrySetSpriteRotScale(sprite, FALSE, 0x100, 0x100, rotation);
for (i = 0; i < 8; i++)
data[i] = tempData[i];
@@ -479,6 +479,6 @@ void sub_8110994(struct Sprite *sprite)
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + 18;
}
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
diff --git a/src/cable_car.c b/src/cable_car.c
new file mode 100755
index 000000000..207a0c22d
--- /dev/null
+++ b/src/cable_car.c
@@ -0,0 +1,1006 @@
+#include "global.h"
+#include "bg.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "field_weather.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "alloc.h"
+#include "main.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "constants/event_objects.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/weather.h"
+
+struct CableCar
+{
+ u8 taskId;
+ u8 state;
+ u8 weather;
+ u16 unk4;
+ u16 timer;
+ u8 bg0HorizontalOffset;
+ u8 bg0VerticalOffset;
+ u8 fillerA[0x2];
+ u8 bg1HorizontalOffset;
+ u8 bg1VerticalOffset;
+ u8 fillerE[0x6];
+ u8 bg3HorizontalOffset;
+ u8 bg3VerticalOffset;
+ u8 filler16[0x2];
+ u8 unk18;
+ u8 unk19;
+ u8 unk1A;
+ u8 unk1B;
+ u8 unk1C;
+ u8 unk1D;
+ u8 unk1E;
+ u8 unk1F;
+ u8 unk20;
+ u16 unk22[9][12];
+ u8 fillerFA[0x2];
+ /*0x00FC*/ u16 bgTilemapBuffers[4][0x800];
+ /*0x40FC*/ u16 *mtChimneyTilemap;
+ /*0x4100*/ u16 *treeTilemap;
+ /*0x4104*/ u16 *mountainTilemap;
+ /*0x4108*/ const u16 *pylonHookTilemapEntries;
+ /*0x410C*/ u8 *pylonStemTilemap;
+};
+
+static EWRAM_DATA struct CableCar *sCableCar = NULL;
+EWRAM_DATA u8 gUnknown_0203ABB0 = 0;
+EWRAM_DATA u8 gUnknown_0203ABB1 = 0;
+EWRAM_DATA u8 gUnknown_0203ABB2 = 0;
+EWRAM_DATA u8 gUnknown_0203ABB3 = 0;
+EWRAM_DATA u8 gUnknown_0203ABB4 = 0;
+EWRAM_DATA u8 gUnknown_0203ABB5 = 0;
+
+static void CableCarMainCallback_Setup(void);
+static void sub_8150B6C(u8);
+static void LoadCableCarSprites(void);
+static void sub_81514C8(u8);
+static void sub_81503E4(u8);
+static void sub_8150550(u8);
+static void sub_8150664(u8);
+static void CableCarVblankCallback(void);
+static void CableCarMainCallback_Run(void);
+static void sub_815115C(void);
+static void sub_81511B8(void);
+static void sub_8150868(struct Sprite *);
+static void nullsub_58(struct Sprite *);
+static void sub_8151214(void);
+static void sub_8151388(void);
+
+const struct BgTemplate gCableCarBgTemplates[4] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+};
+
+const u8 gCableCarMtChimneyTilemap[] = INCBIN_U8("graphics/misc/cable_car_mt_chimney_map.bin.lz");
+const u8 gCableCarTreeTilemap[] = INCBIN_U8("graphics/misc/cable_car_tree_map.bin.lz");
+const u8 gCableCarMountainTilemap[] = INCBIN_U8("graphics/misc/cable_car_mountain_map.bin.lz");
+
+const u16 gCableCarPylonHookTilemapEntries[] = {
+ 0x3000,
+ 0x3001,
+ 0x3002,
+ 0x3003,
+ 0x3004,
+ 0x3005,
+ 0x3006,
+ 0x3007,
+ 0x3008,
+ 0x3009,
+};
+
+const u8 gCableCarPylonStemTilemap[] = INCBIN_U8("graphics/misc/cable_car_pylon_stem_map.bin.lz");
+
+const struct CompressedSpriteSheet gUnknown_085CDB54[] = {
+ { gCableCar_Gfx, 0x800, 1 },
+ { gCableCarDoor_Gfx, 0x40, 2 },
+ { gCableCarCord_Gfx, 0x80, 3 },
+ { },
+};
+
+const struct SpritePalette gUnknown_085CDB74[] = {
+ { gCableCar_Pal, 1 },
+ { }
+};
+
+const struct OamData gOamData_85CDB84 = {
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .size = 3,
+ .priority = 2
+};
+
+const struct OamData gOamData_85CDB8C = {
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .shape = ST_OAM_H_RECTANGLE,
+ .priority = 2
+};
+
+const struct OamData gOamData_85CDB94 = {
+ .affineMode = ST_OAM_AFFINE_DOUBLE,
+ .size = 1,
+ .priority = 2
+};
+
+const struct SpriteTemplate gSpriteTemplate_85CDB9C[] =
+{
+ {
+ .tileTag = 1,
+ .paletteTag = 1,
+ .oam = &gOamData_85CDB84,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8150868,
+ },
+ {
+ .tileTag = 2,
+ .paletteTag = 1,
+ .oam = &gOamData_85CDB8C,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8150868,
+ },
+};
+
+const struct SpriteTemplate gSpriteTemplate_85CDBCC = {
+ .tileTag = 3,
+ .paletteTag = 1,
+ .oam = &gOamData_85CDB94,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = nullsub_58,
+};
+
+static void CableCarTask1(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CableCarMainCallback_Setup);
+ DestroyTask(taskId);
+ }
+}
+
+void CableCar(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(CableCarTask1, 1);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
+}
+
+static void CableCarMainCallback_Setup(void)
+{
+ u16 imebak;
+ u8 i = 0;
+ int sizeOut = 0;
+
+ switch (gMain.state)
+ {
+ case 0:
+ default:
+ SetVBlankCallback(NULL);
+ sub_8150B6C(0);
+ ScanlineEffect_Stop();
+ DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
+ DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16Defvars(3, 0, (void *)PLTT, PLTT_SIZE);
+ sCableCar = AllocZeroed(sizeof(*sCableCar));
+ gMain.state++;
+ break;
+ case 1:
+ ResetSpriteData();
+ ResetTasks();
+ FreeAllSpritePalettes();
+ ResetPaletteFade();
+ reset_temp_tile_data_buffers();
+ StartWeather();
+ for (i = 0; i < 20; i++)
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+
+ InitMapMusic();
+ ResetMapMusic();
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gCableCarBgTemplates, ARRAY_COUNT(gCableCarBgTemplates));
+ SetBgTilemapBuffer(0, sCableCar->bgTilemapBuffers[0]);
+ SetBgTilemapBuffer(1, sCableCar->bgTilemapBuffers[1]);
+ SetBgTilemapBuffer(2, sCableCar->bgTilemapBuffers[2]);
+ SetBgTilemapBuffer(3, sCableCar->bgTilemapBuffers[3]);
+ gSpriteCoordOffsetX = gSpriteCoordOffsetY = 0;
+ gMain.state++;
+ break;
+ case 2:
+ for (i = 0; i < 3; i++)
+ LoadCompressedSpriteSheet(&gUnknown_085CDB54[i]);
+
+ LoadSpritePalettes(gUnknown_085CDB74);
+ sCableCar->mtChimneyTilemap = malloc_and_decompress(gCableCarMtChimneyTilemap, &sizeOut);
+ sCableCar->treeTilemap = malloc_and_decompress(gCableCarTreeTilemap, &sizeOut);
+ sCableCar->mountainTilemap = malloc_and_decompress(gCableCarMountainTilemap, &sizeOut);
+ sCableCar->pylonStemTilemap = malloc_and_decompress(gCableCarPylonStemTilemap, &sizeOut);
+ sCableCar->pylonHookTilemapEntries = gCableCarPylonHookTilemapEntries;
+ decompress_and_copy_tile_data_to_vram(0, gUnknown_08DBA5B8, 0, 0, 0);
+ gMain.state++;
+ break;
+ case 3:
+ if (!free_temp_tile_data_buffers_if_possible())
+ {
+ LoadPalette(gUnknown_08DBA518, 0, 0x80);
+ gMain.state++;
+ }
+ break;
+ case 4:
+ LoadCableCarSprites();
+ RunTasks();
+ gMain.state++;
+ break;
+ case 5:
+ if (sCableCar->weather == WEATHER_ASH)
+ {
+ gMain.state++;
+ }
+ else if (gWeatherPtr->sprites.s2.ashSprites[0])
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i])
+ gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0;
+ }
+
+ gMain.state++;
+ }
+ break;
+ case 6:
+ CopyToBgTilemapBufferRect_ChangePalette(1, sCableCar->treeTilemap, 0, 17, 32, 15, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(2, sCableCar->mountainTilemap, 0, 0, 30, 20, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 20, 17);
+ gMain.state++;
+ break;
+ case 7:
+ sub_81514C8(gSpecialVar_0x8004);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x48, 0, 14, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x6C, 12, 17, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x90, 24, 20, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x0, 0, 17, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x24, 0, 20, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x0, 12, 20, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x24, 12, 23, 12, 3, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x0, 24, 23, 12, 3, 17);
+ gMain.state++;
+ break;
+ case 8:
+ BeginNormalPaletteFade(0xFFFFFFFF, 3, 16, 0, RGB(0, 0, 0));
+ FadeInNewBGM(MUS_ROPEWAY, 1);
+ sub_8150B6C(1);
+ gMain.state++;
+ break;
+ case 9:
+ imebak = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = imebak;
+ SetVBlankCallback(CableCarVblankCallback);
+ SetMainCallback2(CableCarMainCallback_Run);
+ CreateTask(sub_81503E4, 0);
+ if (gSpecialVar_0x8004 == 0)
+ sCableCar->taskId = CreateTask(sub_8150550, 1);
+ else
+ sCableCar->taskId = CreateTask(sub_8150664, 1);
+ break;
+ }
+}
+
+static void CableCarMainCallback_Run(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ MapMusicMain();
+}
+
+static void CleanupCableCar(void)
+{
+ u8 i = 0;
+
+ HideBg(0);
+ HideBg(1);
+ HideBg(2);
+ HideBg(3);
+ sub_8150B6C(0);
+ gSpriteCoordOffsetX = 0;
+ sub_80AB130(WEATHER_NONE);
+ for (i = 0; i < 20; i++)
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+
+ ResetTasks();
+ ResetSpriteData();
+ ResetPaletteFade();
+ UnsetBgTilemapBuffer(0);
+ UnsetBgTilemapBuffer(1);
+ UnsetBgTilemapBuffer(2);
+ UnsetBgTilemapBuffer(3);
+ ResetBgsAndClearDma3BusyFlags(0);
+ sCableCar->pylonHookTilemapEntries = NULL;
+ FREE_AND_SET_NULL(sCableCar->pylonStemTilemap);
+ FREE_AND_SET_NULL(sCableCar->mountainTilemap);
+ FREE_AND_SET_NULL(sCableCar->treeTilemap);
+ FREE_AND_SET_NULL(sCableCar->mtChimneyTilemap);
+ FREE_AND_SET_NULL(sCableCar);
+ DmaFillLarge16(3, 0, (void *)VRAM, VRAM_SIZE, 0x1000);
+ DmaFill32Defvars(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16Defvars(3, 0, (void *)PLTT, PLTT_SIZE);
+ WarpIntoMap();
+ gFieldCallback = NULL;
+ SetMainCallback2(CB2_LoadMap);
+}
+
+static void sub_81503E4(u8 taskId)
+{
+ u8 i = 0;
+
+ sCableCar->timer++;
+ switch (sCableCar->state)
+ {
+ case 0:
+ if (sCableCar->timer == sCableCar->unk4)
+ {
+ ChangeWeather(sCableCar->weather);
+ sCableCar->state = 1;
+ }
+ break;
+ case 1:
+ switch (sCableCar->weather)
+ {
+ case WEATHER_ASH:
+ if (gWeatherPtr->sprites.s2.ashSprites[0] != NULL && gWeatherPtr->sprites.s2.ashSprites[0]->oam.priority != 0)
+ {
+ for (; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0;
+ }
+ }
+ sCableCar->state = 2;
+ }
+ break;
+ case WEATHER_SUNNY:
+ if (gWeatherPtr->currWeather == WEATHER_SUNNY)
+ {
+ sCableCar->state = 2;
+ }
+ else if (sCableCar->timer >= sCableCar->unk4 + 8)
+ {
+ for (; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i]->invisible ^= TRUE;
+ }
+ }
+ }
+ break;
+ }
+ break;
+ case 2:
+ if (sCableCar->timer == 570)
+ {
+ sCableCar->state = 3;
+ BeginNormalPaletteFade(0xFFFFFFFF, 3, 0, 16, RGB(0, 0, 0));
+ FadeOutBGM(4);
+ }
+ break;
+ case 3:
+ if (!gPaletteFade.active)
+ {
+ sCableCar->state = 0xFF;
+ }
+ break;
+ case 0xFF:
+ SetVBlankCallback(NULL);
+ DestroyTask(taskId);
+ DestroyTask(sCableCar->taskId);
+ SetMainCallback2(CleanupCableCar);
+ break;
+ }
+}
+
+static void sub_8150550(u8 taskId)
+{
+ if (sCableCar->state != 0xFF)
+ {
+ sCableCar->bg3HorizontalOffset--;
+ if ((sCableCar->timer % 2) == 0)
+ sCableCar->bg3VerticalOffset--;
+
+ if ((sCableCar->timer % 8) == 0)
+ {
+ sCableCar->bg1HorizontalOffset--;
+ sCableCar->bg1VerticalOffset--;
+ }
+
+ switch (sCableCar->bg3HorizontalOffset)
+ {
+ case 175:
+ FillBgTilemapBufferRect(3, 0, 0, 22, 2, 10, 17);
+ break;
+ case 40:
+ FillBgTilemapBufferRect(3, 0, 3, 0, 2, 2, 17);
+ break;
+ case 32:
+ FillBgTilemapBufferRect(3, 0, 2, 0, 1, 2, 17);
+ break;
+ case 16:
+ CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonHookTilemapEntries, 0, 0, 5, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17);
+ sCableCar->bg3VerticalOffset = 64;
+ break;
+ }
+ }
+
+ sub_815115C();
+ gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 1) % 128;
+}
+
+static void sub_8150664(u8 taskId)
+{
+ if (sCableCar->state != 0xFF)
+ {
+ sCableCar->bg3HorizontalOffset++;
+ if ((sCableCar->timer % 2) == 0)
+ sCableCar->bg3VerticalOffset++;
+
+ if ((sCableCar->timer % 8) == 0)
+ {
+ sCableCar->bg1HorizontalOffset++;
+ sCableCar->bg1VerticalOffset++;
+ }
+
+ switch (sCableCar->bg3HorizontalOffset)
+ {
+ case 176:
+ CopyToBgTilemapBufferRect_ChangePalette(3, sCableCar->pylonStemTilemap, 0, 2, 2, 30, 17);
+ break;
+ case 16:
+ FillBgTilemapBufferRect(3, 0, 2, 0, 3, 2, 17);
+ FillBgTilemapBufferRect(3, 0, 0, 22, 2, 10, 17);
+ sCableCar->bg3VerticalOffset = 192;
+ break;
+ case 32:
+ FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[2], 2, 0, 1, 1, 17);
+ FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[3], 3, 0, 1, 1, 17);
+ FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[7], 2, 1, 1, 1, 17);
+ FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[8], 3, 1, 1, 1, 17);
+ break;
+ case 40:
+ FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[4], 4, 0, 1, 1, 17);
+ FillBgTilemapBufferRect(3, sCableCar->pylonHookTilemapEntries[9], 4, 1, 1, 1, 17);
+ break;
+ }
+ }
+
+ sub_81511B8();
+ if (sCableCar->timer < sCableCar->unk4)
+ gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 247) % 248;
+ else
+ gWeatherPtr->unknown_6FC = (gWeatherPtr->unknown_6FC + 247) % 248;
+}
+
+static void CableCarVblankCallback(void)
+{
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(3);
+ SetGpuReg(REG_OFFSET_BG3HOFS, sCableCar->bg3HorizontalOffset);
+ SetGpuReg(REG_OFFSET_BG3VOFS, sCableCar->bg3VerticalOffset);
+ SetGpuReg(REG_OFFSET_BG1HOFS, sCableCar->bg1HorizontalOffset);
+ SetGpuReg(REG_OFFSET_BG1VOFS, sCableCar->bg1VerticalOffset);
+ SetGpuReg(REG_OFFSET_BG0HOFS, sCableCar->bg0HorizontalOffset);
+ SetGpuReg(REG_OFFSET_BG0VOFS, sCableCar->bg0VerticalOffset);
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void nullsub_58(struct Sprite *sprite)
+{
+}
+
+static void sub_8150868(struct Sprite *sprite)
+{
+ if (sCableCar->state != 0xFF)
+ {
+ if (gSpecialVar_0x8004 == 0)
+ {
+ sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ }
+ else
+ {
+ sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ }
+ }
+}
+
+void sub_8150948(struct Sprite *sprite)
+{
+ if (sCableCar->state != 255)
+ {
+ if (!gSpecialVar_0x8004)
+ {
+ sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ }
+ else
+ {
+ sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCar->timer));
+ sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCar->timer));
+ }
+
+ switch (sprite->data[2])
+ {
+ case 0:
+ sprite->pos2.y = 17;
+ if (sprite->data[3] ++ > 9)
+ {
+ sprite->data[3] = 0;
+ sprite->data[2] ++;
+ }
+ break;
+ default:
+ sprite->pos2.y = 16;
+ if (sprite->data[3] ++ > 9)
+ {
+ sprite->data[3] = 0;
+ sprite->data[2] = 0;
+ }
+ break;
+ }
+ }
+}
+
+static void sub_8150A68(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.x += 2 * sprite->centerToCornerVecX;
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+ }
+
+ if (++sprite->data[0] >= sprite->data[2])
+ {
+ switch (sprite->data[1])
+ {
+ case 0:
+ sprite->pos1.x++;
+ if ((sprite->data[0] % 4) == 0)
+ sprite->pos1.y++;
+ break;
+ case 1:
+ if ((sprite->data[0] % 2) != 0)
+ {
+ sprite->pos1.x++;
+ if ((sprite->pos1.x % 4) == 0)
+ sprite->pos1.y++;
+ }
+ break;
+ }
+
+ if (sprite->pos1.y > 160)
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8150AF4(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ sprite->pos1.y += 16 + sprite->centerToCornerVecY;
+
+ if (++sprite->data[0] >= sprite->data[2])
+ {
+ switch (sprite->data[1])
+ {
+ case 0:
+ sprite->pos1.x--;
+ if ((sprite->data[0] % 4) == 0)
+ sprite->pos1.y--;
+ break;
+ case 1:
+ if ((sprite->data[0] % 2) != 0)
+ {
+ sprite->pos1.x--;
+ if ((sprite->pos1.x % 4) == 0)
+ sprite->pos1.y--;
+ }
+ break;
+ }
+
+ if (sprite->pos1.y < 80)
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8150B6C(bool8 which)
+{
+ switch (which)
+ {
+ case FALSE:
+ default:
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG3CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ break;
+ case TRUE:
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN1H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0);
+ if (gSpecialVar_0x8004 == 0)
+ {
+ sCableCar->bg3HorizontalOffset = 176;
+ sCableCar->bg3VerticalOffset = 16;
+ sCableCar->bg1HorizontalOffset = 0;
+ sCableCar->bg1VerticalOffset = 80;
+ sCableCar->bg0VerticalOffset = 0;
+ sCableCar->bg0VerticalOffset = 0;
+ }
+ else
+ {
+ sCableCar->bg3HorizontalOffset = 96;
+ sCableCar->bg3VerticalOffset = 232;
+ sCableCar->bg1HorizontalOffset = 0;
+ sCableCar->bg1VerticalOffset = 4;
+ sCableCar->bg0VerticalOffset = 0;
+ sCableCar->bg0VerticalOffset = 0;
+ }
+
+ SetGpuReg(REG_OFFSET_BG3HOFS, sCableCar->bg3HorizontalOffset);
+ SetGpuReg(REG_OFFSET_BG3VOFS, sCableCar->bg3VerticalOffset);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, sCableCar->bg1HorizontalOffset);
+ SetGpuReg(REG_OFFSET_BG1VOFS, sCableCar->bg1VerticalOffset);
+ SetGpuReg(REG_OFFSET_BG0HOFS, sCableCar->bg0HorizontalOffset);
+ SetGpuReg(REG_OFFSET_BG0VOFS, sCableCar->bg0VerticalOffset);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL);
+ break;
+ }
+}
+
+static void LoadCableCarSprites(void)
+{
+ u8 spriteId;
+ u8 i;
+
+ u8 playerGraphicsIds[2] = {
+ EVENT_OBJ_GFX_RIVAL_BRENDAN_NORMAL,
+ EVENT_OBJ_GFX_RIVAL_MAY_NORMAL
+ };
+ u16 rval = Random();
+ u8 hikerGraphicsIds[4] = {
+ EVENT_OBJ_GFX_HIKER,
+ EVENT_OBJ_GFX_CAMPER,
+ EVENT_OBJ_GFX_PICNICKER,
+ EVENT_OBJ_GFX_ZIGZAGOON_1
+ };
+ s16 hikerCoords[2][2] = {
+ { 0, 80 },
+ { 240, 146 }
+ };
+ u8 hikerMovementDelayTable[4] = {
+ 0,
+ 60,
+ 120,
+ 170
+ };
+ void (*callbacks[2])(struct Sprite *) = {
+ sub_8150A68,
+ sub_8150AF4
+ };
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 0:
+ default:
+ spriteId = AddPseudoEventObject(playerGraphicsIds[gSaveBlock2Ptr->playerGender], sub_8150948, 200, 73, 102);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 16;
+ gSprites[spriteId].data[0] = 0xc8;
+ gSprites[spriteId].data[1] = 0x49;
+ }
+ spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[0], 176, 43, 0x67);
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 32;
+ gSprites[spriteId].data[0] = 176;
+ gSprites[spriteId].data[1] = 43;
+ spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[1], 200, 99, 0x65);
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 4;
+ gSprites[spriteId].data[0] = 200;
+ gSprites[spriteId].data[1] = 99;
+ sCableCar->weather = WEATHER_ASH;
+ sCableCar->unk4 = 0x15e;
+ sub_80AB130(WEATHER_SUNNY);
+ break;
+ case 1:
+ CopyToBgTilemapBufferRect_ChangePalette(0, sCableCar->mtChimneyTilemap + 0x24, 24, 26, 12, 3, 17);
+ spriteId = AddPseudoEventObject(playerGraphicsIds[gSaveBlock2Ptr->playerGender], sub_8150948, 128, 39, 102);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 16;
+ gSprites[spriteId].data[0] = 0x80;
+ gSprites[spriteId].data[1] = 0x27;
+ }
+ spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[0], 104, 9, 0x67);
+ gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 0x20;
+ gSprites[spriteId].data[0] = 104;
+ gSprites[spriteId].data[1] = 9;
+ spriteId = CreateSprite(&gSpriteTemplate_85CDB9C[1], 128, 65, 0x65);
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 4;
+ gSprites[spriteId].data[0] = 0x80;
+ gSprites[spriteId].data[1] = 0x41;
+ sCableCar->weather = WEATHER_SUNNY;
+ sCableCar->unk4 = 0x109;
+ sub_80AB130(WEATHER_ASH);
+ break;
+ }
+ for (i = 0; i < 9; i++)
+ {
+ spriteId = CreateSprite(&gSpriteTemplate_85CDBCC, 16 * i + 96, 8 * i - 8, 0x68);
+ gSprites[spriteId].pos2.x = 8;
+ gSprites[spriteId].pos2.y = 8;
+ }
+ if ((rval % 64) == 0)
+ {
+ spriteId = AddPseudoEventObject(hikerGraphicsIds[rval % 3], callbacks[gSpecialVar_0x8004], hikerCoords[gSpecialVar_0x8004][0], hikerCoords[gSpecialVar_0x8004][1], 0x6a);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 2;
+ gSprites[spriteId].pos2.x = -gSprites[spriteId].centerToCornerVecX;
+ gSprites[spriteId].pos2.y = -gSprites[spriteId].centerToCornerVecY;
+ if (gSpecialVar_0x8004 == 0)
+ {
+ if (rval % 2)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 6);
+ gSprites[spriteId].data[1] = 1;
+ gSprites[spriteId].pos1.y += 2;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], 7);
+ gSprites[spriteId].data[1] = 0;
+ }
+ }
+ else
+ {
+ if (rval % 2)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 7);
+ gSprites[spriteId].data[1] = 1;
+ gSprites[spriteId].pos1.y += 2;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], 6);
+ gSprites[spriteId].data[1] = 0;
+ }
+ }
+ gSprites[spriteId].data[2] = hikerMovementDelayTable[rval % 4];
+ }
+ }
+}
+
+void sub_8151088(void)
+{
+ u8 i;
+ u8 j;
+ u8 k;
+ u8 offset;
+
+ for (i = 0, k = 0, offset = 0x24 * (sCableCar->unk1B + 2); i < 3; i++)
+ {
+ for (j = 0; j < 12; j++)
+ {
+ sCableCar->unk22[i][j] = sCableCar->mtChimneyTilemap[offset++];
+ sCableCar->unk22[i + 3][j] = sCableCar->mtChimneyTilemap[k];
+ sCableCar->unk22[i + 6][j] = (sCableCar->mtChimneyTilemap + 0x24)[k];
+ k++;
+ }
+ }
+
+ sCableCar->unk1B = (sCableCar->unk1B + 1) % 3;
+}
+
+static void sub_815115C(void)
+{
+ sCableCar->unk1C = (sCableCar->unk1C + 1) % 0x60;
+ sCableCar->bg0HorizontalOffset = sCableCar->unk1F - sCableCar->unk1D;
+ sCableCar->bg0VerticalOffset = sCableCar->unk20 - sCableCar->unk1E;
+ sCableCar->unk1D++;
+ if ((sCableCar->unk1D % 4) == 0)
+ sCableCar->unk1E++;
+
+ if (sCableCar->unk1D > 16)
+ sub_8151214();
+}
+
+static void sub_81511B8(void)
+{
+ sCableCar->unk1C = (sCableCar->unk1C + 1) % 0x60;
+ sCableCar->bg0HorizontalOffset = sCableCar->unk1F + sCableCar->unk1D;
+ sCableCar->bg0VerticalOffset = sCableCar->unk20 + sCableCar->unk1E;
+ sCableCar->unk1D++;
+ if ((sCableCar->unk1D % 4) == 0)
+ sCableCar->unk1E++;
+
+ if (sCableCar->unk1D > 16)
+ sub_8151388();
+}
+
+static void sub_8151214(void)
+{
+ u8 i = 0;
+
+ sCableCar->unk1D = sCableCar->unk1E = 0;
+ sCableCar->unk1F = sCableCar->bg0HorizontalOffset;
+ sCableCar->unk20 = sCableCar->bg0VerticalOffset;
+ sCableCar->unk19 = (sCableCar->unk19 + 30) % 32;
+ sCableCar->unk18 -= 2;
+ gUnknown_0203ABB2 = (sCableCar->unk1A + 23) % 32;
+ for (i = 0; i < 9; i++)
+ {
+ gUnknown_0203ABB0 = sCableCar->unk19;
+ gUnknown_0203ABB1 = (gUnknown_0203ABB2 + i) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18], gUnknown_0203ABB0, gUnknown_0203ABB1, 1, 1, 17);
+ gUnknown_0203ABB0 = (gUnknown_0203ABB0 + 1) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18 + 1], gUnknown_0203ABB0, gUnknown_0203ABB1, 1, 1, 17);
+ }
+
+ gUnknown_0203ABB0 = (sCableCar->unk19 + 30) % 32;
+ FillBgTilemapBufferRect(0, 0, gUnknown_0203ABB0, 0, 2, 32, 17);
+ if (sCableCar->unk18 == 0)
+ {
+ sCableCar->unk1A = (sCableCar->unk1A + 29) % 32;
+ sCableCar->unk18 = 12;
+ sub_8151088();
+ gUnknown_0203ABB0 = (sCableCar->unk1A + 1) % 32;
+ FillBgTilemapBufferRect(0, 0, 0, gUnknown_0203ABB0, 32, 9, 17);
+ }
+}
+
+static void sub_8151388(void)
+{
+ u8 i = 0;
+
+ sCableCar->unk1D = sCableCar->unk1E = 0;
+ sCableCar->unk1F = sCableCar->bg0HorizontalOffset;
+ sCableCar->unk20 = sCableCar->bg0VerticalOffset;
+ sCableCar->unk19 = (sCableCar->unk19 + 2) % 32;
+ sCableCar->unk18 += 2;
+ gUnknown_0203ABB5 = sCableCar->unk1A;
+ for (i = 0; i < 9; i++)
+ {
+ gUnknown_0203ABB3 = sCableCar->unk19;
+ gUnknown_0203ABB4 = (gUnknown_0203ABB5 + i) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18], gUnknown_0203ABB3, gUnknown_0203ABB4, 1, 1, 17);
+ gUnknown_0203ABB3 = (gUnknown_0203ABB3 + 1) % 32;
+ FillBgTilemapBufferRect(0, sCableCar->unk22[i][sCableCar->unk18 + 1], gUnknown_0203ABB3, gUnknown_0203ABB4, 1, 1, 17);
+ }
+
+ gUnknown_0203ABB4 = (sCableCar->unk1A + 23) % 32;
+ FillBgTilemapBufferRect(0, 0, sCableCar->unk19, gUnknown_0203ABB4, 2, 9, 17);
+ if (sCableCar->unk18 == 10)
+ {
+ sCableCar->unk1A = (sCableCar->unk1A + 3) % 32;
+ sCableCar->unk18 = 0xfe;
+ sub_8151088();
+ }
+}
+
+static void sub_81514C8(u8 arg0)
+{
+ switch (arg0)
+ {
+ case 0:
+ default:
+ sCableCar->unk1B = 2;
+ sCableCar->unk19 = 0;
+ sCableCar->unk1A = 20;
+ sCableCar->unk18 = 12;
+ sub_8151088();
+ sub_8151214();
+ break;
+ case 1:
+ sCableCar->unk1B = 2;
+ sCableCar->unk19 = 28;
+ sCableCar->unk1A = 20;
+ sCableCar->unk18 = 4;
+ sub_8151088();
+ sub_8151388();
+ break;
+ }
+
+ sCableCar->unk1C = 0;
+}
diff --git a/src/clock.c b/src/clock.c
index 91eb5f16d..aea6c2088 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -5,7 +5,7 @@
#include "lottery_corner.h"
#include "dewford_trend.h"
#include "tv.h"
-#include "field_screen.h"
+#include "field_weather.h"
#include "berry.h"
#include "main.h"
#include "overworld.h"
diff --git a/src/contest.c b/src/contest.c
index 95c8563ed..34662b490 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -2520,7 +2520,7 @@ u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index)
spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30);
gSprites[spriteId].oam.paletteNum = 2;
gSprites[spriteId].oam.priority = 2;
- gSprites[spriteId].subpriority = sub_80A82E4(2);
+ gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(2);
gSprites[spriteId].callback = SpriteCallbackDummy;
gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
gSprites[spriteId].data[2] = species;
diff --git a/src/contest_painting.c b/src/contest_painting.c
index 7950b7cac..9de3d733d 100644
--- a/src/contest_painting.c
+++ b/src/contest_painting.c
@@ -1,8 +1,709 @@
#include "global.h"
+#include "alloc.h"
+#include "battle.h"
+#include "bg.h"
+#include "contest.h"
+#include "contest_painting.h"
+#include "contest_painting_effects.h"
+#include "battle_gfx_sfx_util.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "international_string_util.h"
+#include "main.h"
+#include "lilycove_lady.h"
+#include "palette.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "string_util.h"
+#include "strings.h"
+#include "text.h"
+#include "window.h"
+#include "constants/rgb.h"
+
+extern u8 gUnknown_02039F5C;
+extern u8 gUnknown_02039F5D;
+
+extern u16 (*gUnknown_03006190)[][32];
+extern struct ContestWinner *gUnknown_030061C0;
+extern u16 *gContestPaintingMonPalette;
+extern struct Unk030061A0 gUnknown_030061A0;
// IWRAM bss
-IWRAM_DATA u8 gUnknown_030011F0;
-IWRAM_DATA u16 gUnknown_030011F2;
-IWRAM_DATA u16 gUnknown_030011F4;
-IWRAM_DATA u8 gUnknown_030011F6;
-IWRAM_DATA u8 gUnknown_030011F7;
+IWRAM_DATA u8 gContestPaintingState;
+IWRAM_DATA u16 gContestPaintingMosaicVal;
+IWRAM_DATA u16 gContestPaintingFadeCounter;
+IWRAM_DATA bool8 gUnknown_030011F6;
+IWRAM_DATA u8 gContestPaintingWindowId;
+
+static void ShowContestPainting(void);
+static void HoldContestPainting(void);
+static void InitContestPaintingWindow(void);
+static void InitContestPaintingBg(void);
+static void InitContestPaintingVars(bool8);
+static void sub_8130884(u8, u8);
+static void PrintContestPaintingCaption(u8, u8);
+static void VBlankCB_ContestPainting(void);
+static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64]);
+
+extern const u8 gUnknown_0827EA0C[];
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const struct CompressedSpriteSheet gMonBackPicTable[];
+extern const u8 gContestCoolness[];
+extern const u8 gContestBeauty[];
+extern const u8 gContestCuteness[];
+extern const u8 gContestSmartness[];
+extern const u8 gContestToughness[];
+extern const u8 gContestRankNormal[];
+extern const u8 gContestRankSuper[];
+extern const u8 gContestRankHyper[];
+extern const u8 gContestRankMaster[];
+extern const u8 gContestLink[];
+extern const u8 gContestPaintingCool1[];
+extern const u8 gContestPaintingCool2[];
+extern const u8 gContestPaintingCool3[];
+extern const u8 gContestPaintingBeauty1[];
+extern const u8 gContestPaintingBeauty2[];
+extern const u8 gContestPaintingBeauty3[];
+extern const u8 gContestPaintingCute1[];
+extern const u8 gContestPaintingCute2[];
+extern const u8 gContestPaintingCute3[];
+extern const u8 gContestPaintingSmart1[];
+extern const u8 gContestPaintingSmart2[];
+extern const u8 gContestPaintingSmart3[];
+extern const u8 gContestPaintingTough1[];
+extern const u8 gContestPaintingTough2[];
+extern const u8 gContestPaintingTough3[];
+
+const u16 gPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal");
+const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl");
+const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl");
+const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl");
+const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl");
+const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl");
+const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl");
+const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl");
+const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl");
+const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl");
+const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl");
+const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl");
+const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl");
+
+const u8 *const gUnknown_085B07C0[] =
+{
+ gContestCoolness,
+ gContestBeauty,
+ gContestCuteness,
+ gContestSmartness,
+ gContestToughness,
+};
+
+const u8 *const gContestRankTextPointers[] =
+{
+ gContestRankNormal,
+ gContestRankSuper,
+ gContestRankHyper,
+ gContestRankMaster,
+ gContestLink,
+};
+
+const struct BgTemplate gUnknown_085B07E8[] =
+{
+ {
+ .bg = 1,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 10,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0,
+ },
+};
+
+const struct WindowTemplate gUnknown_085B07EC =
+{
+ .bg = 1,
+ .tilemapLeft = 2,
+ .tilemapTop = 14,
+ .width = 26,
+ .height = 4,
+ .paletteNum = 15,
+ .baseBlock = 1,
+};
+
+const u8 *const gContestPaintingDescriptionPointers[] =
+{
+ gContestPaintingCool1,
+ gContestPaintingCool2,
+ gContestPaintingCool3,
+ gContestPaintingBeauty1,
+ gContestPaintingBeauty2,
+ gContestPaintingBeauty3,
+ gContestPaintingCute1,
+ gContestPaintingCute2,
+ gContestPaintingCute3,
+ gContestPaintingSmart1,
+ gContestPaintingSmart2,
+ gContestPaintingSmart3,
+ gContestPaintingTough1,
+ gContestPaintingTough2,
+ gContestPaintingTough3,
+};
+
+const struct OamData gUnknown_085B0830 =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .mosaic = 1,
+ .bpp = ST_OAM_8BPP,
+ .shape = ST_OAM_SQUARE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const u16 gUnknown_085B0838[] = {RGB(0, 0, 0), RGB(0, 0, 0)};
+
+void sub_812FDA8(int contestWinner)
+{
+ // probably fakematching
+ u8 *ptr1 = &gUnknown_02039F5D;
+ u8 *ptr2 = &gUnknown_02039F5C;
+ gUnknown_02039F3C = gSaveBlock1Ptr->contestWinners[contestWinner - 1];
+ *ptr1 = contestWinner - 1;
+ *ptr2 = 0;
+}
+
+void CB2_ContestPainting(void)
+{
+ ShowContestPainting();
+}
+
+static void CB2_HoldContestPainting(void)
+{
+ HoldContestPainting();
+ RunTextPrinters();
+ UpdatePaletteFade();
+}
+
+static void CB2_QuitContestPainting(void)
+{
+ SetMainCallback2(gMain.savedCallback);
+ FREE_AND_SET_NULL(gContestPaintingMonPalette);
+ FREE_AND_SET_NULL(gUnknown_03006190);
+ RemoveWindow(gContestPaintingWindowId);
+ Free(GetBgTilemapBuffer(1));
+ FreeMonSpritesGfx();
+}
+
+static void ShowContestPainting(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ ScanlineEffect_Stop();
+ SetVBlankCallback(NULL);
+ AllocateMonSpritesGfx();
+ gUnknown_030061C0 = &gUnknown_02039F3C;
+ InitContestPaintingVars(1);
+ InitContestPaintingBg();
+ gMain.state++;
+ break;
+ case 1:
+ ResetPaletteFade();
+ DmaFillLarge32(3, 0, (void *)BG_VRAM, 0x18000, 0x1000);
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 2:
+ SeedRng(gMain.vblankCounter1);
+ InitKeys();
+ InitContestPaintingWindow();
+ gMain.state++;
+ break;
+ case 3:
+ sub_8130884(gUnknown_02039F5D, gUnknown_02039F5C);
+ gMain.state++;
+ break;
+ case 4:
+ PrintContestPaintingCaption(gUnknown_02039F5D, gUnknown_02039F5C);
+ LoadPalette(gUnknown_085B0838, 0, 1 * 2);
+ DmaClear32(3, PLTT, PLTT_SIZE);
+ BeginFastPaletteFade(2);
+ SetVBlankCallback(VBlankCB_ContestPainting);
+ gContestPaintingState = 0;
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
+ SetMainCallback2(CB2_HoldContestPainting);
+ break;
+ }
+}
+
+static void HoldContestPainting(void)
+{
+ switch (gContestPaintingState)
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ gContestPaintingState = 1;
+ if (gUnknown_030011F6 && gContestPaintingFadeCounter)
+ gContestPaintingFadeCounter--;
+ break;
+ case 1:
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ u8 two = 2; //needed to make the asm match
+ gContestPaintingState = two;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
+ }
+
+ if (gUnknown_030011F6)
+ gContestPaintingFadeCounter = 0;
+ break;
+ case 2:
+ if (!gPaletteFade.active)
+ SetMainCallback2(CB2_QuitContestPainting);
+ if (gUnknown_030011F6 && gContestPaintingFadeCounter < 30)
+ gContestPaintingFadeCounter++;
+ break;
+ }
+}
+
+static void InitContestPaintingWindow(void)
+{
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_085B07E8, ARRAY_COUNT(gUnknown_085B07E8));
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
+ gContestPaintingWindowId = AddWindow(&gUnknown_085B07EC);
+ DeactivateAllTextPrinters();
+ FillWindowPixelBuffer(gContestPaintingWindowId, 0);
+ PutWindowTilemap(gContestPaintingWindowId);
+ CopyWindowToVram(gContestPaintingWindowId, 3);
+ ShowBg(1);
+}
+
+static void PrintContestPaintingCaption(u8 contestType, u8 arg1)
+{
+ int x;
+ u8 category;
+
+ if (arg1 == TRUE)
+ return;
+
+ category = gUnknown_030061C0->contestCategory;
+ if (contestType < 8)
+ {
+ sub_818E868(gStringVar1, category);
+ StringAppend(gStringVar1, gText_Space);
+ StringAppend(gStringVar1, gContestRankTextPointers[gUnknown_030061C0->contestRank]);
+ StringCopy(gStringVar2, gUnknown_030061C0->trainerName);
+ sub_81DB5AC(gStringVar2);
+ StringCopy(gStringVar3, gUnknown_030061C0->monName);
+ StringExpandPlaceholders(gStringVar4, gUnknown_0827EA0C);
+ }
+ else
+ {
+ StringCopy(gStringVar1, gUnknown_030061C0->monName);
+ StringExpandPlaceholders(gStringVar4, gContestPaintingDescriptionPointers[category]);
+ }
+
+ x = GetStringCenterAlignXOffset(1, gStringVar4, 208);
+ AddTextPrinterParameterized(gContestPaintingWindowId, 1, gStringVar4, x, 1, 0, 0);
+ CopyBgTilemapBufferToVram(1);
+}
+
+static void InitContestPaintingBg(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ REG_IE |= INTR_FLAG_VBLANK;
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+}
+
+static void InitContestPaintingVars(bool8 arg0)
+{
+ if (arg0 == FALSE)
+ {
+ gUnknown_030011F6 = FALSE;
+ gContestPaintingMosaicVal = 0;
+ gContestPaintingFadeCounter = 0;
+ }
+ else
+ {
+ gUnknown_030011F6 = TRUE;
+ gContestPaintingMosaicVal = 15;
+ gContestPaintingFadeCounter = 30;
+ }
+}
+
+static void UpdateContestPaintingMosaicEffect(void)
+{
+ if (!gUnknown_030011F6)
+ {
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
+ gContestPaintingMosaicVal = gContestPaintingFadeCounter / 2;
+ SetGpuReg(REG_OFFSET_MOSAIC, (gContestPaintingMosaicVal << 12) | (gContestPaintingMosaicVal << 8) | (gContestPaintingMosaicVal << 4) | (gContestPaintingMosaicVal << 0));
+ }
+}
+
+static void VBlankCB_ContestPainting(void)
+{
+ UpdateContestPaintingMosaicEffect();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void sub_81302E8(u16 species, u8 arg1)
+{
+ const void *pal = GetFrontSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality);
+ LZDecompressVram(pal, gContestPaintingMonPalette);
+ if (!arg1)
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(
+ &gMonFrontPicTable[species],
+ gMonSpritesGfxPtr->sprites[1],
+ species,
+ gUnknown_030061C0->personality);
+ sub_8130380(gMonSpritesGfxPtr->sprites[1], gContestPaintingMonPalette, (void *)gUnknown_03006190);
+ }
+ else
+ {
+ HandleLoadSpecialPokePic_DontHandleDeoxys(
+ &gMonBackPicTable[species],
+ gMonSpritesGfxPtr->sprites[0],
+ species,
+ gUnknown_030061C0->personality);
+ sub_8130380(gMonSpritesGfxPtr->sprites[0], gContestPaintingMonPalette, (void *)gUnknown_03006190);
+ }
+}
+
+#ifdef NONMATCHING
+// functionally equivalent.
+static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
+{
+ u16 tileY, tileX, pixelY, pixelX;
+ u8 colorIndex;
+
+ for (tileY = 0; tileY < 8; tileY++)
+ {
+ for (tileX = 0; tileX < 8; tileX++)
+ {
+ for (pixelY = 0; pixelY < 8; pixelY++)
+ {
+ for (pixelX = 0; pixelX < 8; pixelX++)
+ {
+ int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2);
+ colorIndex = spritePixels[offset];
+ if (pixelX & 1)
+ colorIndex >>= 4;
+ else
+ colorIndex &= 0xF;
+
+ if (colorIndex == 0) // transparent pixel
+ (*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000;
+ else
+ (*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
+ }
+ }
+ }
+ }
+}
+#else
+NAKED
+static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0xC\n\
+ mov r10, r0\n\
+ mov r9, r1\n\
+ str r2, [sp]\n\
+ movs r0, 0\n\
+_08130394:\n\
+ movs r3, 0\n\
+ adds r1, r0, 0x1\n\
+ str r1, [sp, 0x4]\n\
+ lsls r0, 3\n\
+ str r0, [sp, 0x8]\n\
+_0813039E:\n\
+ movs r1, 0\n\
+ adds r2, r3, 0x1\n\
+ mov r8, r2\n\
+ ldr r7, [sp, 0x8]\n\
+ adds r0, r7, r3\n\
+ lsls r0, 5\n\
+ mov r12, r0\n\
+ lsls r4, r3, 3\n\
+_081303AE:\n\
+ movs r3, 0\n\
+ lsls r0, r1, 2\n\
+ adds r6, r1, 0x1\n\
+ mov r2, r12\n\
+ adds r5, r2, r0\n\
+ ldr r7, [sp, 0x8]\n\
+ adds r0, r7, r1\n\
+ lsls r0, 7\n\
+ ldr r1, [sp]\n\
+ adds r2, r0, r1\n\
+_081303C2:\n\
+ lsrs r0, r3, 1\n\
+ adds r0, r5, r0\n\
+ add r0, r10\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _081303D6\n\
+ lsrs r1, 4\n\
+ b _081303DA\n\
+_081303D6:\n\
+ movs r0, 0xF\n\
+ ands r1, r0\n\
+_081303DA:\n\
+ cmp r1, 0\n\
+ bne _081303EC\n\
+ adds r0, r4, r3\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ movs r7, 0x80\n\
+ lsls r7, 8\n\
+ adds r1, r7, 0\n\
+ b _081303F8\n\
+_081303EC:\n\
+ adds r0, r4, r3\n\
+ lsls r0, 1\n\
+ adds r0, r2\n\
+ lsls r1, 1\n\
+ add r1, r9\n\
+ ldrh r1, [r1]\n\
+_081303F8:\n\
+ strh r1, [r0]\n\
+ adds r0, r3, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0x7\n\
+ bls _081303C2\n\
+ lsls r0, r6, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, 0x7\n\
+ bls _081303AE\n\
+ mov r1, r8\n\
+ lsls r0, r1, 16\n\
+ lsrs r3, r0, 16\n\
+ cmp r3, 0x7\n\
+ bls _0813039E\n\
+ ldr r2, [sp, 0x4]\n\
+ lsls r0, r2, 16\n\
+ lsrs r0, 16\n\
+ cmp r0, 0x7\n\
+ bls _08130394\n\
+ add sp, 0xC\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0");
+}
+#endif
+
+static void sub_8130430(u8 arg0, u8 arg1)
+{
+ u8 x, y;
+
+ LoadPalette(gPictureFramePalettes, 0, 0x100);
+ if (arg1 == 1)
+ {
+ switch (gUnknown_030061C0->contestCategory / 3)
+ {
+ case CONTEST_CATEGORY_COOL:
+ RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_SMART:
+ RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03006190);
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
+ RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03006190);
+ break;
+ }
+
+#define VRAM_PICTURE_DATA(x, y) (((u16 *)(VRAM + 0x6000))[(y) * 32 + (x)])
+
+ // Set the background
+ for (y = 0; y < 20; y++)
+ {
+ for (x = 0; x < 32; x++)
+ VRAM_PICTURE_DATA(x, y) = 0x1015;
+ }
+
+ // Copy the image frame
+ for (y = 0; y < 10; y++)
+ {
+ for (x = 0; x < 18; x++)
+ VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03006190)[y + 2][x + 6];
+ }
+
+ // Re-set the entire top row to the first top frame part
+ for (x = 0; x < 16; x++)
+ VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03006190)[2][7];
+
+#undef VRAM_PICTURE_DATA
+ }
+ else if (arg0 < 8)
+ {
+ RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000));
+ }
+ else
+ {
+ switch (gUnknown_030061C0->contestCategory / 3)
+ {
+ case CONTEST_CATEGORY_COOL:
+ RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_0, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_BEAUTY:
+ RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_1, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_CUTE:
+ RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_2, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_SMART:
+ RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_3, (void *)(VRAM + 0x6000));
+ break;
+ case CONTEST_CATEGORY_TOUGH:
+ RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
+ RLUnCompVram(gPictureFrameTilemap_4, (void *)(VRAM + 0x6000));
+ break;
+ }
+ }
+}
+
+static void sub_8130688(u8 arg0)
+{
+ //Some hacks just to get the asm to match
+#ifndef NONMATCHING
+ asm(""::"r"(arg0));
+#endif
+
+ gMain.oamBuffer[0] = gUnknown_085B0830;
+ gMain.oamBuffer[0].tileNum = 0;
+
+#ifndef NONMATCHING
+ if (arg0) arg0 = gMain.oamBuffer[0].tileNum;
+#endif
+
+ gMain.oamBuffer[0].x = 88;
+ gMain.oamBuffer[0].y = 24;
+}
+
+static u8 sub_81306CC(u8 arg0)
+{
+ u8 contestCategory;
+
+ if (arg0 < 8)
+ contestCategory = gUnknown_030061C0->contestCategory;
+ else
+ contestCategory = gUnknown_030061C0->contestCategory / 3;
+
+ switch (contestCategory)
+ {
+ case CONTEST_CATEGORY_COOL:
+ return CONTESTRESULT_COOL;
+ case CONTEST_CATEGORY_BEAUTY:
+ return CONTESTRESULT_BEAUTY;
+ case CONTEST_CATEGORY_CUTE:
+ return CONTESTRESULT_CUTE;
+ case CONTEST_CATEGORY_SMART:
+ return CONTESTRESULT_SMART;
+ case CONTEST_CATEGORY_TOUGH:
+ return CONTESTRESULT_TOUGH;
+ }
+
+ return contestCategory;
+}
+
+static void sub_8130738(void)
+{
+ gContestPaintingMonPalette = AllocZeroed(0x200);
+ gUnknown_03006190 = AllocZeroed(0x2000);
+}
+
+static void sub_8130760(u8 contestResult)
+{
+ gUnknown_030061A0.var_4 = gUnknown_03006190;
+ gUnknown_030061A0.var_8 = gContestPaintingMonPalette;
+ gUnknown_030061A0.var_18 = 0;
+ gUnknown_030061A0.var_1F = gUnknown_030061C0->personality % 256;
+ gUnknown_030061A0.var_19 = 0;
+ gUnknown_030061A0.var_1A = 0;
+ gUnknown_030061A0.var_1B = 64;
+ gUnknown_030061A0.var_1C = 64;
+ gUnknown_030061A0.var_1D = 64;
+ gUnknown_030061A0.var_1E = 64;
+
+ switch (contestResult)
+ {
+ case CONTESTRESULT_SMART:
+ case CONTESTRESULT_TOUGH:
+ gUnknown_030061A0.var_14 = 3;
+ break;
+ case CONTESTRESULT_COOL:
+ case CONTESTRESULT_BEAUTY:
+ case CONTESTRESULT_CUTE:
+ default:
+ gUnknown_030061A0.var_14 = 1;
+ break;
+ }
+
+ gUnknown_030061A0.var_16 = 2;
+ gUnknown_030061A0.var_0 = contestResult;
+ gUnknown_030061A0.var_10 = 0x6010000;
+
+ sub_8124F2C(&gUnknown_030061A0);
+ sub_81261A4(&gUnknown_030061A0);
+ sub_8126058(&gUnknown_030061A0);
+
+ LoadPalette(gContestPaintingMonPalette, 0x100, 0x200);
+}
+
+static void sub_8130884(u8 arg0, u8 arg1)
+{
+ sub_8130738();
+ sub_81302E8(gUnknown_030061C0->species, 0);
+ sub_8130760(sub_81306CC(arg0));
+ sub_8130688(arg0);
+ sub_8130430(arg0, arg1);
+}
diff --git a/src/credits.c b/src/credits.c
index ca82217cd..42bdbf454 100644
--- a/src/credits.c
+++ b/src/credits.c
@@ -135,7 +135,7 @@ struct Unk201C000
u16 unk90;
u16 unk92;
u16 unk94;
- u16 unk96[386];
+ u16 unk96[NATIONAL_DEX_COUNT];
u16 unk39A;
u16 unk39C[7];
};
@@ -2254,12 +2254,12 @@ static void sub_8177050(struct Sprite *sprite)
}
}
-static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position)
+static u8 sub_8177224(u16 nationalDexNum, s16 x, s16 y, u16 position)
{
u8 spriteId;
u8 spriteId2;
- spriteId = sub_80C0E9C(species, x, y, position);
+ spriteId = CreateMonSpriteFromNationalDexNumber(nationalDexNum, x, y, position);
gSprites[spriteId].oam.priority = 1;
gSprites[spriteId].data[1] = position + 1;
gSprites[spriteId].invisible = TRUE;
@@ -2297,16 +2297,16 @@ static void sub_8177388(void)
u16 dexNum;
u16 j;
- for (dexNum = 1, j = 0; dexNum < 386; dexNum++)
+ for (dexNum = 1, j = 0; dexNum < NATIONAL_DEX_COUNT; dexNum++)
{
- if (GetSetPokedexFlag(dexNum, 1))
+ if (GetSetPokedexFlag(dexNum, FLAG_GET_CAUGHT))
{
gUnknown_0203BCE8->unk96[j] = dexNum;
j++;
}
}
- for (dexNum = j; dexNum < 386; dexNum++)
+ for (dexNum = j; dexNum < NATIONAL_DEX_COUNT; dexNum++)
gUnknown_0203BCE8->unk96[dexNum] = 0;
gUnknown_0203BCE8->unk39A = j;
diff --git a/src/data/battle_frontier/battle_frontier_mons.h b/src/data/battle_frontier/battle_frontier_mons.h
new file mode 100644
index 000000000..44cfb8036
--- /dev/null
+++ b/src/data/battle_frontier/battle_frontier_mons.h
@@ -0,0 +1,6177 @@
+const struct FacilityMon gBattleFrontierMons[] =
+{
+ [0] = {
+ .species = SPECIES_SUNKERN,
+ .moves = {MOVE_MEGA_DRAIN, MOVE_HELPING_HAND, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [1] = {
+ .species = SPECIES_AZURILL,
+ .moves = {MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SING, MOVE_CHARM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RASH
+ },
+ [2] = {
+ .species = SPECIES_CATERPIE,
+ .moves = {MOVE_TACKLE, MOVE_STRING_SHOT, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [3] = {
+ .species = SPECIES_WEEDLE,
+ .moves = {MOVE_POISON_STING, MOVE_STRING_SHOT, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [4] = {
+ .species = SPECIES_WURMPLE,
+ .moves = {MOVE_TACKLE, MOVE_STRING_SHOT, MOVE_POISON_STING, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [5] = {
+ .species = SPECIES_RALTS,
+ .moves = {MOVE_CONFUSION, MOVE_IMPRISON, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [6] = {
+ .species = SPECIES_MAGIKARP,
+ .moves = {MOVE_FLAIL, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [7] = {
+ .species = SPECIES_FEEBAS,
+ .moves = {MOVE_FLAIL, MOVE_MIRROR_COAT, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [8] = {
+ .species = SPECIES_METAPOD,
+ .moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BASHFUL
+ },
+ [9] = {
+ .species = SPECIES_KAKUNA,
+ .moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BASHFUL
+ },
+ [10] = {
+ .species = SPECIES_PICHU,
+ .moves = {MOVE_SWEET_KISS, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SHOCK_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RASH
+ },
+ [11] = {
+ .species = SPECIES_SILCOON,
+ .moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BASHFUL
+ },
+ [12] = {
+ .species = SPECIES_CASCOON,
+ .moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BASHFUL
+ },
+ [13] = {
+ .species = SPECIES_IGGLYBUFF,
+ .moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_ATTRACT, MOVE_SEISMIC_TOSS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [14] = {
+ .species = SPECIES_WOOPER,
+ .moves = {MOVE_YAWN, MOVE_DIG, MOVE_WATER_PULSE, MOVE_RAIN_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [15] = {
+ .species = SPECIES_TYROGUE,
+ .moves = {MOVE_MACH_PUNCH, MOVE_PROTECT, MOVE_DOUBLE_TEAM, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [16] = {
+ .species = SPECIES_SENTRET,
+ .moves = {MOVE_QUICK_ATTACK, MOVE_FOLLOW_ME, MOVE_HELPING_HAND, MOVE_ASSIST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [17] = {
+ .species = SPECIES_CLEFFA,
+ .moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_ATTRACT, MOVE_METRONOME},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SERIOUS
+ },
+ [18] = {
+ .species = SPECIES_SEEDOT,
+ .moves = {MOVE_BULLET_SEED, MOVE_BIDE, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [19] = {
+ .species = SPECIES_LOTAD,
+ .moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_SUNNY_DAY, MOVE_MEGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [20] = {
+ .species = SPECIES_POOCHYENA,
+ .moves = {MOVE_CRUNCH, MOVE_SWAGGER, MOVE_ROAR, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [21] = {
+ .species = SPECIES_SHEDINJA,
+ .moves = {MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_SILVER_WIND, MOVE_GRUDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_NAIVE
+ },
+ [22] = {
+ .species = SPECIES_MAKUHITA,
+ .moves = {MOVE_FAKE_OUT, MOVE_SEISMIC_TOSS, MOVE_DETECT, MOVE_WHIRLWIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [23] = {
+ .species = SPECIES_WHISMUR,
+ .moves = {MOVE_UPROAR, MOVE_SWAGGER, MOVE_BODY_SLAM, MOVE_SMELLING_SALT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [24] = {
+ .species = SPECIES_ZIGZAGOON,
+ .moves = {MOVE_HEADBUTT, MOVE_PIN_MISSILE, MOVE_SWIFT, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_TIMID
+ },
+ [25] = {
+ .species = SPECIES_ZUBAT,
+ .moves = {MOVE_POISON_FANG, MOVE_WHIRLWIND, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [26] = {
+ .species = SPECIES_TOGEPI,
+ .moves = {MOVE_RETURN, MOVE_YAWN, MOVE_WISH, MOVE_SWEET_KISS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [27] = {
+ .species = SPECIES_SPINARAK,
+ .moves = {MOVE_SIGNAL_BEAM, MOVE_NIGHT_SHADE, MOVE_SPIDER_WEB, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [28] = {
+ .species = SPECIES_MARILL,
+ .moves = {MOVE_WATER_PULSE, MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_RETURN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_GENTLE
+ },
+ [29] = {
+ .species = SPECIES_HOPPIP,
+ .moves = {MOVE_MEGA_DRAIN, MOVE_LEECH_SEED, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_LAX
+ },
+ [30] = {
+ .species = SPECIES_SLUGMA,
+ .moves = {MOVE_EMBER, MOVE_ROCK_SLIDE, MOVE_YAWN, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [31] = {
+ .species = SPECIES_SWINUB,
+ .moves = {MOVE_ICY_WIND, MOVE_DIG, MOVE_ROCK_TOMB, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_GENTLE
+ },
+ [32] = {
+ .species = SPECIES_SMEARGLE,
+ .moves = {MOVE_EXTREME_SPEED, MOVE_FAKE_OUT, MOVE_QUICK_ATTACK, MOVE_MACH_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [33] = {
+ .species = SPECIES_PIDGEY,
+ .moves = {MOVE_GUST, MOVE_SAND_ATTACK, MOVE_WHIRLWIND, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [34] = {
+ .species = SPECIES_RATTATA,
+ .moves = {MOVE_HYPER_FANG, MOVE_PURSUIT, MOVE_QUICK_ATTACK, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [35] = {
+ .species = SPECIES_WYNAUT,
+ .moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_CHARM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_JOLLY
+ },
+ [36] = {
+ .species = SPECIES_SKITTY,
+ .moves = {MOVE_SING, MOVE_ATTRACT, MOVE_CHARM, MOVE_DOUBLE_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [37] = {
+ .species = SPECIES_SPEAROW,
+ .moves = {MOVE_FURY_ATTACK, MOVE_PURSUIT, MOVE_MIRROR_MOVE, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [38] = {
+ .species = SPECIES_HOOTHOOT,
+ .moves = {MOVE_CONFUSION, MOVE_HYPNOSIS, MOVE_SUPERSONIC, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [39] = {
+ .species = SPECIES_DIGLETT,
+ .moves = {MOVE_MAGNITUDE, MOVE_SLASH, MOVE_ROCK_TOMB, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAIVE
+ },
+ [40] = {
+ .species = SPECIES_LEDYBA,
+ .moves = {MOVE_PSYBEAM, MOVE_AGILITY, MOVE_BATON_PASS, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BASHFUL
+ },
+ [41] = {
+ .species = SPECIES_NINCADA,
+ .moves = {MOVE_MUD_SLAP, MOVE_DIG, MOVE_TOXIC, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [42] = {
+ .species = SPECIES_SURSKIT,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_RAIN_DANCE, MOVE_SWEET_SCENT, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [43] = {
+ .species = SPECIES_JIGGLYPUFF,
+ .moves = {MOVE_SING, MOVE_WISH, MOVE_MIMIC, MOVE_DOUBLE_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [44] = {
+ .species = SPECIES_TAILLOW,
+ .moves = {MOVE_FLY, MOVE_QUICK_ATTACK, MOVE_ENDEAVOR, MOVE_FOCUS_ENERGY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_GENTLE
+ },
+ [45] = {
+ .species = SPECIES_WINGULL,
+ .moves = {MOVE_WATER_PULSE, MOVE_FLY, MOVE_QUICK_ATTACK, MOVE_STEEL_WING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [46] = {
+ .species = SPECIES_NIDORAN_M,
+ .moves = {MOVE_DOUBLE_KICK, MOVE_POISON_STING, MOVE_DISABLE, MOVE_HELPING_HAND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [47] = {
+ .species = SPECIES_NIDORAN_F,
+ .moves = {MOVE_CRUNCH, MOVE_DOUBLE_KICK, MOVE_FLATTER, MOVE_HELPING_HAND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [48] = {
+ .species = SPECIES_KIRLIA,
+ .moves = {MOVE_CONFUSION, MOVE_WILL_O_WISP, MOVE_FUTURE_SIGHT, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [49] = {
+ .species = SPECIES_MAREEP,
+ .moves = {MOVE_SHOCK_WAVE, MOVE_FLASH, MOVE_REFLECT, MOVE_COTTON_SPORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [50] = {
+ .species = SPECIES_MEDITITE,
+ .moves = {MOVE_HI_JUMP_KICK, MOVE_MEDITATE, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [51] = {
+ .species = SPECIES_SLAKOTH,
+ .moves = {MOVE_YAWN, MOVE_SCRATCH, MOVE_ENCORE, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [52] = {
+ .species = SPECIES_PARAS,
+ .moves = {MOVE_SPORE, MOVE_LEECH_LIFE, MOVE_SLASH, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [53] = {
+ .species = SPECIES_EKANS,
+ .moves = {MOVE_ACID, MOVE_DIG, MOVE_SCREECH, MOVE_TORMENT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [54] = {
+ .species = SPECIES_DITTO,
+ .moves = {MOVE_TRANSFORM, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_METAL_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [55] = {
+ .species = SPECIES_BARBOACH,
+ .moves = {MOVE_MAGNITUDE, MOVE_WATER_PULSE, MOVE_SPARK, MOVE_FUTURE_SIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BASHFUL
+ },
+ [56] = {
+ .species = SPECIES_MEOWTH,
+ .moves = {MOVE_SLASH, MOVE_BITE, MOVE_SCREECH, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [57] = {
+ .species = SPECIES_PINECO,
+ .moves = {MOVE_SELF_DESTRUCT, MOVE_TAKE_DOWN, MOVE_REFLECT, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [58] = {
+ .species = SPECIES_TRAPINCH,
+ .moves = {MOVE_TOXIC, MOVE_DIG, MOVE_SANDSTORM, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SERIOUS
+ },
+ [59] = {
+ .species = SPECIES_SPHEAL,
+ .moves = {MOVE_ICE_BALL, MOVE_WATER_PULSE, MOVE_HAIL, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [60] = {
+ .species = SPECIES_HORSEA,
+ .moves = {MOVE_WATER_GUN, MOVE_AGILITY, MOVE_ICY_WIND, MOVE_TWISTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [61] = {
+ .species = SPECIES_SHROOMISH,
+ .moves = {MOVE_SPORE, MOVE_BULLET_SEED, MOVE_LEECH_SEED, MOVE_HEADBUTT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [62] = {
+ .species = SPECIES_SHUPPET,
+ .moves = {MOVE_WILL_O_WISP, MOVE_NIGHT_SHADE, MOVE_GRUDGE, MOVE_KNOCK_OFF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RASH
+ },
+ [63] = {
+ .species = SPECIES_DUSKULL,
+ .moves = {MOVE_SKILL_SWAP, MOVE_NIGHT_SHADE, MOVE_DISABLE, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [64] = {
+ .species = SPECIES_ELECTRIKE,
+ .moves = {MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_ROAR, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [65] = {
+ .species = SPECIES_VULPIX,
+ .moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_FIRE_SPIN, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [66] = {
+ .species = SPECIES_PIKACHU,
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_DOUBLE_TEAM, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIGHT_BALL,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [67] = {
+ .species = SPECIES_SANDSHREW,
+ .moves = {MOVE_DIG, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [68] = {
+ .species = SPECIES_POLIWAG,
+ .moves = {MOVE_HYPNOSIS, MOVE_ICY_WIND, MOVE_WATER_GUN, MOVE_RAIN_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [69] = {
+ .species = SPECIES_BELLSPROUT,
+ .moves = {MOVE_RAZOR_LEAF, MOVE_ACID, MOVE_STUN_SPORE, MOVE_WRAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_LAX
+ },
+ [70] = {
+ .species = SPECIES_GEODUDE,
+ .moves = {MOVE_MAGNITUDE, MOVE_ROCK_BLAST, MOVE_STRENGTH, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [71] = {
+ .species = SPECIES_DRATINI,
+ .moves = {MOVE_OUTRAGE, MOVE_THUNDER_WAVE, MOVE_SUPERSONIC, MOVE_WATER_PULSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [72] = {
+ .species = SPECIES_SNUBBULL,
+ .moves = {MOVE_BITE, MOVE_CHARM, MOVE_SWAGGER, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [73] = {
+ .species = SPECIES_REMORAID,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_AURORA_BEAM, MOVE_PSYBEAM, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [74] = {
+ .species = SPECIES_LARVITAR,
+ .moves = {MOVE_THRASH, MOVE_ROCK_SLIDE, MOVE_DIG, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [75] = {
+ .species = SPECIES_BALTOY,
+ .moves = {MOVE_PSYBEAM, MOVE_ANCIENT_POWER, MOVE_LIGHT_SCREEN, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [76] = {
+ .species = SPECIES_SNORUNT,
+ .moves = {MOVE_ICY_WIND, MOVE_HEADBUTT, MOVE_LEER, MOVE_BITE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [77] = {
+ .species = SPECIES_BAGON,
+ .moves = {MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_BRICK_BREAK, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [78] = {
+ .species = SPECIES_BELDUM,
+ .moves = {MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [79] = {
+ .species = SPECIES_GULPIN,
+ .moves = {MOVE_TOXIC, MOVE_YAWN, MOVE_PAIN_SPLIT, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SERIOUS
+ },
+ [80] = {
+ .species = SPECIES_VENONAT,
+ .moves = {MOVE_PSYBEAM, MOVE_SUPERSONIC, MOVE_STUN_SPORE, MOVE_SKILL_SWAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [81] = {
+ .species = SPECIES_MANKEY,
+ .moves = {MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SCREECH, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [82] = {
+ .species = SPECIES_MACHOP,
+ .moves = {MOVE_SEISMIC_TOSS, MOVE_REVENGE, MOVE_ROCK_TOMB, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [83] = {
+ .species = SPECIES_SHELLDER,
+ .moves = {MOVE_ICICLE_SPEAR, MOVE_SUPERSONIC, MOVE_CLAMP, MOVE_WITHDRAW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [84] = {
+ .species = SPECIES_SMOOCHUM,
+ .moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_MUD_SLAP, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [85] = {
+ .species = SPECIES_NUMEL,
+ .moves = {MOVE_EMBER, MOVE_MAGNITUDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [86] = {
+ .species = SPECIES_CARVANHA,
+ .moves = {MOVE_BITE, MOVE_SCREECH, MOVE_SCARY_FACE, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [87] = {
+ .species = SPECIES_CORPHISH,
+ .moves = {MOVE_CRABHAMMER, MOVE_WATER_PULSE, MOVE_MUD_SLAP, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [88] = {
+ .species = SPECIES_CHARMANDER,
+ .moves = {MOVE_FIRE_SPIN, MOVE_METAL_CLAW, MOVE_SMOKESCREEN, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [89] = {
+ .species = SPECIES_CYNDAQUIL,
+ .moves = {MOVE_EMBER, MOVE_SWIFT, MOVE_QUICK_ATTACK, MOVE_SMOKESCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [90] = {
+ .species = SPECIES_ABRA,
+ .moves = {MOVE_MIMIC, MOVE_METRONOME, MOVE_FLASH, MOVE_SEISMIC_TOSS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [91] = {
+ .species = SPECIES_DODUO,
+ .moves = {MOVE_FURY_ATTACK, MOVE_UPROAR, MOVE_MUD_SLAP, MOVE_FAINT_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [92] = {
+ .species = SPECIES_GASTLY,
+ .moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_NIGHT_SHADE, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [93] = {
+ .species = SPECIES_SWABLU,
+ .moves = {MOVE_TAKE_DOWN, MOVE_DREAM_EATER, MOVE_SING, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [94] = {
+ .species = SPECIES_TREECKO,
+ .moves = {MOVE_BULLET_SEED, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_LONELY
+ },
+ [95] = {
+ .species = SPECIES_TORCHIC,
+ .moves = {MOVE_FIRE_SPIN, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [96] = {
+ .species = SPECIES_MUDKIP,
+ .moves = {MOVE_WHIRLPOOL, MOVE_ENDEAVOR, MOVE_MUD_SPORT, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [97] = {
+ .species = SPECIES_SQUIRTLE,
+ .moves = {MOVE_WATER_PULSE, MOVE_BITE, MOVE_WITHDRAW, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [98] = {
+ .species = SPECIES_TOTODILE,
+ .moves = {MOVE_SLASH, MOVE_WATER_PULSE, MOVE_SCREECH, MOVE_ICY_WIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [99] = {
+ .species = SPECIES_SLOWPOKE,
+ .moves = {MOVE_CONFUSION, MOVE_DISABLE, MOVE_WATER_PULSE, MOVE_YAWN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [100] = {
+ .species = SPECIES_BULBASAUR,
+ .moves = {MOVE_RAZOR_LEAF, MOVE_SWEET_SCENT, MOVE_SLEEP_POWDER, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [101] = {
+ .species = SPECIES_CHIKORITA,
+ .moves = {MOVE_SECRET_POWER, MOVE_BULLET_SEED, MOVE_MUD_SLAP, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [102] = {
+ .species = SPECIES_ODDISH,
+ .moves = {MOVE_ACID, MOVE_STUN_SPORE, MOVE_SWEET_SCENT, MOVE_MOONLIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [103] = {
+ .species = SPECIES_PSYDUCK,
+ .moves = {MOVE_CONFUSION, MOVE_FURY_SWIPES, MOVE_AERIAL_ACE, MOVE_DISABLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HASTY
+ },
+ [104] = {
+ .species = SPECIES_CUBONE,
+ .moves = {MOVE_BONE_CLUB, MOVE_HEADBUTT, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [105] = {
+ .species = SPECIES_GOLDEEN,
+ .moves = {MOVE_WATERFALL, MOVE_FURY_ATTACK, MOVE_AGILITY, MOVE_PSYBEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [106] = {
+ .species = SPECIES_NATU,
+ .moves = {MOVE_NIGHT_SHADE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_FLASH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [107] = {
+ .species = SPECIES_CLEFAIRY,
+ .moves = {MOVE_FOLLOW_ME, MOVE_RETURN, MOVE_ENCORE, MOVE_SING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [108] = {
+ .species = SPECIES_MAGNEMITE,
+ .moves = {MOVE_SHOCK_WAVE, MOVE_SUPERSONIC, MOVE_METAL_SOUND, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_GENTLE
+ },
+ [109] = {
+ .species = SPECIES_SEEL,
+ .moves = {MOVE_AURORA_BEAM, MOVE_DIVE, MOVE_BODY_SLAM, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [110] = {
+ .species = SPECIES_GRIMER,
+ .moves = {MOVE_SLUDGE, MOVE_ROCK_TOMB, MOVE_ACID_ARMOR, MOVE_MINIMIZE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [111] = {
+ .species = SPECIES_KRABBY,
+ .moves = {MOVE_CRABHAMMER, MOVE_MUD_SHOT, MOVE_FLAIL, MOVE_KNOCK_OFF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [112] = {
+ .species = SPECIES_EXEGGCUTE,
+ .moves = {MOVE_CONFUSION, MOVE_ANCIENT_POWER, MOVE_LEECH_SEED, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [113] = {
+ .species = SPECIES_EEVEE,
+ .moves = {MOVE_CHARM, MOVE_ATTRACT, MOVE_FLAIL, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [114] = {
+ .species = SPECIES_DROWZEE,
+ .moves = {MOVE_CONFUSION, MOVE_HEADBUTT, MOVE_DISABLE, MOVE_BARRIER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [115] = {
+ .species = SPECIES_VOLTORB,
+ .moves = {MOVE_SPARK, MOVE_SCREECH, MOVE_ROLLOUT, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [116] = {
+ .species = SPECIES_CHINCHOU,
+ .moves = {MOVE_SPARK, MOVE_DIVE, MOVE_CONFUSE_RAY, MOVE_TAKE_DOWN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [117] = {
+ .species = SPECIES_TEDDIURSA,
+ .moves = {MOVE_SECRET_POWER, MOVE_FAKE_TEARS, MOVE_FAINT_ATTACK, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [118] = {
+ .species = SPECIES_DELIBIRD,
+ .moves = {MOVE_PRESENT, MOVE_ICE_BALL, MOVE_AERIAL_ACE, MOVE_HAIL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [119] = {
+ .species = SPECIES_HOUNDOUR,
+ .moves = {MOVE_CRUNCH, MOVE_EMBER, MOVE_ROAR, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [120] = {
+ .species = SPECIES_PHANPY,
+ .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_ROCK_TOMB, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [121] = {
+ .species = SPECIES_SPOINK,
+ .moves = {MOVE_PSYWAVE, MOVE_BOUNCE, MOVE_MAGIC_COAT, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [122] = {
+ .species = SPECIES_ARON,
+ .moves = {MOVE_METAL_CLAW, MOVE_AERIAL_ACE, MOVE_METAL_SOUND, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [123] = {
+ .species = SPECIES_LUVDISC,
+ .moves = {MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_DIVE, MOVE_RAIN_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [124] = {
+ .species = SPECIES_TENTACOOL,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_ACID, MOVE_BARRIER, MOVE_WRAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [125] = {
+ .species = SPECIES_CACNEA,
+ .moves = {MOVE_NEEDLE_ARM, MOVE_FAINT_ATTACK, MOVE_COTTON_SPORE, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [126] = {
+ .species = SPECIES_UNOWN,
+ .moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [127] = {
+ .species = SPECIES_KOFFING,
+ .moves = {MOVE_SLUDGE, MOVE_SMOKESCREEN, MOVE_TORMENT, MOVE_HAZE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [128] = {
+ .species = SPECIES_STARYU,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_MINIMIZE, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [129] = {
+ .species = SPECIES_SKIPLOOM,
+ .moves = {MOVE_MEGA_DRAIN, MOVE_CONFUSION, MOVE_COTTON_SPORE, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [130] = {
+ .species = SPECIES_NUZLEAF,
+ .moves = {MOVE_EXTRASENSORY, MOVE_FAKE_OUT, MOVE_RAZOR_WIND, MOVE_FAINT_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [131] = {
+ .species = SPECIES_LOMBRE,
+ .moves = {MOVE_WATER_PULSE, MOVE_FAKE_OUT, MOVE_BRICK_BREAK, MOVE_ABSORB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [132] = {
+ .species = SPECIES_VIBRAVA,
+ .moves = {MOVE_DRAGON_BREATH, MOVE_DIG, MOVE_SCREECH, MOVE_ROCK_TOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [133] = {
+ .species = SPECIES_RHYHORN,
+ .moves = {MOVE_ROCK_BLAST, MOVE_DIG, MOVE_SCARY_FACE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [134] = {
+ .species = SPECIES_CLAMPERL,
+ .moves = {MOVE_DIVE, MOVE_TOXIC, MOVE_IRON_DEFENSE, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_DEEP_SEA_SCALE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [135] = {
+ .species = SPECIES_PIDGEOTTO,
+ .moves = {MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_FEATHER_DANCE, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [136] = {
+ .species = SPECIES_GROWLITHE,
+ .moves = {MOVE_FLAME_WHEEL, MOVE_BITE, MOVE_ROAR, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [137] = {
+ .species = SPECIES_FARFETCHD,
+ .moves = {MOVE_SLASH, MOVE_KNOCK_OFF, MOVE_SWORDS_DANCE, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_STICK,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [138] = {
+ .species = SPECIES_OMANYTE,
+ .moves = {MOVE_MUD_SHOT, MOVE_WATER_GUN, MOVE_ANCIENT_POWER, MOVE_TICKLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [139] = {
+ .species = SPECIES_KABUTO,
+ .moves = {MOVE_MEGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_SAND_ATTACK, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [140] = {
+ .species = SPECIES_LILEEP,
+ .moves = {MOVE_ANCIENT_POWER, MOVE_ACID, MOVE_INGRAIN, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [141] = {
+ .species = SPECIES_ANORITH,
+ .moves = {MOVE_METAL_CLAW, MOVE_FURY_CUTTER, MOVE_ANCIENT_POWER, MOVE_WATER_GUN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [142] = {
+ .species = SPECIES_AIPOM,
+ .moves = {MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_BATON_PASS, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [143] = {
+ .species = SPECIES_ELEKID,
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_QUICK_ATTACK, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAIVE
+ },
+ [144] = {
+ .species = SPECIES_LOUDRED,
+ .moves = {MOVE_STOMP, MOVE_HOWL, MOVE_ASTONISH, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [145] = {
+ .species = SPECIES_SPINDA,
+ .moves = {MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FAINT_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [146] = {
+ .species = SPECIES_NIDORINA,
+ .moves = {MOVE_DOUBLE_KICK, MOVE_BITE, MOVE_AERIAL_ACE, MOVE_FLATTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [147] = {
+ .species = SPECIES_NIDORINO,
+ .moves = {MOVE_DOUBLE_KICK, MOVE_WATER_PULSE, MOVE_MUD_SLAP, MOVE_FLATTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [148] = {
+ .species = SPECIES_FLAAFFY,
+ .moves = {MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MILD
+ },
+ [149] = {
+ .species = SPECIES_MAGBY,
+ .moves = {MOVE_FIRE_PUNCH, MOVE_SMOKESCREEN, MOVE_CONFUSE_RAY, MOVE_SMOG},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [150] = {
+ .species = SPECIES_NOSEPASS,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [151] = {
+ .species = SPECIES_CORSOLA,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_MIRROR_COAT, MOVE_ATTRACT, MOVE_ANCIENT_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [152] = {
+ .species = SPECIES_MAWILE,
+ .moves = {MOVE_CRUNCH, MOVE_FAKE_TEARS, MOVE_IRON_DEFENSE, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [153] = {
+ .species = SPECIES_BUTTERFREE,
+ .moves = {MOVE_SILVER_WIND, MOVE_PSYBEAM, MOVE_TOXIC, MOVE_WHIRLWIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [154] = {
+ .species = SPECIES_BEEDRILL,
+ .moves = {MOVE_TWINEEDLE, MOVE_PURSUIT, MOVE_ENDEAVOR, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [155] = {
+ .species = SPECIES_POLIWHIRL,
+ .moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_SLAP, MOVE_ICY_WIND, MOVE_RAIN_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [156] = {
+ .species = SPECIES_ONIX,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_BIND, MOVE_DRAGON_BREATH, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [157] = {
+ .species = SPECIES_BEAUTIFLY,
+ .moves = {MOVE_SILVER_WIND, MOVE_MEGA_DRAIN, MOVE_ATTRACT, MOVE_WHIRLWIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [158] = {
+ .species = SPECIES_DUSTOX,
+ .moves = {MOVE_SILVER_WIND, MOVE_TOXIC, MOVE_PSYBEAM, MOVE_WHIRLWIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [159] = {
+ .species = SPECIES_LEDIAN,
+ .moves = {MOVE_COMET_PUNCH, MOVE_BATON_PASS, MOVE_SWORDS_DANCE, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BASHFUL
+ },
+ [160] = {
+ .species = SPECIES_ARIADOS,
+ .moves = {MOVE_SIGNAL_BEAM, MOVE_SPIDER_WEB, MOVE_NIGHT_SHADE, MOVE_TOXIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SERIOUS
+ },
+ [161] = {
+ .species = SPECIES_YANMA,
+ .moves = {MOVE_SIGNAL_BEAM, MOVE_AERIAL_ACE, MOVE_DOUBLE_TEAM, MOVE_DETECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_RELAXED
+ },
+ [162] = {
+ .species = SPECIES_DELCATTY,
+ .moves = {MOVE_SECRET_POWER, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_HEAL_BELL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [163] = {
+ .species = SPECIES_SABLEYE,
+ .moves = {MOVE_FAINT_ATTACK, MOVE_CONFUSE_RAY, MOVE_KNOCK_OFF, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [164] = {
+ .species = SPECIES_LICKITUNG,
+ .moves = {MOVE_SLAM, MOVE_BRICK_BREAK, MOVE_LICK, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [165] = {
+ .species = SPECIES_WEEPINBELL,
+ .moves = {MOVE_RAZOR_LEAF, MOVE_ACID, MOVE_WRAP, MOVE_SWEET_SCENT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [166] = {
+ .species = SPECIES_GRAVELER,
+ .moves = {MOVE_MAGNITUDE, MOVE_ROCK_THROW, MOVE_DEFENSE_CURL, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [167] = {
+ .species = SPECIES_GLOOM,
+ .moves = {MOVE_PETAL_DANCE, MOVE_ACID, MOVE_STUN_SPORE, MOVE_MOONLIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [168] = {
+ .species = SPECIES_PORYGON,
+ .moves = {MOVE_PSYBEAM, MOVE_ICY_WIND, MOVE_RECYCLE, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [169] = {
+ .species = SPECIES_KADABRA,
+ .moves = {MOVE_CONFUSION, MOVE_ROLE_PLAY, MOVE_FUTURE_SIGHT, MOVE_DISABLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [170] = {
+ .species = SPECIES_WAILMER,
+ .moves = {MOVE_WHIRLPOOL, MOVE_ROAR, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_DOCILE
+ },
+ [171] = {
+ .species = SPECIES_ROSELIA,
+ .moves = {MOVE_MAGICAL_LEAF, MOVE_TOXIC, MOVE_GRASS_WHISTLE, MOVE_COTTON_SPORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [172] = {
+ .species = SPECIES_VOLBEAT,
+ .moves = {MOVE_SILVER_WIND, MOVE_CONFUSE_RAY, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [173] = {
+ .species = SPECIES_ILLUMISE,
+ .moves = {MOVE_SILVER_WIND, MOVE_WISH, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [174] = {
+ .species = SPECIES_IVYSAUR,
+ .moves = {MOVE_PETAL_DANCE, MOVE_GROWTH, MOVE_SWEET_SCENT, MOVE_FURY_CUTTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_GENTLE
+ },
+ [175] = {
+ .species = SPECIES_CHARMELEON,
+ .moves = {MOVE_SLASH, MOVE_FIRE_SPIN, MOVE_SWORDS_DANCE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [176] = {
+ .species = SPECIES_WARTORTLE,
+ .moves = {MOVE_WATER_PULSE, MOVE_BITE, MOVE_MUD_SLAP, MOVE_YAWN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [177] = {
+ .species = SPECIES_PARASECT,
+ .moves = {MOVE_SLASH, MOVE_PSYBEAM, MOVE_STUN_SPORE, MOVE_FLASH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_RASH
+ },
+ [178] = {
+ .species = SPECIES_MACHOKE,
+ .moves = {MOVE_LOW_KICK, MOVE_ROCK_TOMB, MOVE_FORESIGHT, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [179] = {
+ .species = SPECIES_HAUNTER,
+ .moves = {MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_SPITE, MOVE_GRUDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RASH
+ },
+ [180] = {
+ .species = SPECIES_BAYLEEF,
+ .moves = {MOVE_RAZOR_LEAF, MOVE_TOXIC, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [181] = {
+ .species = SPECIES_QUILAVA,
+ .moves = {MOVE_FLAME_WHEEL, MOVE_FURY_SWIPES, MOVE_SWIFT, MOVE_SMOKESCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [182] = {
+ .species = SPECIES_CROCONAW,
+ .moves = {MOVE_SLASH, MOVE_WATER_PULSE, MOVE_BITE, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [183] = {
+ .species = SPECIES_TOGETIC,
+ .moves = {MOVE_AERIAL_ACE, MOVE_MAGICAL_LEAF, MOVE_WISH, MOVE_FOLLOW_ME},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [184] = {
+ .species = SPECIES_MURKROW,
+ .moves = {MOVE_FAINT_ATTACK, MOVE_FLY, MOVE_TORMENT, MOVE_TAUNT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [185] = {
+ .species = SPECIES_WOBBUFFET,
+ .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_CHARM, MOVE_SAFEGUARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [186] = {
+ .species = SPECIES_PLUSLE,
+ .moves = {MOVE_SPARK, MOVE_FAKE_TEARS, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [187] = {
+ .species = SPECIES_MINUN,
+ .moves = {MOVE_SPARK, MOVE_CHARM, MOVE_ENCORE, MOVE_HELPING_HAND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [188] = {
+ .species = SPECIES_GROVYLE,
+ .moves = {MOVE_FURY_CUTTER, MOVE_ENDEAVOR, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [189] = {
+ .species = SPECIES_COMBUSKEN,
+ .moves = {MOVE_EMBER, MOVE_DOUBLE_KICK, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [190] = {
+ .species = SPECIES_MARSHTOMP,
+ .moves = {MOVE_MUD_SHOT, MOVE_WATER_GUN, MOVE_ROCK_TOMB, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [191] = {
+ .species = SPECIES_PONYTA,
+ .moves = {MOVE_FIRE_SPIN, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_TAIL_WHIP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [192] = {
+ .species = SPECIES_AZUMARILL,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_FACADE, MOVE_DIG, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_DOCILE
+ },
+ [193] = {
+ .species = SPECIES_SUDOWOODO,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_FAINT_ATTACK, MOVE_SANDSTORM, MOVE_BLOCK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [194] = {
+ .species = SPECIES_MAGCARGO,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_EMBER, MOVE_ACID_ARMOR, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_GENTLE
+ },
+ [195] = {
+ .species = SPECIES_PUPITAR,
+ .moves = {MOVE_DIG, MOVE_BITE, MOVE_SCARY_FACE, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [196] = {
+ .species = SPECIES_SEALEO,
+ .moves = {MOVE_ICE_BALL, MOVE_HAIL, MOVE_SNORE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [197] = {
+ .species = SPECIES_RATICATE,
+ .moves = {MOVE_ENDEAVOR, MOVE_PURSUIT, MOVE_SCARY_FACE, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAIVE
+ },
+ [198] = {
+ .species = SPECIES_MASQUERAIN,
+ .moves = {MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ICY_WIND, MOVE_STUN_SPORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_RELAXED
+ },
+ [199] = {
+ .species = SPECIES_FURRET,
+ .moves = {MOVE_SLAM, MOVE_PROTECT, MOVE_HELPING_HAND, MOVE_FOLLOW_ME},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_SERIOUS
+ },
+ [200] = {
+ .species = SPECIES_DUNSPARCE,
+ .moves = {MOVE_HEADBUTT, MOVE_GLARE, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [201] = {
+ .species = SPECIES_DRAGONAIR,
+ .moves = {MOVE_DRAGON_BREATH, MOVE_LEER, MOVE_WRAP, MOVE_SAFEGUARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [202] = {
+ .species = SPECIES_MIGHTYENA,
+ .moves = {MOVE_BITE, MOVE_POISON_FANG, MOVE_TAUNT, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_TIMID
+ },
+ [203] = {
+ .species = SPECIES_LINOONE,
+ .moves = {MOVE_SECRET_POWER, MOVE_SAND_ATTACK, MOVE_COVET, MOVE_TICKLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [204] = {
+ .species = SPECIES_CASTFORM,
+ .moves = {MOVE_EMBER, MOVE_WATER_PULSE, MOVE_SHOCK_WAVE, MOVE_ICY_WIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HASTY
+ },
+ [205] = {
+ .species = SPECIES_SHELGON,
+ .moves = {MOVE_HEADBUTT, MOVE_DRAGON_BREATH, MOVE_PROTECT, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [206] = {
+ .species = SPECIES_METANG,
+ .moves = {MOVE_METAL_CLAW, MOVE_CONFUSION, MOVE_PURSUIT, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [207] = {
+ .species = SPECIES_WIGGLYTUFF,
+ .moves = {MOVE_SING, MOVE_DISABLE, MOVE_WISH, MOVE_SECRET_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_RELAXED
+ },
+ [208] = {
+ .species = SPECIES_SUNFLORA,
+ .moves = {MOVE_PETAL_DANCE, MOVE_INGRAIN, MOVE_LEECH_SEED, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [209] = {
+ .species = SPECIES_CHIMECHO,
+ .moves = {MOVE_PSYWAVE, MOVE_TAKE_DOWN, MOVE_HEAL_BELL, MOVE_SAFEGUARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [210] = {
+ .species = SPECIES_GLIGAR,
+ .moves = {MOVE_METAL_CLAW, MOVE_DIG, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HASTY
+ },
+ [211] = {
+ .species = SPECIES_QWILFISH,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_PIN_MISSILE, MOVE_SPIKES, MOVE_MINIMIZE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .nature = NATURE_IMPISH
+ },
+ [212] = {
+ .species = SPECIES_SNEASEL,
+ .moves = {MOVE_FAINT_ATTACK, MOVE_FAKE_OUT, MOVE_ICY_WIND, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [213] = {
+ .species = SPECIES_PELIPPER,
+ .moves = {MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_STOCKPILE, MOVE_SWALLOW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [214] = {
+ .species = SPECIES_SWELLOW,
+ .moves = {MOVE_FLY, MOVE_ENDEAVOR, MOVE_FACADE, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [215] = {
+ .species = SPECIES_LAIRON,
+ .moves = {MOVE_METAL_CLAW, MOVE_ROCK_TOMB, MOVE_IRON_DEFENSE, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [216] = {
+ .species = SPECIES_TANGELA,
+ .moves = {MOVE_MEGA_DRAIN, MOVE_SLAM, MOVE_TOXIC, MOVE_BIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [217] = {
+ .species = SPECIES_ARBOK,
+ .moves = {MOVE_POISON_FANG, MOVE_DIG, MOVE_BITE, MOVE_GLARE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [218] = {
+ .species = SPECIES_PERSIAN,
+ .moves = {MOVE_FAKE_OUT, MOVE_SLASH, MOVE_TORMENT, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [219] = {
+ .species = SPECIES_SEADRA,
+ .moves = {MOVE_AURORA_BEAM, MOVE_SMOKESCREEN, MOVE_WATER_GUN, MOVE_RAIN_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [220] = {
+ .species = SPECIES_KECLEON,
+ .moves = {MOVE_SECRET_POWER, MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_SEISMIC_TOSS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAIVE
+ },
+ [221] = {
+ .species = SPECIES_VIGOROTH,
+ .moves = {MOVE_SLASH, MOVE_COUNTER, MOVE_ENCORE, MOVE_UPROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [222] = {
+ .species = SPECIES_LUNATONE,
+ .moves = {MOVE_CONFUSION, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [223] = {
+ .species = SPECIES_SOLROCK,
+ .moves = {MOVE_CONFUSION, MOVE_FIRE_SPIN, MOVE_LIGHT_SCREEN, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [224] = {
+ .species = SPECIES_NOCTOWL,
+ .moves = {MOVE_CONFUSION, MOVE_AERIAL_ACE, MOVE_FAINT_ATTACK, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [225] = {
+ .species = SPECIES_SANDSLASH,
+ .moves = {MOVE_CRUSH_CLAW, MOVE_ROCK_SLIDE, MOVE_SWIFT, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [226] = {
+ .species = SPECIES_VENOMOTH,
+ .moves = {MOVE_SILVER_WIND, MOVE_PSYBEAM, MOVE_SLEEP_POWDER, MOVE_SKILL_SWAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [227] = {
+ .species = SPECIES_CHANSEY,
+ .moves = {MOVE_METRONOME, MOVE_REFRESH, MOVE_DEFENSE_CURL, MOVE_MINIMIZE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_RELAXED
+ },
+ [228] = {
+ .species = SPECIES_SEAKING,
+ .moves = {MOVE_WATER_PULSE, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [229] = {
+ .species = SPECIES_JUMPLUFF,
+ .moves = {MOVE_AERIAL_ACE, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [230] = {
+ .species = SPECIES_PILOSWINE,
+ .moves = {MOVE_DIG, MOVE_ANCIENT_POWER, MOVE_HAIL, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [231] = {
+ .species = SPECIES_GOLBAT,
+ .moves = {MOVE_AIR_CUTTER, MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_STEEL_WING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [232] = {
+ .species = SPECIES_PRIMEAPE,
+ .moves = {MOVE_KARATE_CHOP, MOVE_COUNTER, MOVE_SWAGGER, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [233] = {
+ .species = SPECIES_HITMONLEE,
+ .moves = {MOVE_ROLLING_KICK, MOVE_BRICK_BREAK, MOVE_FOCUS_ENERGY, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [234] = {
+ .species = SPECIES_HITMONCHAN,
+ .moves = {MOVE_MACH_PUNCH, MOVE_SKY_UPPERCUT, MOVE_DETECT, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [235] = {
+ .species = SPECIES_GIRAFARIG,
+ .moves = {MOVE_PSYBEAM, MOVE_STOMP, MOVE_WISH, MOVE_SKILL_SWAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [236] = {
+ .species = SPECIES_HITMONTOP,
+ .moves = {MOVE_TRIPLE_KICK, MOVE_DIG, MOVE_MACH_PUNCH, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [237] = {
+ .species = SPECIES_BANETTE,
+ .moves = {MOVE_NIGHT_SHADE, MOVE_WILL_O_WISP, MOVE_SPITE, MOVE_KNOCK_OFF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [238] = {
+ .species = SPECIES_NINJASK,
+ .moves = {MOVE_BATON_PASS, MOVE_SWORDS_DANCE, MOVE_ENDURE, MOVE_DIG},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MILD
+ },
+ [239] = {
+ .species = SPECIES_SEVIPER,
+ .moves = {MOVE_POISON_TAIL, MOVE_BITE, MOVE_GLARE, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [240] = {
+ .species = SPECIES_ZANGOOSE,
+ .moves = {MOVE_SLASH, MOVE_DOUBLE_KICK, MOVE_ROAR, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [241] = {
+ .species = SPECIES_CAMERUPT,
+ .moves = {MOVE_MAGNITUDE, MOVE_PROTECT, MOVE_SANDSTORM, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [242] = {
+ .species = SPECIES_SHARPEDO,
+ .moves = {MOVE_SLASH, MOVE_BITE, MOVE_WATER_PULSE, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [243] = {
+ .species = SPECIES_TROPIUS,
+ .moves = {MOVE_MAGICAL_LEAF, MOVE_WHIRLWIND, MOVE_AERIAL_ACE, MOVE_STEEL_WING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [244] = {
+ .species = SPECIES_MAGNETON,
+ .moves = {MOVE_SHOCK_WAVE, MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_LONELY
+ },
+ [245] = {
+ .species = SPECIES_MANTINE,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_AERIAL_ACE, MOVE_RAIN_DANCE, MOVE_ICY_WIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [246] = {
+ .species = SPECIES_STANTLER,
+ .moves = {MOVE_EXTRASENSORY, MOVE_CONFUSE_RAY, MOVE_STOMP, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_GENTLE
+ },
+ [247] = {
+ .species = SPECIES_ABSOL,
+ .moves = {MOVE_BITE, MOVE_RAZOR_WIND, MOVE_FUTURE_SIGHT, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [248] = {
+ .species = SPECIES_SWALOT,
+ .moves = {MOVE_STOCKPILE, MOVE_SWALLOW, MOVE_SPIT_UP, MOVE_SLUDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIRKY
+ },
+ [249] = {
+ .species = SPECIES_CRAWDAUNT,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_VICE_GRIP, MOVE_KNOCK_OFF, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [250] = {
+ .species = SPECIES_PIDGEOT,
+ .moves = {MOVE_AERIAL_ACE, MOVE_FEATHER_DANCE, MOVE_MUD_SLAP, MOVE_FAINT_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [251] = {
+ .species = SPECIES_GRUMPIG,
+ .moves = {MOVE_PSYBEAM, MOVE_CONFUSE_RAY, MOVE_FUTURE_SIGHT, MOVE_MAGIC_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [252] = {
+ .species = SPECIES_TORKOAL,
+ .moves = {MOVE_EMBER, MOVE_FIRE_SPIN, MOVE_SMOKESCREEN, MOVE_AMNESIA},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [253] = {
+ .species = SPECIES_KINGLER,
+ .moves = {MOVE_CRABHAMMER, MOVE_METAL_CLAW, MOVE_MUD_SHOT, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [254] = {
+ .species = SPECIES_CACTURNE,
+ .moves = {MOVE_NEEDLE_ARM, MOVE_FAINT_ATTACK, MOVE_ACID, MOVE_MEGA_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_HASTY
+ },
+ [255] = {
+ .species = SPECIES_BELLOSSOM,
+ .moves = {MOVE_PETAL_DANCE, MOVE_SAFEGUARD, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [256] = {
+ .species = SPECIES_OCTILLERY,
+ .moves = {MOVE_OCTAZOOKA, MOVE_AURORA_BEAM, MOVE_PSYBEAM, MOVE_ROCK_BLAST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [257] = {
+ .species = SPECIES_HUNTAIL,
+ .moves = {MOVE_WHIRLPOOL, MOVE_SCARY_FACE, MOVE_MUD_SLAP, MOVE_BITE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [258] = {
+ .species = SPECIES_GOREBYSS,
+ .moves = {MOVE_WHIRLPOOL, MOVE_AMNESIA, MOVE_ICY_WIND, MOVE_CONFUSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [259] = {
+ .species = SPECIES_RELICANTH,
+ .moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_HARDEN, MOVE_AMNESIA},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [260] = {
+ .species = SPECIES_OMASTAR,
+ .moves = {MOVE_BUBBLE_BEAM, MOVE_SPIKE_CANNON, MOVE_TICKLE, MOVE_ANCIENT_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [261] = {
+ .species = SPECIES_KABUTOPS,
+ .moves = {MOVE_SLASH, MOVE_DIG, MOVE_FURY_CUTTER, MOVE_KNOCK_OFF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [262] = {
+ .species = SPECIES_POLIWRATH,
+ .moves = {MOVE_SUBMISSION, MOVE_DIG, MOVE_ROCK_TOMB, MOVE_BUBBLE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [263] = {
+ .species = SPECIES_SCYTHER,
+ .moves = {MOVE_FURY_CUTTER, MOVE_AERIAL_ACE, MOVE_LIGHT_SCREEN, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [264] = {
+ .species = SPECIES_PINSIR,
+ .moves = {MOVE_SUBMISSION, MOVE_FOCUS_ENERGY, MOVE_SWORDS_DANCE, MOVE_REVENGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [265] = {
+ .species = SPECIES_POLITOED,
+ .moves = {MOVE_DIVE, MOVE_DIG, MOVE_HYPNOSIS, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_RELAXED
+ },
+ [266] = {
+ .species = SPECIES_CLOYSTER,
+ .moves = {MOVE_AURORA_BEAM, MOVE_SPIKE_CANNON, MOVE_SUPERSONIC, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [267] = {
+ .species = SPECIES_DELCATTY,
+ .moves = {MOVE_FAKE_TEARS, MOVE_SING, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [268] = {
+ .species = SPECIES_SABLEYE,
+ .moves = {MOVE_SHADOW_BALL, MOVE_FAINT_ATTACK, MOVE_CONFUSE_RAY, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [269] = {
+ .species = SPECIES_LICKITUNG,
+ .moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [270] = {
+ .species = SPECIES_WEEPINBELL,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_RAZOR_LEAF, MOVE_SLEEP_POWDER, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIRKY
+ },
+ [271] = {
+ .species = SPECIES_GRAVELER,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [272] = {
+ .species = SPECIES_GLOOM,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SLUDGE_BOMB, MOVE_MOONLIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [273] = {
+ .species = SPECIES_PORYGON,
+ .moves = {MOVE_TRI_ATTACK, MOVE_PSYCHIC, MOVE_THUNDER_WAVE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [274] = {
+ .species = SPECIES_KADABRA,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDER_WAVE, MOVE_REFLECT, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [275] = {
+ .species = SPECIES_WAILMER,
+ .moves = {MOVE_WATER_SPOUT, MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_DOCILE
+ },
+ [276] = {
+ .species = SPECIES_ROSELIA,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_GRASS_WHISTLE, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [277] = {
+ .species = SPECIES_VOLBEAT,
+ .moves = {MOVE_SIGNAL_BEAM, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_TAIL_GLOW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [278] = {
+ .species = SPECIES_ILLUMISE,
+ .moves = {MOVE_SILVER_WIND, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [279] = {
+ .species = SPECIES_IVYSAUR,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_SLEEP_POWDER, MOVE_LEECH_SEED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [280] = {
+ .species = SPECIES_CHARMELEON,
+ .moves = {MOVE_FLAMETHROWER, MOVE_SLASH, MOVE_ANCIENT_POWER, MOVE_DRAGON_RAGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [281] = {
+ .species = SPECIES_WARTORTLE,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAPID_SPIN, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [282] = {
+ .species = SPECIES_PARASECT,
+ .moves = {MOVE_SPORE, MOVE_GIGA_DRAIN, MOVE_DIG, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [283] = {
+ .species = SPECIES_MACHOKE,
+ .moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FORESIGHT, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [284] = {
+ .species = SPECIES_HAUNTER,
+ .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_NIGHTMARE, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [285] = {
+ .species = SPECIES_BAYLEEF,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_BODY_SLAM, MOVE_GRASS_WHISTLE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [286] = {
+ .species = SPECIES_QUILAVA,
+ .moves = {MOVE_FLAMETHROWER, MOVE_CRUSH_CLAW, MOVE_BODY_SLAM, MOVE_SMOKESCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [287] = {
+ .species = SPECIES_CROCONAW,
+ .moves = {MOVE_MEGA_KICK, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_DIG},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [288] = {
+ .species = SPECIES_TOGETIC,
+ .moves = {MOVE_RETURN, MOVE_SWEET_KISS, MOVE_AERIAL_ACE, MOVE_YAWN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [289] = {
+ .species = SPECIES_MURKROW,
+ .moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [290] = {
+ .species = SPECIES_WOBBUFFET,
+ .moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_ENCORE, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_CAREFUL
+ },
+ [291] = {
+ .species = SPECIES_PLUSLE,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_SEISMIC_TOSS, MOVE_WISH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [292] = {
+ .species = SPECIES_MINUN,
+ .moves = {MOVE_THUNDERBOLT, MOVE_ATTRACT, MOVE_CHARM, MOVE_WISH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [293] = {
+ .species = SPECIES_GROVYLE,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_CRUSH_CLAW, MOVE_SCREECH, MOVE_ROCK_TOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [294] = {
+ .species = SPECIES_COMBUSKEN,
+ .moves = {MOVE_FLAMETHROWER, MOVE_SKY_UPPERCUT, MOVE_SLASH, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [295] = {
+ .species = SPECIES_MARSHTOMP,
+ .moves = {MOVE_MUDDY_WATER, MOVE_EARTHQUAKE, MOVE_MUD_SLAP, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [296] = {
+ .species = SPECIES_PONYTA,
+ .moves = {MOVE_FLAMETHROWER, MOVE_BODY_SLAM, MOVE_DOUBLE_KICK, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [297] = {
+ .species = SPECIES_AZUMARILL,
+ .moves = {MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_IRON_TAIL, MOVE_DIG},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [298] = {
+ .species = SPECIES_SUDOWOODO,
+ .moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_LOW_KICK, MOVE_SELF_DESTRUCT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [299] = {
+ .species = SPECIES_MAGCARGO,
+ .moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [300] = {
+ .species = SPECIES_PUPITAR,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [301] = {
+ .species = SPECIES_SEALEO,
+ .moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_BODY_SLAM, MOVE_HAIL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [302] = {
+ .species = SPECIES_RATICATE,
+ .moves = {MOVE_SUPER_FANG, MOVE_HYPER_FANG, MOVE_SHADOW_BALL, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [303] = {
+ .species = SPECIES_MASQUERAIN,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_GIGA_DRAIN, MOVE_STUN_SPORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [304] = {
+ .species = SPECIES_FURRET,
+ .moves = {MOVE_TRICK, MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_FOLLOW_ME},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [305] = {
+ .species = SPECIES_DUNSPARCE,
+ .moves = {MOVE_ICE_BEAM, MOVE_ROCK_TOMB, MOVE_BITE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [306] = {
+ .species = SPECIES_DRAGONAIR,
+ .moves = {MOVE_RETURN, MOVE_REST, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [307] = {
+ .species = SPECIES_MIGHTYENA,
+ .moves = {MOVE_CRUNCH, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIRKY
+ },
+ [308] = {
+ .species = SPECIES_LINOONE,
+ .moves = {MOVE_TRICK, MOVE_FRUSTRATION, MOVE_THUNDER_WAVE, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [309] = {
+ .species = SPECIES_CASTFORM,
+ .moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_WATER_PULSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [310] = {
+ .species = SPECIES_SHELGON,
+ .moves = {MOVE_FRUSTRATION, MOVE_DRAGON_DANCE, MOVE_CRUNCH, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [311] = {
+ .species = SPECIES_METANG,
+ .moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_BODY_SLAM, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [312] = {
+ .species = SPECIES_WIGGLYTUFF,
+ .moves = {MOVE_FAKE_TEARS, MOVE_SING, MOVE_DREAM_EATER, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_DOCILE
+ },
+ [313] = {
+ .species = SPECIES_SUNFLORA,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_GROWTH, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [314] = {
+ .species = SPECIES_CHIMECHO,
+ .moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEAL_BELL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [315] = {
+ .species = SPECIES_GLIGAR,
+ .moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_GUILLOTINE, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [316] = {
+ .species = SPECIES_QWILFISH,
+ .moves = {MOVE_REVENGE, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [317] = {
+ .species = SPECIES_SNEASEL,
+ .moves = {MOVE_CRUSH_CLAW, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [318] = {
+ .species = SPECIES_PELIPPER,
+ .moves = {MOVE_SURF, MOVE_BLIZZARD, MOVE_AERIAL_ACE, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [319] = {
+ .species = SPECIES_SWELLOW,
+ .moves = {MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_PURSUIT, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [320] = {
+ .species = SPECIES_LAIRON,
+ .moves = {MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_ROAR, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [321] = {
+ .species = SPECIES_TANGELA,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_STUN_SPORE, MOVE_REST, MOVE_AMNESIA},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [322] = {
+ .species = SPECIES_ARBOK,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_GLARE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [323] = {
+ .species = SPECIES_PERSIAN,
+ .moves = {MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_ROAR, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [324] = {
+ .species = SPECIES_SEADRA,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_FRUSTRATION, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [325] = {
+ .species = SPECIES_KECLEON,
+ .moves = {MOVE_TRICK, MOVE_BRICK_BREAK, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [326] = {
+ .species = SPECIES_VIGOROTH,
+ .moves = {MOVE_CRUSH_CLAW, MOVE_REVERSAL, MOVE_ENDURE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [327] = {
+ .species = SPECIES_LUNATONE,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_COSMIC_POWER, MOVE_CALM_MIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [328] = {
+ .species = SPECIES_SOLROCK,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COSMIC_POWER, MOVE_OVERHEAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [329] = {
+ .species = SPECIES_NOCTOWL,
+ .moves = {MOVE_PSYCHIC, MOVE_FAINT_ATTACK, MOVE_AERIAL_ACE, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [330] = {
+ .species = SPECIES_SANDSLASH,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUSH_CLAW, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [331] = {
+ .species = SPECIES_VENOMOTH,
+ .moves = {MOVE_SIGNAL_BEAM, MOVE_PSYCHIC, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [332] = {
+ .species = SPECIES_CHANSEY,
+ .moves = {MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_SOFT_BOILED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_RELAXED
+ },
+ [333] = {
+ .species = SPECIES_SEAKING,
+ .moves = {MOVE_HORN_DRILL, MOVE_MEGAHORN, MOVE_SLEEP_TALK, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [334] = {
+ .species = SPECIES_JUMPLUFF,
+ .moves = {MOVE_LEECH_SEED, MOVE_SLEEP_POWDER, MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BOLD
+ },
+ [335] = {
+ .species = SPECIES_PILOSWINE,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BODY_SLAM, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_ADAMANT
+ },
+ [336] = {
+ .species = SPECIES_GOLBAT,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_AIR_CUTTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [337] = {
+ .species = SPECIES_PRIMEAPE,
+ .moves = {MOVE_CROSS_CHOP, MOVE_ROCK_TOMB, MOVE_OVERHEAT, MOVE_BULK_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [338] = {
+ .species = SPECIES_HITMONLEE,
+ .moves = {MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_FORESIGHT, MOVE_ROCK_TOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [339] = {
+ .species = SPECIES_HITMONCHAN,
+ .moves = {MOVE_DYNAMIC_PUNCH, MOVE_MACH_PUNCH, MOVE_DETECT, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [340] = {
+ .species = SPECIES_GIRAFARIG,
+ .moves = {MOVE_PSYCHIC, MOVE_CRUNCH, MOVE_BATON_PASS, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [341] = {
+ .species = SPECIES_HITMONTOP,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_SEISMIC_TOSS, MOVE_ROCK_SLIDE, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [342] = {
+ .species = SPECIES_BANETTE,
+ .moves = {MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_SCREECH, MOVE_WILL_O_WISP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_ADAMANT
+ },
+ [343] = {
+ .species = SPECIES_NINJASK,
+ .moves = {MOVE_SLASH, MOVE_SHADOW_BALL, MOVE_SWORDS_DANCE, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [344] = {
+ .species = SPECIES_SEVIPER,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [345] = {
+ .species = SPECIES_ZANGOOSE,
+ .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [346] = {
+ .species = SPECIES_CAMERUPT,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ERUPTION, MOVE_BODY_SLAM, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [347] = {
+ .species = SPECIES_SHARPEDO,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_SURF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [348] = {
+ .species = SPECIES_TROPIUS,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [349] = {
+ .species = SPECIES_MAGNETON,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [350] = {
+ .species = SPECIES_MANTINE,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAIN_DANCE, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [351] = {
+ .species = SPECIES_STANTLER,
+ .moves = {MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [352] = {
+ .species = SPECIES_ABSOL,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IRON_TAIL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [353] = {
+ .species = SPECIES_SWALOT,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_BODY_SLAM, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [354] = {
+ .species = SPECIES_CRAWDAUNT,
+ .moves = {MOVE_GUILLOTINE, MOVE_FRUSTRATION, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [355] = {
+ .species = SPECIES_PIDGEOT,
+ .moves = {MOVE_RETURN, MOVE_AERIAL_ACE, MOVE_STEEL_WING, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [356] = {
+ .species = SPECIES_GRUMPIG,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [357] = {
+ .species = SPECIES_TORKOAL,
+ .moves = {MOVE_OVERHEAT, MOVE_BODY_SLAM, MOVE_SMOKESCREEN, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [358] = {
+ .species = SPECIES_KINGLER,
+ .moves = {MOVE_GUILLOTINE, MOVE_ROCK_TOMB, MOVE_FLAIL, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [359] = {
+ .species = SPECIES_CACTURNE,
+ .moves = {MOVE_MEGA_KICK, MOVE_TEETER_DANCE, MOVE_FAINT_ATTACK, MOVE_SANDSTORM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_HARDY
+ },
+ [360] = {
+ .species = SPECIES_BELLOSSOM,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_ATTRACT, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [361] = {
+ .species = SPECIES_OCTILLERY,
+ .moves = {MOVE_OCTAZOOKA, MOVE_FIRE_BLAST, MOVE_THUNDER_WAVE, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [362] = {
+ .species = SPECIES_HUNTAIL,
+ .moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_CRUNCH, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [363] = {
+ .species = SPECIES_GOREBYSS,
+ .moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_PSYCHIC, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [364] = {
+ .species = SPECIES_RELICANTH,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AMNESIA, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [365] = {
+ .species = SPECIES_OMASTAR,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_ICE_BEAM, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [366] = {
+ .species = SPECIES_KABUTOPS,
+ .moves = {MOVE_SLASH, MOVE_ROCK_SLIDE, MOVE_FLAIL, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [367] = {
+ .species = SPECIES_POLIWRATH,
+ .moves = {MOVE_BRICK_BREAK, MOVE_HYPNOSIS, MOVE_REST, MOVE_BELLY_DRUM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [368] = {
+ .species = SPECIES_SCYTHER,
+ .moves = {MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [369] = {
+ .species = SPECIES_PINSIR,
+ .moves = {MOVE_GUILLOTINE, MOVE_SWORDS_DANCE, MOVE_FLAIL, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [370] = {
+ .species = SPECIES_POLITOED,
+ .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_MUD_SLAP, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [371] = {
+ .species = SPECIES_CLOYSTER,
+ .moves = {MOVE_DIVE, MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [372] = {
+ .species = SPECIES_DUGTRIO,
+ .moves = {MOVE_EARTHQUAKE, MOVE_TRI_ATTACK, MOVE_SLASH, MOVE_SAND_TOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [373] = {
+ .species = SPECIES_MEDICHAM,
+ .moves = {MOVE_PSYCHIC, MOVE_HI_JUMP_KICK, MOVE_CALM_MIND, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [374] = {
+ .species = SPECIES_MISDREAVUS,
+ .moves = {MOVE_PAIN_SPLIT, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [375] = {
+ .species = SPECIES_FEAROW,
+ .moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_FACADE, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [376] = {
+ .species = SPECIES_GRANBULL,
+ .moves = {MOVE_MEGA_KICK, MOVE_SMELLING_SALT, MOVE_THUNDER_WAVE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [377] = {
+ .species = SPECIES_JYNX,
+ .moves = {MOVE_ICE_BEAM, MOVE_FAKE_OUT, MOVE_LOVELY_KISS, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [378] = {
+ .species = SPECIES_DUSCLOPS,
+ .moves = {MOVE_WILL_O_WISP, MOVE_SEISMIC_TOSS, MOVE_PAIN_SPLIT, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [379] = {
+ .species = SPECIES_DODRIO,
+ .moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_SLEEP_TALK, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [380] = {
+ .species = SPECIES_MR_MIME,
+ .moves = {MOVE_PSYCHIC, MOVE_MAGICAL_LEAF, MOVE_FAKE_OUT, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [381] = {
+ .species = SPECIES_LANTURN,
+ .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [382] = {
+ .species = SPECIES_BRELOOM,
+ .moves = {MOVE_SKY_UPPERCUT, MOVE_MACH_PUNCH, MOVE_HEADBUTT, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [383] = {
+ .species = SPECIES_FORRETRESS,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_LIGHT_SCREEN, MOVE_SPIKES},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [384] = {
+ .species = SPECIES_WHISCASH,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AMNESIA, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [385] = {
+ .species = SPECIES_XATU,
+ .moves = {MOVE_DRILL_PECK, MOVE_NIGHT_SHADE, MOVE_WISH, MOVE_FUTURE_SIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [386] = {
+ .species = SPECIES_SKARMORY,
+ .moves = {MOVE_STEEL_WING, MOVE_AIR_CUTTER, MOVE_COUNTER, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [387] = {
+ .species = SPECIES_MAROWAK,
+ .moves = {MOVE_BONEMERANG, MOVE_ROCK_SLIDE, MOVE_ICY_WIND, MOVE_HEADBUTT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [388] = {
+ .species = SPECIES_QUAGSIRE,
+ .moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [389] = {
+ .species = SPECIES_CLEFABLE,
+ .moves = {MOVE_METRONOME, MOVE_DOUBLE_TEAM, MOVE_REFLECT, MOVE_FOLLOW_ME},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BRAVE
+ },
+ [390] = {
+ .species = SPECIES_HARIYAMA,
+ .moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [391] = {
+ .species = SPECIES_RAICHU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_QUICK_ATTACK, MOVE_LIGHT_SCREEN, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [392] = {
+ .species = SPECIES_DEWGONG,
+ .moves = {MOVE_ICE_BEAM, MOVE_ICY_WIND, MOVE_HEADBUTT, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [393] = {
+ .species = SPECIES_MANECTRIC,
+ .moves = {MOVE_THUNDERBOLT, MOVE_FLASH, MOVE_QUICK_ATTACK, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [394] = {
+ .species = SPECIES_VILEPLUME,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_PETAL_DANCE, MOVE_MOONLIGHT, MOVE_AROMATHERAPY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [395] = {
+ .species = SPECIES_VICTREEBEL,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_SWEET_SCENT, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [396] = {
+ .species = SPECIES_ELECTRODE,
+ .moves = {MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [397] = {
+ .species = SPECIES_EXPLOUD,
+ .moves = {MOVE_HYPER_VOICE, MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [398] = {
+ .species = SPECIES_SHIFTRY,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_FAINT_ATTACK, MOVE_QUICK_ATTACK, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [399] = {
+ .species = SPECIES_GLALIE,
+ .moves = {MOVE_ICE_BEAM, MOVE_CRUNCH, MOVE_HAIL, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [400] = {
+ .species = SPECIES_LUDICOLO,
+ .moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [401] = {
+ .species = SPECIES_HYPNO,
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_HYPNOSIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [402] = {
+ .species = SPECIES_GOLEM,
+ .moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_ROCK_TOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [403] = {
+ .species = SPECIES_RHYDON,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_TOMB, MOVE_SCARY_FACE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [404] = {
+ .species = SPECIES_ALAKAZAM,
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [405] = {
+ .species = SPECIES_WEEZING,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL, MOVE_SMOKESCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [406] = {
+ .species = SPECIES_KANGASKHAN,
+ .moves = {MOVE_DIZZY_PUNCH, MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [407] = {
+ .species = SPECIES_ELECTABUZZ,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_BRICK_BREAK, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [408] = {
+ .species = SPECIES_TAUROS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_THRASH, MOVE_SWAGGER, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [409] = {
+ .species = SPECIES_SLOWBRO,
+ .moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_HEADBUTT, MOVE_ICE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [410] = {
+ .species = SPECIES_SLOWKING,
+ .moves = {MOVE_PSYCHIC, MOVE_BRICK_BREAK, MOVE_AMNESIA, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [411] = {
+ .species = SPECIES_MILTANK,
+ .moves = {MOVE_FACADE, MOVE_SHADOW_BALL, MOVE_COUNTER, MOVE_MILK_DRINK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [412] = {
+ .species = SPECIES_ALTARIA,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE, MOVE_REFRESH, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [413] = {
+ .species = SPECIES_NIDOQUEEN,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_DOUBLE_KICK, MOVE_BODY_SLAM, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [414] = {
+ .species = SPECIES_NIDOKING,
+ .moves = {MOVE_HORN_DRILL, MOVE_DOUBLE_KICK, MOVE_BODY_SLAM, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [415] = {
+ .species = SPECIES_MAGMAR,
+ .moves = {MOVE_FLAMETHROWER, MOVE_SMOKESCREEN, MOVE_BRICK_BREAK, MOVE_BARRIER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [416] = {
+ .species = SPECIES_CRADILY,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_ROCK_SLIDE, MOVE_BARRIER, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [417] = {
+ .species = SPECIES_ARMALDO,
+ .moves = {MOVE_SLASH, MOVE_AERIAL_ACE, MOVE_ANCIENT_POWER, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [418] = {
+ .species = SPECIES_GOLDUCK,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_DIG, MOVE_BRICK_BREAK, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [419] = {
+ .species = SPECIES_RAPIDASH,
+ .moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_KICK, MOVE_QUICK_ATTACK, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIET
+ },
+ [420] = {
+ .species = SPECIES_MUK,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_BODY_SLAM, MOVE_SCREECH, MOVE_MINIMIZE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [421] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_TIMID
+ },
+ [422] = {
+ .species = SPECIES_AMPHAROS,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_THUNDER_WAVE, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [423] = {
+ .species = SPECIES_SCIZOR,
+ .moves = {MOVE_METAL_CLAW, MOVE_AERIAL_ACE, MOVE_COUNTER, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [424] = {
+ .species = SPECIES_HERACROSS,
+ .moves = {MOVE_MEGAHORN, MOVE_BRICK_BREAK, MOVE_ROCK_TOMB, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [425] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_MEGA_KICK, MOVE_CRUNCH, MOVE_AERIAL_ACE, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [426] = {
+ .species = SPECIES_HOUNDOOM,
+ .moves = {MOVE_FLAMETHROWER, MOVE_SHADOW_BALL, MOVE_COUNTER, MOVE_WILL_O_WISP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [427] = {
+ .species = SPECIES_DONPHAN,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SWAGGER, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [428] = {
+ .species = SPECIES_CLAYDOL,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [429] = {
+ .species = SPECIES_WAILORD,
+ .moves = {MOVE_SURF, MOVE_ICY_WIND, MOVE_BODY_SLAM, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [430] = {
+ .species = SPECIES_NINETALES,
+ .moves = {MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [431] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [432] = {
+ .species = SPECIES_SHUCKLE,
+ .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SLEEP_TALK, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BRAVE
+ },
+ [433] = {
+ .species = SPECIES_STEELIX,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_ROCK_TOMB, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [434] = {
+ .species = SPECIES_TENTACRUEL,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_ICY_WIND, MOVE_BARRIER, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_IMPISH
+ },
+ [435] = {
+ .species = SPECIES_AERODACTYL,
+ .moves = {MOVE_ANCIENT_POWER, MOVE_DRAGON_BREATH, MOVE_AERIAL_ACE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [436] = {
+ .species = SPECIES_PORYGON2,
+ .moves = {MOVE_TRI_ATTACK, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [437] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_MAGICAL_LEAF, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_TIMID
+ },
+ [438] = {
+ .species = SPECIES_EXEGGUTOR,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [439] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [440] = {
+ .species = SPECIES_FLYGON,
+ .moves = {MOVE_EARTHQUAKE, MOVE_STEEL_WING, MOVE_FAINT_ATTACK, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [441] = {
+ .species = SPECIES_VENUSAUR,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_SLEEP_POWDER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [442] = {
+ .species = SPECIES_VAPOREON,
+ .moves = {MOVE_SURF, MOVE_ROAR, MOVE_BITE, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [443] = {
+ .species = SPECIES_JOLTEON,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [444] = {
+ .species = SPECIES_FLAREON,
+ .moves = {MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_BITE, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [445] = {
+ .species = SPECIES_MEGANIUM,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [446] = {
+ .species = SPECIES_ESPEON,
+ .moves = {MOVE_PSYCHIC, MOVE_CHARM, MOVE_CALM_MIND, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [447] = {
+ .species = SPECIES_UMBREON,
+ .moves = {MOVE_CONFUSE_RAY, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [448] = {
+ .species = SPECIES_BLASTOISE,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_BITE, MOVE_SEISMIC_TOSS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [449] = {
+ .species = SPECIES_FERALIGATR,
+ .moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_AERIAL_ACE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [450] = {
+ .species = SPECIES_AGGRON,
+ .moves = {MOVE_IRON_TAIL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [451] = {
+ .species = SPECIES_BLAZIKEN,
+ .moves = {MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_DOUBLE_KICK, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [452] = {
+ .species = SPECIES_WALREIN,
+ .moves = {MOVE_BLIZZARD, MOVE_HAIL, MOVE_YAWN, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [453] = {
+ .species = SPECIES_SCEPTILE,
+ .moves = {MOVE_LEAF_BLADE, MOVE_LEECH_SEED, MOVE_AERIAL_ACE, MOVE_DETECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [454] = {
+ .species = SPECIES_CHARIZARD,
+ .moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_ROAR, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [455] = {
+ .species = SPECIES_TYPHLOSION,
+ .moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_SMOKESCREEN, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [456] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_SURF, MOVE_ATTRACT, MOVE_CONFUSE_RAY, MOVE_SING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BOLD
+ },
+ [457] = {
+ .species = SPECIES_CROBAT,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_BITE, MOVE_ASTONISH, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [458] = {
+ .species = SPECIES_SWAMPERT,
+ .moves = {MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_REST, MOVE_CURSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [459] = {
+ .species = SPECIES_GYARADOS,
+ .moves = {MOVE_RETURN, MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [460] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_FACADE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [461] = {
+ .species = SPECIES_KINGDRA,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_DRAGON_BREATH, MOVE_ICY_WIND, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [462] = {
+ .species = SPECIES_BLISSEY,
+ .moves = {MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_SING, MOVE_SOFT_BOILED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BOLD
+ },
+ [463] = {
+ .species = SPECIES_MILOTIC,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_ICY_WIND, MOVE_RECOVER, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [464] = {
+ .species = SPECIES_ARCANINE,
+ .moves = {MOVE_FLAMETHROWER, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [465] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE, MOVE_HEADBUTT, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [466] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_METEOR_MASH, MOVE_AERIAL_ACE, MOVE_FACADE, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [467] = {
+ .species = SPECIES_SLAKING,
+ .moves = {MOVE_YAWN, MOVE_BULK_UP, MOVE_SWAGGER, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [468] = {
+ .species = SPECIES_DUGTRIO,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, MOVE_TRI_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [469] = {
+ .species = SPECIES_MEDICHAM,
+ .moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_PSYCHIC, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [470] = {
+ .species = SPECIES_MAROWAK,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_ICY_WIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [471] = {
+ .species = SPECIES_QUAGSIRE,
+ .moves = {MOVE_CURSE, MOVE_ATTRACT, MOVE_YAWN, MOVE_ANCIENT_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_SASSY
+ },
+ [472] = {
+ .species = SPECIES_MISDREAVUS,
+ .moves = {MOVE_PSYCHIC, MOVE_ATTRACT, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BOLD
+ },
+ [473] = {
+ .species = SPECIES_FEAROW,
+ .moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_ATTRACT, MOVE_PURSUIT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [474] = {
+ .species = SPECIES_GRANBULL,
+ .moves = {MOVE_OVERHEAT, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [475] = {
+ .species = SPECIES_JYNX,
+ .moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_LOVELY_KISS, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [476] = {
+ .species = SPECIES_DUSCLOPS,
+ .moves = {MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [477] = {
+ .species = SPECIES_DODRIO,
+ .moves = {MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_FAINT_ATTACK, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [478] = {
+ .species = SPECIES_MR_MIME,
+ .moves = {MOVE_BATON_PASS, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_PSYCHIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [479] = {
+ .species = SPECIES_LANTURN,
+ .moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_THUNDERBOLT, MOVE_SURF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [480] = {
+ .species = SPECIES_BRELOOM,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_LEECH_SEED, MOVE_FOCUS_PUNCH, MOVE_SPORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [481] = {
+ .species = SPECIES_FORRETRESS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_COUNTER, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [482] = {
+ .species = SPECIES_SKARMORY,
+ .moves = {MOVE_SPIKES, MOVE_ROAR, MOVE_DRILL_PECK, MOVE_TOXIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [483] = {
+ .species = SPECIES_WHISCASH,
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_SPARK, MOVE_FUTURE_SIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [484] = {
+ .species = SPECIES_XATU,
+ .moves = {MOVE_FLY, MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [485] = {
+ .species = SPECIES_CLEFABLE,
+ .moves = {MOVE_METEOR_MASH, MOVE_COSMIC_POWER, MOVE_DOUBLE_TEAM, MOVE_FOLLOW_ME},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [486] = {
+ .species = SPECIES_HARIYAMA,
+ .moves = {MOVE_CROSS_CHOP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [487] = {
+ .species = SPECIES_RAICHU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_REVERSAL, MOVE_ENDURE, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [488] = {
+ .species = SPECIES_DEWGONG,
+ .moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_ENCORE, MOVE_DISABLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [489] = {
+ .species = SPECIES_MANECTRIC,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_CRUNCH, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [490] = {
+ .species = SPECIES_VILEPLUME,
+ .moves = {MOVE_INGRAIN, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [491] = {
+ .species = SPECIES_VICTREEBEL,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_SLEEP_POWDER, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_SERIOUS
+ },
+ [492] = {
+ .species = SPECIES_ELECTRODE,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [493] = {
+ .species = SPECIES_EXPLOUD,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [494] = {
+ .species = SPECIES_SHIFTRY,
+ .moves = {MOVE_LEECH_SEED, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_IMPISH
+ },
+ [495] = {
+ .species = SPECIES_GLALIE,
+ .moves = {MOVE_EXPLOSION, MOVE_ENDURE, MOVE_BODY_SLAM, MOVE_ICY_WIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [496] = {
+ .species = SPECIES_LUDICOLO,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [497] = {
+ .species = SPECIES_HYPNO,
+ .moves = {MOVE_HYPNOSIS, MOVE_NIGHTMARE, MOVE_DREAM_EATER, MOVE_PSYCHIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [498] = {
+ .species = SPECIES_GOLEM,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_DOUBLE_TEAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [499] = {
+ .species = SPECIES_RHYDON,
+ .moves = {MOVE_EARTHQUAKE, MOVE_HORN_DRILL, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [500] = {
+ .species = SPECIES_ALAKAZAM,
+ .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_THUNDER_WAVE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [501] = {
+ .species = SPECIES_WEEZING,
+ .moves = {MOVE_MEMENTO, MOVE_SLUDGE_BOMB, MOVE_FACADE, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [502] = {
+ .species = SPECIES_KANGASKHAN,
+ .moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [503] = {
+ .species = SPECIES_ELECTABUZZ,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_ATTRACT, MOVE_FOCUS_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [504] = {
+ .species = SPECIES_TAUROS,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [505] = {
+ .species = SPECIES_SLOWBRO,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_YAWN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_MODEST
+ },
+ [506] = {
+ .species = SPECIES_SLOWKING,
+ .moves = {MOVE_YAWN, MOVE_THUNDER_WAVE, MOVE_SURF, MOVE_PSYCHIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [507] = {
+ .species = SPECIES_MILTANK,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [508] = {
+ .species = SPECIES_ALTARIA,
+ .moves = {MOVE_PERISH_SONG, MOVE_DRAGON_BREATH, MOVE_PURSUIT, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [509] = {
+ .species = SPECIES_NIDOQUEEN,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [510] = {
+ .species = SPECIES_NIDOKING,
+ .moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [511] = {
+ .species = SPECIES_MAGMAR,
+ .moves = {MOVE_FIRE_BLAST, MOVE_SMOKESCREEN, MOVE_THUNDER_PUNCH, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [512] = {
+ .species = SPECIES_CRADILY,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [513] = {
+ .species = SPECIES_ARMALDO,
+ .moves = {MOVE_IRON_TAIL, MOVE_ANCIENT_POWER, MOVE_BRICK_BREAK, MOVE_KNOCK_OFF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [514] = {
+ .species = SPECIES_GOLDUCK,
+ .moves = {MOVE_CROSS_CHOP, MOVE_SURF, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [515] = {
+ .species = SPECIES_RAPIDASH,
+ .moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_DOUBLE_TEAM, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [516] = {
+ .species = SPECIES_MUK,
+ .moves = {MOVE_CURSE, MOVE_REST, MOVE_SLUDGE_BOMB, MOVE_DYNAMIC_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [517] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [518] = {
+ .species = SPECIES_AMPHAROS,
+ .moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [519] = {
+ .species = SPECIES_SCIZOR,
+ .moves = {MOVE_SILVER_WIND, MOVE_STEEL_WING, MOVE_SWORDS_DANCE, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [520] = {
+ .species = SPECIES_HERACROSS,
+ .moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_BULK_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [521] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [522] = {
+ .species = SPECIES_HOUNDOOM,
+ .moves = {MOVE_FIRE_BLAST, MOVE_CRUNCH, MOVE_ROAR, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [523] = {
+ .species = SPECIES_DONPHAN,
+ .moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_EARTHQUAKE, MOVE_ROCK_TOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [524] = {
+ .species = SPECIES_CLAYDOL,
+ .moves = {MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_COSMIC_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [525] = {
+ .species = SPECIES_WAILORD,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_REST, MOVE_CURSE, MOVE_AMNESIA},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [526] = {
+ .species = SPECIES_NINETALES,
+ .moves = {MOVE_HEAT_WAVE, MOVE_BODY_SLAM, MOVE_GRUDGE, MOVE_SUNNY_DAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [527] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_BULK_UP, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [528] = {
+ .species = SPECIES_SHUCKLE,
+ .moves = {MOVE_SANDSTORM, MOVE_DIG, MOVE_FLASH, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_CAREFUL
+ },
+ [529] = {
+ .species = SPECIES_STEELIX,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_SANDSTORM, MOVE_BLOCK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [530] = {
+ .species = SPECIES_TENTACRUEL,
+ .moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_SURF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [531] = {
+ .species = SPECIES_AERODACTYL,
+ .moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ANCIENT_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [532] = {
+ .species = SPECIES_PORYGON2,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [533] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [534] = {
+ .species = SPECIES_EXEGGUTOR,
+ .moves = {MOVE_RETURN, MOVE_CURSE, MOVE_SLEEP_POWDER, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [535] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [536] = {
+ .species = SPECIES_FLYGON,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_FIRE_BLAST, MOVE_CRUNCH, MOVE_SUNNY_DAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [537] = {
+ .species = SPECIES_VENUSAUR,
+ .moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [538] = {
+ .species = SPECIES_VAPOREON,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BODY_SLAM, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [539] = {
+ .species = SPECIES_JOLTEON,
+ .moves = {MOVE_THUNDERBOLT, MOVE_DIG, MOVE_DOUBLE_KICK, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [540] = {
+ .species = SPECIES_FLAREON,
+ .moves = {MOVE_CURSE, MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [541] = {
+ .species = SPECIES_MEGANIUM,
+ .moves = {MOVE_LEECH_SEED, MOVE_SUBSTITUTE, MOVE_DOUBLE_TEAM, MOVE_GRASS_WHISTLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [542] = {
+ .species = SPECIES_ESPEON,
+ .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_CALM_MIND, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [543] = {
+ .species = SPECIES_UMBREON,
+ .moves = {MOVE_CURSE, MOVE_SCREECH, MOVE_DOUBLE_TEAM, MOVE_DOUBLE_EDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [544] = {
+ .species = SPECIES_BLASTOISE,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [545] = {
+ .species = SPECIES_FERALIGATR,
+ .moves = {MOVE_SURF, MOVE_DRAGON_CLAW, MOVE_BRICK_BREAK, MOVE_SCARY_FACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [546] = {
+ .species = SPECIES_AGGRON,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [547] = {
+ .species = SPECIES_BLAZIKEN,
+ .moves = {MOVE_BLAZE_KICK, MOVE_MEGA_KICK, MOVE_THUNDER_PUNCH, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [548] = {
+ .species = SPECIES_WALREIN,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_CURSE, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [549] = {
+ .species = SPECIES_SCEPTILE,
+ .moves = {MOVE_LEAF_BLADE, MOVE_THUNDER_PUNCH, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [550] = {
+ .species = SPECIES_CHARIZARD,
+ .moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE, MOVE_SMOKESCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [551] = {
+ .species = SPECIES_TYPHLOSION,
+ .moves = {MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [552] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BODY_SLAM, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_TIMID
+ },
+ [553] = {
+ .species = SPECIES_CROBAT,
+ .moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [554] = {
+ .species = SPECIES_SWAMPERT,
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [555] = {
+ .species = SPECIES_GYARADOS,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_THUNDERBOLT, MOVE_FIRE_BLAST, MOVE_BLIZZARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [556] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CURSE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [557] = {
+ .species = SPECIES_KINGDRA,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_DRAGON_BREATH, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [558] = {
+ .species = SPECIES_BLISSEY,
+ .moves = {MOVE_SEISMIC_TOSS, MOVE_SING, MOVE_ATTRACT, MOVE_SUBSTITUTE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BOLD
+ },
+ [559] = {
+ .species = SPECIES_MILOTIC,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_SAFEGUARD, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [560] = {
+ .species = SPECIES_ARCANINE,
+ .moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_CRUNCH, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [561] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_SWAGGER, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [562] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_METEOR_MASH, MOVE_PSYCH_UP, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [563] = {
+ .species = SPECIES_SLAKING,
+ .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_YAWN, MOVE_AMNESIA},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_ADAMANT
+ },
+ [564] = {
+ .species = SPECIES_DUGTRIO,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_FISSURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [565] = {
+ .species = SPECIES_MEDICHAM,
+ .moves = {MOVE_DYNAMIC_PUNCH, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_HARDY
+ },
+ [566] = {
+ .species = SPECIES_MISDREAVUS,
+ .moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [567] = {
+ .species = SPECIES_FEAROW,
+ .moves = {MOVE_DRILL_PECK, MOVE_RETURN, MOVE_STEEL_WING, MOVE_FAINT_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [568] = {
+ .species = SPECIES_GRANBULL,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_SLUDGE_BOMB, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [569] = {
+ .species = SPECIES_JYNX,
+ .moves = {MOVE_DREAM_EATER, MOVE_LOVELY_KISS, MOVE_ATTRACT, MOVE_SUBSTITUTE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [570] = {
+ .species = SPECIES_DUSCLOPS,
+ .moves = {MOVE_PSYCH_UP, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [571] = {
+ .species = SPECIES_DODRIO,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_FAINT_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [572] = {
+ .species = SPECIES_MR_MIME,
+ .moves = {MOVE_TRICK, MOVE_TORMENT, MOVE_PSYCHIC, MOVE_THUNDERBOLT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [573] = {
+ .species = SPECIES_LANTURN,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [574] = {
+ .species = SPECIES_BRELOOM,
+ .moves = {MOVE_IRON_TAIL, MOVE_FOCUS_PUNCH, MOVE_ATTRACT, MOVE_SPORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [575] = {
+ .species = SPECIES_FORRETRESS,
+ .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_GIGA_DRAIN, MOVE_ZAP_CANNON},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [576] = {
+ .species = SPECIES_WHISCASH,
+ .moves = {MOVE_SLEEP_TALK, MOVE_REST, MOVE_SURF, MOVE_FISSURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_HARDY
+ },
+ [577] = {
+ .species = SPECIES_XATU,
+ .moves = {MOVE_DRILL_PECK, MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_STEEL_WING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [578] = {
+ .species = SPECIES_SKARMORY,
+ .moves = {MOVE_TOXIC, MOVE_CURSE, MOVE_REST, MOVE_FLY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [579] = {
+ .species = SPECIES_MAROWAK,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [580] = {
+ .species = SPECIES_QUAGSIRE,
+ .moves = {MOVE_EARTHQUAKE, MOVE_SLUDGE_BOMB, MOVE_DOUBLE_EDGE, MOVE_CURSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [581] = {
+ .species = SPECIES_CLEFABLE,
+ .moves = {MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_FLAMETHROWER, MOVE_MAGICAL_LEAF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [582] = {
+ .species = SPECIES_HARIYAMA,
+ .moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [583] = {
+ .species = SPECIES_RAICHU,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_IRON_TAIL, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [584] = {
+ .species = SPECIES_DEWGONG,
+ .moves = {MOVE_HORN_DRILL, MOVE_SHEER_COLD, MOVE_SLEEP_TALK, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [585] = {
+ .species = SPECIES_MANECTRIC,
+ .moves = {MOVE_THUNDERBOLT, MOVE_IRON_TAIL, MOVE_THUNDER_WAVE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [586] = {
+ .species = SPECIES_VILEPLUME,
+ .moves = {MOVE_ATTRACT, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [587] = {
+ .species = SPECIES_VICTREEBEL,
+ .moves = {MOVE_STUN_SPORE, MOVE_INGRAIN, MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [588] = {
+ .species = SPECIES_ELECTRODE,
+ .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [589] = {
+ .species = SPECIES_EXPLOUD,
+ .moves = {MOVE_OVERHEAT, MOVE_ICE_BEAM, MOVE_THUNDER_PUNCH, MOVE_EXTRASENSORY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [590] = {
+ .species = SPECIES_SHIFTRY,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [591] = {
+ .species = SPECIES_GLALIE,
+ .moves = {MOVE_BLIZZARD, MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [592] = {
+ .species = SPECIES_LUDICOLO,
+ .moves = {MOVE_LEECH_SEED, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [593] = {
+ .species = SPECIES_HYPNO,
+ .moves = {MOVE_PSYCH_UP, MOVE_SWAGGER, MOVE_MEGA_KICK, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [594] = {
+ .species = SPECIES_GOLEM,
+ .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [595] = {
+ .species = SPECIES_RHYDON,
+ .moves = {MOVE_MEGAHORN, MOVE_CRUSH_CLAW, MOVE_EARTHQUAKE, MOVE_HORN_DRILL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [596] = {
+ .species = SPECIES_ALAKAZAM,
+ .moves = {MOVE_TRICK, MOVE_DISABLE, MOVE_PSYCHIC, MOVE_SKILL_SWAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [597] = {
+ .species = SPECIES_WEEZING,
+ .moves = {MOVE_EXPLOSION, MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [598] = {
+ .species = SPECIES_KANGASKHAN,
+ .moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [599] = {
+ .species = SPECIES_ELECTABUZZ,
+ .moves = {MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDERBOLT, MOVE_CROSS_CHOP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [600] = {
+ .species = SPECIES_TAUROS,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ICE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [601] = {
+ .species = SPECIES_SLOWBRO,
+ .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [602] = {
+ .species = SPECIES_SLOWKING,
+ .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [603] = {
+ .species = SPECIES_MILTANK,
+ .moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [604] = {
+ .species = SPECIES_ALTARIA,
+ .moves = {MOVE_SING, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [605] = {
+ .species = SPECIES_NIDOQUEEN,
+ .moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_CRUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [606] = {
+ .species = SPECIES_NIDOKING,
+ .moves = {MOVE_HORN_DRILL, MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_SURF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [607] = {
+ .species = SPECIES_MAGMAR,
+ .moves = {MOVE_MEGA_KICK, MOVE_CROSS_CHOP, MOVE_IRON_TAIL, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_IMPISH
+ },
+ [608] = {
+ .species = SPECIES_CRADILY,
+ .moves = {MOVE_SUBSTITUTE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [609] = {
+ .species = SPECIES_ARMALDO,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_SWORDS_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [610] = {
+ .species = SPECIES_GOLDUCK,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_CROSS_CHOP, MOVE_BLIZZARD, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [611] = {
+ .species = SPECIES_RAPIDASH,
+ .moves = {MOVE_OVERHEAT, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_HYPNOSIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [612] = {
+ .species = SPECIES_MUK,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_QUIET
+ },
+ [613] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_GIGA_DRAIN, MOVE_SKILL_SWAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [614] = {
+ .species = SPECIES_AMPHAROS,
+ .moves = {MOVE_THUNDERBOLT, MOVE_MEGA_KICK, MOVE_IRON_TAIL, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [615] = {
+ .species = SPECIES_SCIZOR,
+ .moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_AGILITY, MOVE_SLASH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_CAREFUL
+ },
+ [616] = {
+ .species = SPECIES_HERACROSS,
+ .moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [617] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH, MOVE_CRUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [618] = {
+ .species = SPECIES_HOUNDOOM,
+ .moves = {MOVE_OVERHEAT, MOVE_SHADOW_BALL, MOVE_SLUDGE_BOMB, MOVE_DOUBLE_EDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [619] = {
+ .species = SPECIES_DONPHAN,
+ .moves = {MOVE_FISSURE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SECRET_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [620] = {
+ .species = SPECIES_CLAYDOL,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [621] = {
+ .species = SPECIES_WAILORD,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_FISSURE, MOVE_DOUBLE_TEAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [622] = {
+ .species = SPECIES_NINETALES,
+ .moves = {MOVE_FIRE_BLAST, MOVE_IRON_TAIL, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [623] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_CROSS_CHOP, MOVE_FIRE_BLAST, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [624] = {
+ .species = SPECIES_SHUCKLE,
+ .moves = {MOVE_SUBSTITUTE, MOVE_ATTRACT, MOVE_TOXIC, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_CAREFUL
+ },
+ [625] = {
+ .species = SPECIES_STEELIX,
+ .moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [626] = {
+ .species = SPECIES_TENTACRUEL,
+ .moves = {MOVE_SURF, MOVE_GIGA_DRAIN, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [627] = {
+ .species = SPECIES_AERODACTYL,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_FIRE_BLAST, MOVE_DRAGON_CLAW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [628] = {
+ .species = SPECIES_PORYGON2,
+ .moves = {MOVE_PSYCHIC, MOVE_TRI_ATTACK, MOVE_THUNDER_WAVE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [629] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH, MOVE_MAGICAL_LEAF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [630] = {
+ .species = SPECIES_EXEGGUTOR,
+ .moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [631] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [632] = {
+ .species = SPECIES_FLYGON,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_FLAMETHROWER, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [633] = {
+ .species = SPECIES_VENUSAUR,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_SLEEP_POWDER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [634] = {
+ .species = SPECIES_VAPOREON,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_ACID_ARMOR, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [635] = {
+ .species = SPECIES_JOLTEON,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_AGILITY, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [636] = {
+ .species = SPECIES_FLAREON,
+ .moves = {MOVE_SHADOW_BALL, MOVE_FLAIL, MOVE_ENDURE, MOVE_OVERHEAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [637] = {
+ .species = SPECIES_MEGANIUM,
+ .moves = {MOVE_EARTHQUAKE, MOVE_FLAIL, MOVE_ENDURE, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [638] = {
+ .species = SPECIES_ESPEON,
+ .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_WISH, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [639] = {
+ .species = SPECIES_UMBREON,
+ .moves = {MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_ATTRACT, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [640] = {
+ .species = SPECIES_BLASTOISE,
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [641] = {
+ .species = SPECIES_FERALIGATR,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [642] = {
+ .species = SPECIES_AGGRON,
+ .moves = {MOVE_SURF, MOVE_THUNDER, MOVE_FIRE_BLAST, MOVE_BLIZZARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [643] = {
+ .species = SPECIES_BLAZIKEN,
+ .moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_REVERSAL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [644] = {
+ .species = SPECIES_WALREIN,
+ .moves = {MOVE_SHEER_COLD, MOVE_FISSURE, MOVE_SURF, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [645] = {
+ .species = SPECIES_SCEPTILE,
+ .moves = {MOVE_LEAF_BLADE, MOVE_EARTHQUAKE, MOVE_CRUSH_CLAW, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [646] = {
+ .species = SPECIES_CHARIZARD,
+ .moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_BITE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [647] = {
+ .species = SPECIES_TYPHLOSION,
+ .moves = {MOVE_EARTHQUAKE, MOVE_OVERHEAT, MOVE_ENDURE, MOVE_REVERSAL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [648] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [649] = {
+ .species = SPECIES_CROBAT,
+ .moves = {MOVE_AIR_CUTTER, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [650] = {
+ .species = SPECIES_SWAMPERT,
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BRAVE
+ },
+ [651] = {
+ .species = SPECIES_GYARADOS,
+ .moves = {MOVE_SURF, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [652] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_ADAMANT
+ },
+ [653] = {
+ .species = SPECIES_KINGDRA,
+ .moves = {MOVE_FLAIL, MOVE_HYDRO_PUMP, MOVE_DRAGON_DANCE, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [654] = {
+ .species = SPECIES_BLISSEY,
+ .moves = {MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_CALM_MIND, MOVE_SOFT_BOILED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BOLD
+ },
+ [655] = {
+ .species = SPECIES_MILOTIC,
+ .moves = {MOVE_SURF, MOVE_BLIZZARD, MOVE_ATTRACT, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [656] = {
+ .species = SPECIES_ARCANINE,
+ .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [657] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [658] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_METEOR_MASH, MOVE_DOUBLE_TEAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [659] = {
+ .species = SPECIES_SLAKING,
+ .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_ADAMANT
+ },
+ [660] = {
+ .species = SPECIES_DUGTRIO,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_FISSURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [661] = {
+ .species = SPECIES_MEDICHAM,
+ .moves = {MOVE_MEGA_KICK, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [662] = {
+ .species = SPECIES_MISDREAVUS,
+ .moves = {MOVE_DESTINY_BOND, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_TIMID
+ },
+ [663] = {
+ .species = SPECIES_FEAROW,
+ .moves = {MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_STEEL_WING, MOVE_SKY_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [664] = {
+ .species = SPECIES_GRANBULL,
+ .moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BRAVE
+ },
+ [665] = {
+ .species = SPECIES_JYNX,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_LOVELY_KISS, MOVE_FAKE_TEARS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [666] = {
+ .species = SPECIES_DUSCLOPS,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_CURSE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [667] = {
+ .species = SPECIES_DODRIO,
+ .moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_DRILL_PECK, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [668] = {
+ .species = SPECIES_MR_MIME,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [669] = {
+ .species = SPECIES_LANTURN,
+ .moves = {MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [670] = {
+ .species = SPECIES_BRELOOM,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_SLUDGE_BOMB, MOVE_SPORE, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [671] = {
+ .species = SPECIES_FORRETRESS,
+ .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DOUBLE_EDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [672] = {
+ .species = SPECIES_WHISCASH,
+ .moves = {MOVE_FISSURE, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [673] = {
+ .species = SPECIES_XATU,
+ .moves = {MOVE_PSYCHIC, MOVE_DRILL_PECK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [674] = {
+ .species = SPECIES_SKARMORY,
+ .moves = {MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_COUNTER, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [675] = {
+ .species = SPECIES_MAROWAK,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_MEGA_KICK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [676] = {
+ .species = SPECIES_QUAGSIRE,
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_AMNESIA},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_SASSY
+ },
+ [677] = {
+ .species = SPECIES_CLEFABLE,
+ .moves = {MOVE_MEGA_KICK, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_SOFT_BOILED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [678] = {
+ .species = SPECIES_HARIYAMA,
+ .moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [679] = {
+ .species = SPECIES_RAICHU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_PROTECT, MOVE_MEGA_KICK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [680] = {
+ .species = SPECIES_DEWGONG,
+ .moves = {MOVE_SHEER_COLD, MOVE_ICE_BEAM, MOVE_SURF, MOVE_SIGNAL_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [681] = {
+ .species = SPECIES_MANECTRIC,
+ .moves = {MOVE_THUNDERBOLT, MOVE_CRUNCH, MOVE_THUNDER_WAVE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [682] = {
+ .species = SPECIES_VILEPLUME,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [683] = {
+ .species = SPECIES_VICTREEBEL,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_SYNTHESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [684] = {
+ .species = SPECIES_ELECTRODE,
+ .moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [685] = {
+ .species = SPECIES_EXPLOUD,
+ .moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_OVERHEAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [686] = {
+ .species = SPECIES_SHIFTRY,
+ .moves = {MOVE_EXPLOSION, MOVE_GIGA_DRAIN, MOVE_MEGA_KICK, MOVE_FAKE_OUT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [687] = {
+ .species = SPECIES_GLALIE,
+ .moves = {MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [688] = {
+ .species = SPECIES_LUDICOLO,
+ .moves = {MOVE_LEECH_SEED, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_TOXIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [689] = {
+ .species = SPECIES_HYPNO,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [690] = {
+ .species = SPECIES_GOLEM,
+ .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DOUBLE_EDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [691] = {
+ .species = SPECIES_RHYDON,
+ .moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_HORN_DRILL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [692] = {
+ .species = SPECIES_ALAKAZAM,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [693] = {
+ .species = SPECIES_WEEZING,
+ .moves = {MOVE_EXPLOSION, MOVE_SLUDGE_BOMB, MOVE_FRUSTRATION, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [694] = {
+ .species = SPECIES_KANGASKHAN,
+ .moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [695] = {
+ .species = SPECIES_ELECTABUZZ,
+ .moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_MEGA_KICK, MOVE_CROSS_CHOP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [696] = {
+ .species = SPECIES_TAUROS,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_TOMB, MOVE_THUNDERBOLT, MOVE_SURF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [697] = {
+ .species = SPECIES_SLOWBRO,
+ .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .nature = NATURE_SASSY
+ },
+ [698] = {
+ .species = SPECIES_SLOWKING,
+ .moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_FLAMETHROWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [699] = {
+ .species = SPECIES_MILTANK,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_CURSE, MOVE_DOUBLE_TEAM, MOVE_MILK_DRINK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [700] = {
+ .species = SPECIES_ALTARIA,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ICE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [701] = {
+ .species = SPECIES_NIDOQUEEN,
+ .moves = {MOVE_SUPERPOWER, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [702] = {
+ .species = SPECIES_NIDOKING,
+ .moves = {MOVE_MEGAHORN, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_THUNDER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [703] = {
+ .species = SPECIES_MAGMAR,
+ .moves = {MOVE_FLAMETHROWER, MOVE_PSYCHIC, MOVE_CROSS_CHOP, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [704] = {
+ .species = SPECIES_CRADILY,
+ .moves = {MOVE_TOXIC, MOVE_INGRAIN, MOVE_MIRROR_COAT, MOVE_GIGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [705] = {
+ .species = SPECIES_ARMALDO,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [706] = {
+ .species = SPECIES_GOLDUCK,
+ .moves = {MOVE_SURF, MOVE_CROSS_CHOP, MOVE_ICE_BEAM, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [707] = {
+ .species = SPECIES_RAPIDASH,
+ .moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_IRON_TAIL, MOVE_DOUBLE_KICK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [708] = {
+ .species = SPECIES_MUK,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_BRICK_BREAK, MOVE_GIGA_DRAIN, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BRAVE
+ },
+ [709] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [710] = {
+ .species = SPECIES_AMPHAROS,
+ .moves = {MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_THUNDER_WAVE, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [711] = {
+ .species = SPECIES_SCIZOR,
+ .moves = {MOVE_SILVER_WIND, MOVE_SWORDS_DANCE, MOVE_AGILITY, MOVE_BATON_PASS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [712] = {
+ .species = SPECIES_HERACROSS,
+ .moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_REVERSAL, MOVE_ENDURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [713] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [714] = {
+ .species = SPECIES_HOUNDOOM,
+ .moves = {MOVE_OVERHEAT, MOVE_SOLAR_BEAM, MOVE_CRUNCH, MOVE_SUNNY_DAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [715] = {
+ .species = SPECIES_DONPHAN,
+ .moves = {MOVE_FISSURE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_IRON_TAIL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [716] = {
+ .species = SPECIES_CLAYDOL,
+ .moves = {MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [717] = {
+ .species = SPECIES_WAILORD,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_FISSURE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [718] = {
+ .species = SPECIES_NINETALES,
+ .moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [719] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [720] = {
+ .species = SPECIES_SHUCKLE,
+ .moves = {MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_WRAP, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_CAREFUL
+ },
+ [721] = {
+ .species = SPECIES_STEELIX,
+ .moves = {MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_DOUBLE_EDGE, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [722] = {
+ .species = SPECIES_TENTACRUEL,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [723] = {
+ .species = SPECIES_AERODACTYL,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_FIRE_BLAST, MOVE_BITE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [724] = {
+ .species = SPECIES_PORYGON2,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [725] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [726] = {
+ .species = SPECIES_EXEGGUTOR,
+ .moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [727] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [728] = {
+ .species = SPECIES_FLYGON,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_DOUBLE_EDGE, MOVE_CRUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [729] = {
+ .species = SPECIES_VENUSAUR,
+ .moves = {MOVE_SOLAR_BEAM, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [730] = {
+ .species = SPECIES_VAPOREON,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_ACID_ARMOR, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [731] = {
+ .species = SPECIES_JOLTEON,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_BITE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_TIMID
+ },
+ [732] = {
+ .species = SPECIES_FLAREON,
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [733] = {
+ .species = SPECIES_MEGANIUM,
+ .moves = {MOVE_GIGA_DRAIN, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [734] = {
+ .species = SPECIES_ESPEON,
+ .moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_ATTRACT, MOVE_CALM_MIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [735] = {
+ .species = SPECIES_UMBREON,
+ .moves = {MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [736] = {
+ .species = SPECIES_BLASTOISE,
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [737] = {
+ .species = SPECIES_FERALIGATR,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [738] = {
+ .species = SPECIES_AGGRON,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [739] = {
+ .species = SPECIES_BLAZIKEN,
+ .moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_THUNDER_PUNCH, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [740] = {
+ .species = SPECIES_WALREIN,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_SHEER_COLD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [741] = {
+ .species = SPECIES_SCEPTILE,
+ .moves = {MOVE_LEAF_BLADE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_THUNDER_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [742] = {
+ .species = SPECIES_CHARIZARD,
+ .moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [743] = {
+ .species = SPECIES_TYPHLOSION,
+ .moves = {MOVE_OVERHEAT, MOVE_THUNDER_PUNCH, MOVE_EARTHQUAKE, MOVE_CRUSH_CLAW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [744] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_PSYCHIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [745] = {
+ .species = SPECIES_CROBAT,
+ .moves = {MOVE_SLUDGE_BOMB, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [746] = {
+ .species = SPECIES_SWAMPERT,
+ .moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [747] = {
+ .species = SPECIES_GYARADOS,
+ .moves = {MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_DRAGON_DANCE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [748] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_CURSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [749] = {
+ .species = SPECIES_KINGDRA,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_ICE_BEAM, MOVE_DRAGON_DANCE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [750] = {
+ .species = SPECIES_BLISSEY,
+ .moves = {MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_COUNTER, MOVE_SOFT_BOILED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BOLD
+ },
+ [751] = {
+ .species = SPECIES_MILOTIC,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_MIRROR_COAT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [752] = {
+ .species = SPECIES_ARCANINE,
+ .moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_DOUBLE_EDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [753] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [754] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [755] = {
+ .species = SPECIES_SLAKING,
+ .moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_YAWN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .nature = NATURE_MODEST
+ },
+ [756] = {
+ .species = SPECIES_ARTICUNO,
+ .moves = {MOVE_ICE_BEAM, MOVE_WATER_PULSE, MOVE_ICY_WIND, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [757] = {
+ .species = SPECIES_ZAPDOS,
+ .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [758] = {
+ .species = SPECIES_MOLTRES,
+ .moves = {MOVE_FLAMETHROWER, MOVE_AERIAL_ACE, MOVE_MUD_SLAP, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [759] = {
+ .species = SPECIES_RAIKOU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [760] = {
+ .species = SPECIES_ENTEI,
+ .moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [761] = {
+ .species = SPECIES_SUICUNE,
+ .moves = {MOVE_SURF, MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [762] = {
+ .species = SPECIES_REGIROCK,
+ .moves = {MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [763] = {
+ .species = SPECIES_REGICE,
+ .moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_AMNESIA, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [764] = {
+ .species = SPECIES_REGISTEEL,
+ .moves = {MOVE_METAL_CLAW, MOVE_CURSE, MOVE_AMNESIA, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [765] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [766] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [767] = {
+ .species = SPECIES_ARTICUNO,
+ .moves = {MOVE_SUBSTITUTE, MOVE_TOXIC, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [768] = {
+ .species = SPECIES_ZAPDOS,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DRILL_PECK, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [769] = {
+ .species = SPECIES_MOLTRES,
+ .moves = {MOVE_OVERHEAT, MOVE_AERIAL_ACE, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [770] = {
+ .species = SPECIES_RAIKOU,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [771] = {
+ .species = SPECIES_ENTEI,
+ .moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [772] = {
+ .species = SPECIES_SUICUNE,
+ .moves = {MOVE_TOXIC, MOVE_DIVE, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [773] = {
+ .species = SPECIES_REGIROCK,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [774] = {
+ .species = SPECIES_REGICE,
+ .moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_BLIZZARD, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [775] = {
+ .species = SPECIES_REGISTEEL,
+ .moves = {MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [776] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [777] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [778] = {
+ .species = SPECIES_ARTICUNO,
+ .moves = {MOVE_ICE_BEAM, MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [779] = {
+ .species = SPECIES_ZAPDOS,
+ .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_SUBSTITUTE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [780] = {
+ .species = SPECIES_MOLTRES,
+ .moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_DOUBLE_TEAM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [781] = {
+ .species = SPECIES_RAIKOU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [782] = {
+ .species = SPECIES_ENTEI,
+ .moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_EDGE, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [783] = {
+ .species = SPECIES_SUICUNE,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAIN_DANCE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [784] = {
+ .species = SPECIES_REGIROCK,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_CURSE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [785] = {
+ .species = SPECIES_REGICE,
+ .moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [786] = {
+ .species = SPECIES_REGISTEEL,
+ .moves = {MOVE_ANCIENT_POWER, MOVE_AMNESIA, MOVE_COUNTER, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [787] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [788] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [789] = {
+ .species = SPECIES_ARTICUNO,
+ .moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_REST, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [790] = {
+ .species = SPECIES_ZAPDOS,
+ .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [791] = {
+ .species = SPECIES_MOLTRES,
+ .moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_STEEL_WING, MOVE_SAFEGUARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [792] = {
+ .species = SPECIES_RAIKOU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [793] = {
+ .species = SPECIES_ENTEI,
+ .moves = {MOVE_FLAMETHROWER, MOVE_BITE, MOVE_DOUBLE_TEAM, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [794] = {
+ .species = SPECIES_SUICUNE,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BITE, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [795] = {
+ .species = SPECIES_REGIROCK,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [796] = {
+ .species = SPECIES_REGICE,
+ .moves = {MOVE_ICE_BEAM, MOVE_HAIL, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [797] = {
+ .species = SPECIES_REGISTEEL,
+ .moves = {MOVE_ANCIENT_POWER, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [798] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_MIST_BALL, MOVE_SHADOW_BALL, MOVE_CHARM, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [799] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [800] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [801] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [802] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [803] = {
+ .species = SPECIES_GENGAR,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [804] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_MEGA_KICK, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [805] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_HYPER_BEAM, MOVE_YAWN, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [806] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_BULK_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [807] = {
+ .species = SPECIES_URSARING,
+ .moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [808] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_CROSS_CHOP, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [809] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_ROCK_TOMB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [810] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [811] = {
+ .species = SPECIES_MACHAMP,
+ .moves = {MOVE_REVENGE, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [812] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ENDURE, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [813] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_TIMID
+ },
+ [814] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [815] = {
+ .species = SPECIES_GARDEVOIR,
+ .moves = {MOVE_PSYCHIC, MOVE_MAGICAL_LEAF, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [816] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_RECOVER, MOVE_LIGHT_SCREEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [817] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [818] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_COSMIC_POWER, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [819] = {
+ .species = SPECIES_STARMIE,
+ .moves = {MOVE_SURF, MOVE_THUNDERBOLT, MOVE_COSMIC_POWER, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [820] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_IRON_TAIL, MOVE_DOUBLE_EDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [821] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_BLIZZARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [822] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_SHEER_COLD, MOVE_HORN_DRILL, MOVE_REST, MOVE_SLEEP_TALK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [823] = {
+ .species = SPECIES_LAPRAS,
+ .moves = {MOVE_SHEER_COLD, MOVE_HORN_DRILL, MOVE_SING, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [824] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [825] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [826] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_CURSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [827] = {
+ .species = SPECIES_SNORLAX,
+ .moves = {MOVE_RETURN, MOVE_SHADOW_BALL, MOVE_BELLY_DRUM, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [828] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [829] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_HEADBUTT, MOVE_AERIAL_ACE, MOVE_CRUNCH, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [830] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [831] = {
+ .species = SPECIES_SALAMENCE,
+ .moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [832] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [833] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [834] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [835] = {
+ .species = SPECIES_METAGROSS,
+ .moves = {MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [836] = {
+ .species = SPECIES_REGIROCK,
+ .moves = {MOVE_HYPER_BEAM, MOVE_FOCUS_PUNCH, MOVE_ROCK_SLIDE, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [837] = {
+ .species = SPECIES_REGIROCK,
+ .moves = {MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [838] = {
+ .species = SPECIES_REGICE,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_CURSE, MOVE_COUNTER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [839] = {
+ .species = SPECIES_REGICE,
+ .moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_SLEEP_TALK, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [840] = {
+ .species = SPECIES_REGISTEEL,
+ .moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_TOXIC, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [841] = {
+ .species = SPECIES_REGISTEEL,
+ .moves = {MOVE_SUPERPOWER, MOVE_AERIAL_ACE, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [842] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [843] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_MIST_BALL, MOVE_DRAGON_CLAW, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [844] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_SWAGGER, MOVE_PSYCH_UP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [845] = {
+ .species = SPECIES_LATIAS,
+ .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [846] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [847] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_LUSTER_PURGE, MOVE_SHADOW_BALL, MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [848] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_DRAGON_DANCE, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [849] = {
+ .species = SPECIES_LATIOS,
+ .moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [850] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [851] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [852] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_HYPER_BEAM, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [853] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_HYPER_BEAM, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [854] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_OUTRAGE, MOVE_DOUBLE_EDGE, MOVE_THUNDER_WAVE, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [855] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_FLAMETHROWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [856] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_ICE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [857] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_DRAGON_CLAW, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_BRICK_BREAK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [858] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_THUNDER, MOVE_SURF, MOVE_RAIN_DANCE, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [859] = {
+ .species = SPECIES_DRAGONITE,
+ .moves = {MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [860] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_THUNDERBOLT, MOVE_SURF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [861] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_THUNDERBOLT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [862] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [863] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_CRUNCH, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [864] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [865] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CURSE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [866] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_CURSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [867] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_ROCK_SLIDE, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [868] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [869] = {
+ .species = SPECIES_TYRANITAR,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [870] = {
+ .species = SPECIES_ARTICUNO,
+ .moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_AGILITY, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [871] = {
+ .species = SPECIES_ARTICUNO,
+ .moves = {MOVE_ICE_BEAM, MOVE_AERIAL_ACE, MOVE_REFLECT, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [872] = {
+ .species = SPECIES_ZAPDOS,
+ .moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [873] = {
+ .species = SPECIES_ZAPDOS,
+ .moves = {MOVE_THUNDER, MOVE_DRILL_PECK, MOVE_RAIN_DANCE, MOVE_DOUBLE_EDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [874] = {
+ .species = SPECIES_MOLTRES,
+ .moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_FACADE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_DOCILE
+ },
+ [875] = {
+ .species = SPECIES_MOLTRES,
+ .moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_AERIAL_ACE, MOVE_STEEL_WING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_DOCILE
+ },
+ [876] = {
+ .species = SPECIES_RAIKOU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_DOUBLE_EDGE, MOVE_ROAR, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [877] = {
+ .species = SPECIES_RAIKOU,
+ .moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_SUBSTITUTE, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [878] = {
+ .species = SPECIES_ENTEI,
+ .moves = {MOVE_FIRE_BLAST, MOVE_DOUBLE_EDGE, MOVE_ENDURE, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_DOCILE
+ },
+ [879] = {
+ .species = SPECIES_ENTEI,
+ .moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_ROAR, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [880] = {
+ .species = SPECIES_SUICUNE,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_ICY_WIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [881] = {
+ .species = SPECIES_SUICUNE,
+ .moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ }
+};
diff --git a/src/data/battle_frontier/battle_frontier_trainer_mons.h b/src/data/battle_frontier/battle_frontier_trainer_mons.h
new file mode 100644
index 000000000..d0e21172b
--- /dev/null
+++ b/src/data/battle_frontier/battle_frontier_trainer_mons.h
@@ -0,0 +1,15229 @@
+const u16 gBattleFrontierTrainerMons_Brady[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Conner[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Bradley[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Cybil[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Rodette[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Peggy[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Keith[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Grayson[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Glenn[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Liliana[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Elise[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Zoey[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Manuel[] =
+{
+ 5,
+ 20,
+ 21,
+ 25,
+ 27,
+ 35,
+ 46,
+ 47,
+ 48,
+ 50,
+ 53,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 119,
+ 121,
+ 124,
+ 127,
+ 146,
+ 147,
+ 154,
+ 158,
+ 160,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Russ[] =
+{
+ 5,
+ 20,
+ 21,
+ 25,
+ 27,
+ 35,
+ 46,
+ 47,
+ 48,
+ 50,
+ 53,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 119,
+ 121,
+ 124,
+ 127,
+ 146,
+ 147,
+ 154,
+ 158,
+ 160,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dustin[] =
+{
+ 5,
+ 20,
+ 21,
+ 25,
+ 27,
+ 35,
+ 46,
+ 47,
+ 48,
+ 50,
+ 53,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 119,
+ 121,
+ 124,
+ 127,
+ 146,
+ 147,
+ 154,
+ 158,
+ 160,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Tina[] =
+{
+ 5,
+ 20,
+ 21,
+ 25,
+ 27,
+ 35,
+ 46,
+ 47,
+ 48,
+ 50,
+ 53,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 119,
+ 121,
+ 124,
+ 127,
+ 146,
+ 147,
+ 154,
+ 158,
+ 160,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gillian[] =
+{
+ 5,
+ 20,
+ 21,
+ 25,
+ 27,
+ 35,
+ 46,
+ 47,
+ 48,
+ 50,
+ 53,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 119,
+ 121,
+ 124,
+ 127,
+ 146,
+ 147,
+ 154,
+ 158,
+ 160,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Zoe[] =
+{
+ 5,
+ 20,
+ 21,
+ 25,
+ 27,
+ 35,
+ 46,
+ 47,
+ 48,
+ 50,
+ 53,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 119,
+ 121,
+ 124,
+ 127,
+ 146,
+ 147,
+ 154,
+ 158,
+ 160,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Chen[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Al[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Mitch[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Anne[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alize[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lauren[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kipp[] =
+{
+ 5,
+ 6,
+ 7,
+ 14,
+ 19,
+ 28,
+ 35,
+ 42,
+ 45,
+ 48,
+ 50,
+ 55,
+ 59,
+ 60,
+ 68,
+ 73,
+ 83,
+ 84,
+ 86,
+ 87,
+ 90,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 106,
+ 109,
+ 112,
+ 114,
+ 121,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jason[] =
+{
+ 5,
+ 6,
+ 7,
+ 14,
+ 19,
+ 28,
+ 35,
+ 42,
+ 45,
+ 48,
+ 50,
+ 55,
+ 59,
+ 60,
+ 68,
+ 73,
+ 83,
+ 84,
+ 86,
+ 87,
+ 90,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 106,
+ 109,
+ 112,
+ 114,
+ 121,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_John[] =
+{
+ 5,
+ 6,
+ 7,
+ 14,
+ 19,
+ 28,
+ 35,
+ 42,
+ 45,
+ 48,
+ 50,
+ 55,
+ 59,
+ 60,
+ 68,
+ 73,
+ 83,
+ 84,
+ 86,
+ 87,
+ 90,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 106,
+ 109,
+ 112,
+ 114,
+ 121,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ann[] =
+{
+ 5,
+ 6,
+ 7,
+ 14,
+ 19,
+ 28,
+ 35,
+ 42,
+ 45,
+ 48,
+ 50,
+ 55,
+ 59,
+ 60,
+ 68,
+ 73,
+ 83,
+ 84,
+ 86,
+ 87,
+ 90,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 106,
+ 109,
+ 112,
+ 114,
+ 121,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Eileen[] =
+{
+ 5,
+ 6,
+ 7,
+ 14,
+ 19,
+ 28,
+ 35,
+ 42,
+ 45,
+ 48,
+ 50,
+ 55,
+ 59,
+ 60,
+ 68,
+ 73,
+ 83,
+ 84,
+ 86,
+ 87,
+ 90,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 106,
+ 109,
+ 112,
+ 114,
+ 121,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Carlie[] =
+{
+ 5,
+ 6,
+ 7,
+ 14,
+ 19,
+ 28,
+ 35,
+ 42,
+ 45,
+ 48,
+ 50,
+ 55,
+ 59,
+ 60,
+ 68,
+ 73,
+ 83,
+ 84,
+ 86,
+ 87,
+ 90,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 106,
+ 109,
+ 112,
+ 114,
+ 121,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gordon[] =
+{
+ 1,
+ 13,
+ 15,
+ 16,
+ 17,
+ 22,
+ 23,
+ 24,
+ 26,
+ 32,
+ 34,
+ 36,
+ 43,
+ 50,
+ 51,
+ 54,
+ 56,
+ 68,
+ 72,
+ 73,
+ 81,
+ 82,
+ 83,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 107,
+ 109,
+ 111,
+ 113,
+ 116,
+ 117,
+ 123,
+ 124,
+ 128,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 152,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ayden[] =
+{
+ 1,
+ 13,
+ 15,
+ 16,
+ 17,
+ 22,
+ 23,
+ 24,
+ 26,
+ 32,
+ 34,
+ 36,
+ 43,
+ 50,
+ 51,
+ 54,
+ 56,
+ 68,
+ 72,
+ 73,
+ 81,
+ 82,
+ 83,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 107,
+ 109,
+ 111,
+ 113,
+ 116,
+ 117,
+ 123,
+ 124,
+ 128,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 152,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Marco[] =
+{
+ 1,
+ 13,
+ 15,
+ 16,
+ 17,
+ 22,
+ 23,
+ 24,
+ 26,
+ 32,
+ 34,
+ 36,
+ 43,
+ 50,
+ 51,
+ 54,
+ 56,
+ 68,
+ 72,
+ 73,
+ 81,
+ 82,
+ 83,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 107,
+ 109,
+ 111,
+ 113,
+ 116,
+ 117,
+ 123,
+ 124,
+ 128,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 152,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Cierra[] =
+{
+ 1,
+ 13,
+ 16,
+ 17,
+ 23,
+ 24,
+ 26,
+ 32,
+ 34,
+ 36,
+ 43,
+ 51,
+ 54,
+ 56,
+ 68,
+ 72,
+ 73,
+ 76,
+ 83,
+ 84,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 107,
+ 109,
+ 111,
+ 113,
+ 116,
+ 117,
+ 118,
+ 123,
+ 124,
+ 128,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Marcy[] =
+{
+ 1,
+ 13,
+ 16,
+ 17,
+ 23,
+ 24,
+ 26,
+ 32,
+ 34,
+ 36,
+ 43,
+ 51,
+ 54,
+ 56,
+ 68,
+ 72,
+ 73,
+ 76,
+ 83,
+ 84,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 107,
+ 109,
+ 111,
+ 113,
+ 116,
+ 117,
+ 118,
+ 123,
+ 124,
+ 128,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kathy[] =
+{
+ 1,
+ 13,
+ 16,
+ 17,
+ 23,
+ 24,
+ 26,
+ 32,
+ 34,
+ 36,
+ 43,
+ 51,
+ 54,
+ 56,
+ 68,
+ 72,
+ 73,
+ 76,
+ 83,
+ 84,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 105,
+ 107,
+ 109,
+ 111,
+ 113,
+ 116,
+ 117,
+ 118,
+ 123,
+ 124,
+ 128,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Peyton[] =
+{
+ 84,
+ 85,
+ 87,
+ 88,
+ 89,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 105,
+ 106,
+ 107,
+ 109,
+ 112,
+ 113,
+ 117,
+ 120,
+ 121,
+ 123,
+ 129,
+ 134,
+ 142,
+ 143,
+ 145,
+ 148,
+ 149,
+ 151,
+ 152,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Julian[] =
+{
+ 84,
+ 85,
+ 87,
+ 88,
+ 89,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 105,
+ 106,
+ 107,
+ 109,
+ 112,
+ 113,
+ 117,
+ 120,
+ 121,
+ 123,
+ 129,
+ 134,
+ 142,
+ 143,
+ 145,
+ 148,
+ 149,
+ 151,
+ 152,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Quinn[] =
+{
+ 84,
+ 85,
+ 87,
+ 88,
+ 89,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 105,
+ 106,
+ 107,
+ 109,
+ 112,
+ 113,
+ 117,
+ 120,
+ 121,
+ 123,
+ 129,
+ 134,
+ 142,
+ 143,
+ 145,
+ 148,
+ 149,
+ 151,
+ 152,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Haylee[] =
+{
+ 1,
+ 5,
+ 6,
+ 10,
+ 13,
+ 14,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 23,
+ 24,
+ 26,
+ 28,
+ 29,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 54,
+ 56,
+ 59,
+ 61,
+ 65,
+ 66,
+ 67,
+ 68,
+ 71,
+ 72,
+ 79,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Amanda[] =
+{
+ 1,
+ 5,
+ 6,
+ 10,
+ 13,
+ 14,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 23,
+ 24,
+ 26,
+ 28,
+ 29,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 54,
+ 56,
+ 59,
+ 61,
+ 65,
+ 66,
+ 67,
+ 68,
+ 71,
+ 72,
+ 79,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Stacy[] =
+{
+ 1,
+ 5,
+ 6,
+ 10,
+ 13,
+ 14,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 23,
+ 24,
+ 26,
+ 28,
+ 29,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 54,
+ 56,
+ 59,
+ 61,
+ 65,
+ 66,
+ 67,
+ 68,
+ 71,
+ 72,
+ 79,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Rafael[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Oliver[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Payton[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Pamela[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Eliza[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Marisa[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lewis[] =
+{
+ 2,
+ 3,
+ 4,
+ 8,
+ 9,
+ 21,
+ 27,
+ 39,
+ 40,
+ 41,
+ 42,
+ 52,
+ 57,
+ 58,
+ 80,
+ 112,
+ 132,
+ 141,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Yoshi[] =
+{
+ 2,
+ 3,
+ 4,
+ 11,
+ 12,
+ 21,
+ 27,
+ 39,
+ 40,
+ 41,
+ 42,
+ 52,
+ 57,
+ 58,
+ 80,
+ 112,
+ 132,
+ 141,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Destin[] =
+{
+ 2,
+ 3,
+ 4,
+ 21,
+ 27,
+ 39,
+ 40,
+ 41,
+ 42,
+ 52,
+ 57,
+ 58,
+ 80,
+ 112,
+ 132,
+ 141,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Keon[] =
+{
+ 5,
+ 21,
+ 25,
+ 27,
+ 35,
+ 39,
+ 40,
+ 41,
+ 42,
+ 46,
+ 47,
+ 48,
+ 50,
+ 52,
+ 53,
+ 57,
+ 58,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 121,
+ 124,
+ 127,
+ 132,
+ 141,
+ 146,
+ 147,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Stuart[] =
+{
+ 5,
+ 21,
+ 25,
+ 27,
+ 35,
+ 39,
+ 40,
+ 41,
+ 42,
+ 46,
+ 47,
+ 48,
+ 50,
+ 52,
+ 53,
+ 57,
+ 58,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 121,
+ 124,
+ 127,
+ 132,
+ 141,
+ 146,
+ 147,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Nestor[] =
+{
+ 5,
+ 21,
+ 25,
+ 27,
+ 35,
+ 39,
+ 40,
+ 41,
+ 42,
+ 46,
+ 47,
+ 48,
+ 50,
+ 52,
+ 53,
+ 57,
+ 58,
+ 62,
+ 63,
+ 69,
+ 75,
+ 78,
+ 79,
+ 80,
+ 84,
+ 90,
+ 92,
+ 99,
+ 100,
+ 102,
+ 106,
+ 110,
+ 112,
+ 114,
+ 121,
+ 124,
+ 127,
+ 132,
+ 141,
+ 146,
+ 147,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Derrick[] =
+{
+ 21,
+ 27,
+ 29,
+ 39,
+ 40,
+ 41,
+ 42,
+ 52,
+ 57,
+ 58,
+ 61,
+ 62,
+ 63,
+ 69,
+ 80,
+ 92,
+ 102,
+ 112,
+ 125,
+ 129,
+ 132,
+ 140,
+ 141,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Bryson[] =
+{
+ 21,
+ 27,
+ 29,
+ 39,
+ 40,
+ 41,
+ 42,
+ 52,
+ 57,
+ 58,
+ 61,
+ 62,
+ 63,
+ 69,
+ 80,
+ 92,
+ 102,
+ 112,
+ 125,
+ 129,
+ 132,
+ 140,
+ 141,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Clayton[] =
+{
+ 21,
+ 27,
+ 29,
+ 39,
+ 40,
+ 41,
+ 42,
+ 52,
+ 57,
+ 58,
+ 61,
+ 62,
+ 63,
+ 69,
+ 80,
+ 92,
+ 102,
+ 112,
+ 125,
+ 129,
+ 132,
+ 140,
+ 141,
+ 153,
+ 154,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Trenton[] =
+{
+ 6,
+ 7,
+ 55,
+ 60,
+ 68,
+ 73,
+ 83,
+ 86,
+ 87,
+ 105,
+ 111,
+ 116,
+ 123,
+ 124,
+ 128,
+ 134,
+ 138,
+ 139,
+ 151,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jenson[] =
+{
+ 6,
+ 7,
+ 55,
+ 60,
+ 68,
+ 73,
+ 83,
+ 86,
+ 87,
+ 105,
+ 111,
+ 116,
+ 123,
+ 124,
+ 128,
+ 134,
+ 138,
+ 139,
+ 151,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Wesley[] =
+{
+ 6,
+ 7,
+ 55,
+ 60,
+ 68,
+ 73,
+ 83,
+ 86,
+ 87,
+ 105,
+ 111,
+ 116,
+ 123,
+ 124,
+ 128,
+ 134,
+ 138,
+ 139,
+ 151,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Anton[] =
+{
+ 31,
+ 39,
+ 58,
+ 67,
+ 70,
+ 74,
+ 75,
+ 78,
+ 85,
+ 104,
+ 108,
+ 120,
+ 122,
+ 133,
+ 138,
+ 139,
+ 140,
+ 141,
+ 150,
+ 151,
+ 152,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lawson[] =
+{
+ 31,
+ 39,
+ 58,
+ 67,
+ 70,
+ 74,
+ 75,
+ 78,
+ 85,
+ 104,
+ 108,
+ 120,
+ 122,
+ 133,
+ 138,
+ 139,
+ 140,
+ 141,
+ 150,
+ 151,
+ 152,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Sammy[] =
+{
+ 31,
+ 39,
+ 58,
+ 67,
+ 70,
+ 74,
+ 75,
+ 78,
+ 85,
+ 104,
+ 108,
+ 120,
+ 122,
+ 133,
+ 138,
+ 139,
+ 140,
+ 141,
+ 150,
+ 151,
+ 152,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Arnie[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Adrian[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Tristan[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Juliana[] =
+{
+ 0,
+ 14,
+ 19,
+ 28,
+ 42,
+ 58,
+ 59,
+ 67,
+ 68,
+ 85,
+ 118,
+ 120,
+ 123,
+ 155,
+ 156,
+ 193,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Rylee[] =
+{
+ 0,
+ 14,
+ 19,
+ 28,
+ 42,
+ 58,
+ 59,
+ 67,
+ 68,
+ 85,
+ 118,
+ 120,
+ 123,
+ 155,
+ 156,
+ 193,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Chelsea[] =
+{
+ 0,
+ 14,
+ 19,
+ 28,
+ 42,
+ 58,
+ 59,
+ 67,
+ 68,
+ 85,
+ 118,
+ 120,
+ 123,
+ 155,
+ 156,
+ 193,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Danela[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 10,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 46,
+ 47,
+ 48,
+ 49,
+ 50,
+ 51,
+ 52,
+ 53,
+ 54,
+ 55,
+ 56,
+ 57,
+ 58,
+ 59,
+ 60,
+ 61,
+ 62,
+ 63,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lizbeth[] =
+{
+ 66,
+ 67,
+ 68,
+ 69,
+ 70,
+ 71,
+ 72,
+ 73,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 82,
+ 83,
+ 84,
+ 85,
+ 86,
+ 87,
+ 88,
+ 89,
+ 90,
+ 91,
+ 92,
+ 93,
+ 94,
+ 95,
+ 96,
+ 97,
+ 98,
+ 99,
+ 100,
+ 101,
+ 102,
+ 103,
+ 104,
+ 105,
+ 106,
+ 107,
+ 108,
+ 109,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Amelia[] =
+{
+ 110,
+ 111,
+ 112,
+ 113,
+ 114,
+ 115,
+ 116,
+ 117,
+ 118,
+ 119,
+ 120,
+ 121,
+ 122,
+ 123,
+ 124,
+ 125,
+ 127,
+ 128,
+ 129,
+ 130,
+ 131,
+ 132,
+ 133,
+ 134,
+ 135,
+ 136,
+ 137,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 143,
+ 144,
+ 145,
+ 146,
+ 147,
+ 148,
+ 149,
+ 150,
+ 151,
+ 152,
+ 153,
+ 154,
+ 155,
+ 156,
+ 157,
+ 158,
+ 159,
+ 160,
+ 161,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jillian[] =
+{
+ 0,
+ 5,
+ 18,
+ 19,
+ 29,
+ 35,
+ 48,
+ 50,
+ 52,
+ 61,
+ 69,
+ 75,
+ 78,
+ 84,
+ 90,
+ 94,
+ 99,
+ 100,
+ 101,
+ 102,
+ 106,
+ 112,
+ 114,
+ 121,
+ 125,
+ 129,
+ 130,
+ 131,
+ 140,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Abbie[] =
+{
+ 0,
+ 5,
+ 18,
+ 19,
+ 29,
+ 35,
+ 48,
+ 50,
+ 52,
+ 61,
+ 69,
+ 75,
+ 78,
+ 84,
+ 90,
+ 94,
+ 99,
+ 100,
+ 101,
+ 102,
+ 106,
+ 112,
+ 114,
+ 121,
+ 125,
+ 129,
+ 130,
+ 131,
+ 140,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Briana[] =
+{
+ 0,
+ 5,
+ 18,
+ 19,
+ 29,
+ 35,
+ 48,
+ 50,
+ 52,
+ 61,
+ 69,
+ 75,
+ 78,
+ 84,
+ 90,
+ 94,
+ 99,
+ 100,
+ 101,
+ 102,
+ 106,
+ 112,
+ 114,
+ 121,
+ 125,
+ 129,
+ 130,
+ 131,
+ 140,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Antonio[] =
+{
+ 5,
+ 10,
+ 20,
+ 35,
+ 48,
+ 49,
+ 50,
+ 62,
+ 63,
+ 64,
+ 66,
+ 71,
+ 75,
+ 77,
+ 78,
+ 84,
+ 90,
+ 92,
+ 99,
+ 106,
+ 108,
+ 112,
+ 114,
+ 115,
+ 116,
+ 119,
+ 121,
+ 122,
+ 143,
+ 148,
+ 152,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jaden[] =
+{
+ 5,
+ 10,
+ 20,
+ 35,
+ 48,
+ 49,
+ 50,
+ 62,
+ 63,
+ 64,
+ 66,
+ 71,
+ 75,
+ 77,
+ 78,
+ 84,
+ 90,
+ 92,
+ 99,
+ 106,
+ 108,
+ 112,
+ 114,
+ 115,
+ 116,
+ 119,
+ 121,
+ 122,
+ 143,
+ 148,
+ 152,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dakota[] =
+{
+ 5,
+ 10,
+ 20,
+ 35,
+ 48,
+ 49,
+ 50,
+ 62,
+ 63,
+ 64,
+ 66,
+ 71,
+ 75,
+ 77,
+ 78,
+ 84,
+ 90,
+ 92,
+ 99,
+ 106,
+ 108,
+ 112,
+ 114,
+ 115,
+ 116,
+ 119,
+ 121,
+ 122,
+ 143,
+ 148,
+ 152,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Brayden[] =
+{
+ 1,
+ 13,
+ 16,
+ 17,
+ 23,
+ 24,
+ 25,
+ 26,
+ 32,
+ 33,
+ 34,
+ 36,
+ 37,
+ 38,
+ 43,
+ 44,
+ 45,
+ 51,
+ 54,
+ 56,
+ 72,
+ 91,
+ 93,
+ 95,
+ 106,
+ 107,
+ 113,
+ 117,
+ 118,
+ 135,
+ 137,
+ 142,
+ 144,
+ 145,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Corson[] =
+{
+ 1,
+ 13,
+ 16,
+ 17,
+ 23,
+ 24,
+ 25,
+ 26,
+ 32,
+ 33,
+ 34,
+ 36,
+ 37,
+ 38,
+ 43,
+ 44,
+ 45,
+ 51,
+ 54,
+ 56,
+ 72,
+ 91,
+ 93,
+ 95,
+ 106,
+ 107,
+ 113,
+ 117,
+ 118,
+ 135,
+ 137,
+ 142,
+ 144,
+ 145,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Trevin[] =
+{
+ 1,
+ 13,
+ 16,
+ 17,
+ 23,
+ 24,
+ 25,
+ 26,
+ 32,
+ 33,
+ 34,
+ 36,
+ 37,
+ 38,
+ 43,
+ 44,
+ 45,
+ 51,
+ 54,
+ 56,
+ 72,
+ 91,
+ 93,
+ 95,
+ 106,
+ 107,
+ 113,
+ 117,
+ 118,
+ 135,
+ 137,
+ 142,
+ 144,
+ 145,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Patrick[] =
+{
+ 15,
+ 22,
+ 50,
+ 67,
+ 70,
+ 71,
+ 74,
+ 77,
+ 81,
+ 82,
+ 83,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 104,
+ 109,
+ 111,
+ 120,
+ 124,
+ 128,
+ 131,
+ 133,
+ 134,
+ 138,
+ 139,
+ 151,
+ 155,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kaden[] =
+{
+ 15,
+ 22,
+ 50,
+ 67,
+ 70,
+ 71,
+ 74,
+ 77,
+ 81,
+ 82,
+ 83,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 104,
+ 109,
+ 111,
+ 120,
+ 124,
+ 128,
+ 131,
+ 133,
+ 134,
+ 138,
+ 139,
+ 151,
+ 155,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Maxwell[] =
+{
+ 15,
+ 22,
+ 50,
+ 67,
+ 70,
+ 71,
+ 74,
+ 77,
+ 81,
+ 82,
+ 83,
+ 86,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 104,
+ 109,
+ 111,
+ 120,
+ 124,
+ 128,
+ 131,
+ 133,
+ 134,
+ 138,
+ 139,
+ 151,
+ 155,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Daryl[] =
+{
+ 15,
+ 22,
+ 31,
+ 39,
+ 50,
+ 51,
+ 58,
+ 67,
+ 70,
+ 74,
+ 75,
+ 81,
+ 82,
+ 85,
+ 104,
+ 120,
+ 122,
+ 132,
+ 133,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 144,
+ 150,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kenneth[] =
+{
+ 15,
+ 22,
+ 31,
+ 39,
+ 50,
+ 51,
+ 58,
+ 67,
+ 70,
+ 74,
+ 75,
+ 81,
+ 82,
+ 85,
+ 104,
+ 120,
+ 122,
+ 132,
+ 133,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 144,
+ 150,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Rich[] =
+{
+ 15,
+ 22,
+ 31,
+ 39,
+ 50,
+ 51,
+ 58,
+ 67,
+ 70,
+ 74,
+ 75,
+ 81,
+ 82,
+ 85,
+ 104,
+ 120,
+ 122,
+ 132,
+ 133,
+ 138,
+ 139,
+ 140,
+ 141,
+ 142,
+ 144,
+ 150,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Caden[] =
+{
+ 30,
+ 62,
+ 63,
+ 65,
+ 70,
+ 74,
+ 77,
+ 78,
+ 85,
+ 88,
+ 89,
+ 95,
+ 108,
+ 119,
+ 122,
+ 133,
+ 136,
+ 149,
+ 150,
+ 152,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Marlon[] =
+{
+ 30,
+ 62,
+ 63,
+ 65,
+ 70,
+ 74,
+ 77,
+ 78,
+ 85,
+ 88,
+ 89,
+ 95,
+ 108,
+ 119,
+ 122,
+ 133,
+ 136,
+ 149,
+ 150,
+ 152,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Nash[] =
+{
+ 30,
+ 62,
+ 63,
+ 65,
+ 70,
+ 74,
+ 77,
+ 78,
+ 85,
+ 88,
+ 89,
+ 95,
+ 108,
+ 119,
+ 122,
+ 133,
+ 136,
+ 149,
+ 150,
+ 152,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Robby[] =
+{
+ 1,
+ 13,
+ 15,
+ 16,
+ 17,
+ 22,
+ 23,
+ 24,
+ 26,
+ 32,
+ 33,
+ 34,
+ 36,
+ 37,
+ 38,
+ 43,
+ 44,
+ 50,
+ 51,
+ 54,
+ 56,
+ 67,
+ 70,
+ 72,
+ 74,
+ 75,
+ 81,
+ 82,
+ 85,
+ 91,
+ 93,
+ 104,
+ 107,
+ 113,
+ 117,
+ 120,
+ 132,
+ 133,
+ 135,
+ 137,
+ 142,
+ 144,
+ 145,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Reece[] =
+{
+ 1,
+ 13,
+ 15,
+ 16,
+ 17,
+ 22,
+ 23,
+ 24,
+ 26,
+ 32,
+ 33,
+ 34,
+ 36,
+ 37,
+ 38,
+ 43,
+ 44,
+ 50,
+ 51,
+ 54,
+ 56,
+ 67,
+ 70,
+ 72,
+ 74,
+ 75,
+ 81,
+ 82,
+ 85,
+ 91,
+ 93,
+ 104,
+ 107,
+ 113,
+ 117,
+ 120,
+ 132,
+ 133,
+ 135,
+ 137,
+ 142,
+ 144,
+ 145,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kathryn[] =
+{
+ 1,
+ 13,
+ 15,
+ 16,
+ 17,
+ 22,
+ 23,
+ 24,
+ 26,
+ 32,
+ 33,
+ 34,
+ 36,
+ 37,
+ 38,
+ 43,
+ 44,
+ 50,
+ 51,
+ 54,
+ 56,
+ 67,
+ 70,
+ 72,
+ 74,
+ 75,
+ 81,
+ 82,
+ 85,
+ 91,
+ 93,
+ 104,
+ 107,
+ 113,
+ 117,
+ 120,
+ 132,
+ 133,
+ 135,
+ 137,
+ 142,
+ 144,
+ 145,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ellen[] =
+{
+ 1,
+ 13,
+ 15,
+ 16,
+ 17,
+ 22,
+ 23,
+ 24,
+ 26,
+ 32,
+ 33,
+ 34,
+ 36,
+ 37,
+ 38,
+ 43,
+ 44,
+ 50,
+ 51,
+ 54,
+ 56,
+ 67,
+ 70,
+ 72,
+ 74,
+ 75,
+ 81,
+ 82,
+ 85,
+ 91,
+ 93,
+ 104,
+ 107,
+ 113,
+ 117,
+ 120,
+ 132,
+ 133,
+ 135,
+ 137,
+ 142,
+ 144,
+ 145,
+ 156,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ramon[] =
+{
+ 15,
+ 22,
+ 50,
+ 71,
+ 72,
+ 76,
+ 77,
+ 81,
+ 82,
+ 83,
+ 84,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 107,
+ 109,
+ 111,
+ 113,
+ 117,
+ 118,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Arthur[] =
+{
+ 15,
+ 22,
+ 50,
+ 71,
+ 72,
+ 76,
+ 77,
+ 81,
+ 82,
+ 83,
+ 84,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 107,
+ 109,
+ 111,
+ 113,
+ 117,
+ 118,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alondra[] =
+{
+ 15,
+ 22,
+ 50,
+ 71,
+ 72,
+ 76,
+ 77,
+ 81,
+ 82,
+ 83,
+ 84,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 107,
+ 109,
+ 111,
+ 113,
+ 117,
+ 118,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Adriana[] =
+{
+ 15,
+ 22,
+ 50,
+ 71,
+ 72,
+ 76,
+ 77,
+ 81,
+ 82,
+ 83,
+ 84,
+ 87,
+ 96,
+ 97,
+ 98,
+ 99,
+ 103,
+ 107,
+ 109,
+ 111,
+ 113,
+ 117,
+ 118,
+ 131,
+ 134,
+ 138,
+ 139,
+ 142,
+ 144,
+ 145,
+ 151,
+ 155,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Malik[] =
+{
+ 10,
+ 15,
+ 22,
+ 49,
+ 50,
+ 64,
+ 66,
+ 71,
+ 72,
+ 77,
+ 78,
+ 81,
+ 82,
+ 91,
+ 93,
+ 107,
+ 108,
+ 113,
+ 115,
+ 117,
+ 122,
+ 135,
+ 137,
+ 142,
+ 143,
+ 144,
+ 145,
+ 148,
+ 152,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jill[] =
+{
+ 10,
+ 15,
+ 22,
+ 49,
+ 50,
+ 64,
+ 66,
+ 71,
+ 72,
+ 77,
+ 78,
+ 81,
+ 82,
+ 91,
+ 93,
+ 107,
+ 108,
+ 113,
+ 115,
+ 117,
+ 122,
+ 135,
+ 137,
+ 142,
+ 143,
+ 144,
+ 145,
+ 148,
+ 152,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Erik[] =
+{
+ 162,
+ 164,
+ 168,
+ 178,
+ 183,
+ 184,
+ 189,
+ 197,
+ 199,
+ 200,
+ 203,
+ 204,
+ 207,
+ 210,
+ 213,
+ 214,
+ 218,
+ 220,
+ 221,
+ 224,
+ 227,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 238,
+ 240,
+ 243,
+ 245,
+ 246,
+ 250,
+ 263,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Yazmin[] =
+{
+ 162,
+ 164,
+ 168,
+ 178,
+ 183,
+ 184,
+ 189,
+ 197,
+ 199,
+ 200,
+ 203,
+ 204,
+ 207,
+ 210,
+ 213,
+ 214,
+ 218,
+ 220,
+ 221,
+ 224,
+ 227,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 238,
+ 240,
+ 243,
+ 245,
+ 246,
+ 250,
+ 263,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jamal[] =
+{
+ 170,
+ 176,
+ 178,
+ 182,
+ 189,
+ 190,
+ 192,
+ 196,
+ 211,
+ 212,
+ 213,
+ 219,
+ 228,
+ 230,
+ 232,
+ 233,
+ 234,
+ 236,
+ 242,
+ 245,
+ 249,
+ 253,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 265,
+ 266,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Leslie[] =
+{
+ 170,
+ 176,
+ 178,
+ 182,
+ 189,
+ 190,
+ 192,
+ 196,
+ 211,
+ 212,
+ 213,
+ 219,
+ 228,
+ 230,
+ 232,
+ 233,
+ 234,
+ 236,
+ 242,
+ 245,
+ 249,
+ 253,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 265,
+ 266,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dave[] =
+{
+ 162,
+ 164,
+ 168,
+ 178,
+ 183,
+ 186,
+ 187,
+ 189,
+ 197,
+ 199,
+ 200,
+ 203,
+ 204,
+ 206,
+ 207,
+ 214,
+ 215,
+ 218,
+ 220,
+ 221,
+ 224,
+ 227,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 244,
+ 246,
+ 250,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Carlo[] =
+{
+ 162,
+ 164,
+ 168,
+ 178,
+ 183,
+ 186,
+ 187,
+ 189,
+ 197,
+ 199,
+ 200,
+ 203,
+ 204,
+ 206,
+ 207,
+ 214,
+ 215,
+ 218,
+ 220,
+ 221,
+ 224,
+ 227,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 244,
+ 246,
+ 250,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Emilia[] =
+{
+ 162,
+ 164,
+ 168,
+ 178,
+ 183,
+ 186,
+ 187,
+ 189,
+ 197,
+ 199,
+ 200,
+ 203,
+ 204,
+ 206,
+ 207,
+ 214,
+ 215,
+ 218,
+ 220,
+ 221,
+ 224,
+ 227,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 244,
+ 246,
+ 250,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dalia[] =
+{
+ 162,
+ 164,
+ 168,
+ 178,
+ 183,
+ 186,
+ 187,
+ 189,
+ 197,
+ 199,
+ 200,
+ 203,
+ 204,
+ 206,
+ 207,
+ 214,
+ 215,
+ 218,
+ 220,
+ 221,
+ 224,
+ 227,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 244,
+ 246,
+ 250,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Hitomi[] =
+{
+ 164,
+ 166,
+ 175,
+ 178,
+ 181,
+ 189,
+ 191,
+ 193,
+ 194,
+ 195,
+ 197,
+ 199,
+ 200,
+ 202,
+ 203,
+ 205,
+ 206,
+ 207,
+ 210,
+ 215,
+ 218,
+ 220,
+ 221,
+ 222,
+ 223,
+ 225,
+ 227,
+ 230,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 241,
+ 246,
+ 247,
+ 252,
+ 254,
+ 262,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ricardo[] =
+{
+ 164,
+ 166,
+ 175,
+ 178,
+ 181,
+ 189,
+ 191,
+ 193,
+ 194,
+ 195,
+ 197,
+ 199,
+ 200,
+ 202,
+ 203,
+ 205,
+ 206,
+ 207,
+ 210,
+ 215,
+ 218,
+ 220,
+ 221,
+ 222,
+ 223,
+ 225,
+ 227,
+ 230,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 241,
+ 246,
+ 247,
+ 252,
+ 254,
+ 262,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Shizuka[] =
+{
+ 164,
+ 166,
+ 175,
+ 178,
+ 181,
+ 189,
+ 191,
+ 193,
+ 194,
+ 195,
+ 197,
+ 199,
+ 200,
+ 202,
+ 203,
+ 205,
+ 206,
+ 207,
+ 210,
+ 215,
+ 218,
+ 220,
+ 221,
+ 222,
+ 223,
+ 225,
+ 227,
+ 230,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 241,
+ 246,
+ 247,
+ 252,
+ 254,
+ 262,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Joana[] =
+{
+ 164,
+ 166,
+ 175,
+ 178,
+ 181,
+ 189,
+ 191,
+ 193,
+ 194,
+ 195,
+ 197,
+ 199,
+ 200,
+ 202,
+ 203,
+ 205,
+ 206,
+ 207,
+ 210,
+ 215,
+ 218,
+ 220,
+ 221,
+ 222,
+ 223,
+ 225,
+ 227,
+ 230,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 241,
+ 246,
+ 247,
+ 252,
+ 254,
+ 262,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kelly[] =
+{
+ 164,
+ 166,
+ 175,
+ 178,
+ 181,
+ 189,
+ 191,
+ 193,
+ 194,
+ 195,
+ 197,
+ 199,
+ 200,
+ 202,
+ 203,
+ 205,
+ 206,
+ 207,
+ 210,
+ 215,
+ 218,
+ 220,
+ 221,
+ 222,
+ 223,
+ 225,
+ 227,
+ 230,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 241,
+ 246,
+ 247,
+ 252,
+ 254,
+ 262,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Rayna[] =
+{
+ 164,
+ 166,
+ 175,
+ 178,
+ 181,
+ 189,
+ 191,
+ 193,
+ 194,
+ 195,
+ 197,
+ 199,
+ 200,
+ 202,
+ 203,
+ 205,
+ 206,
+ 207,
+ 210,
+ 215,
+ 218,
+ 220,
+ 221,
+ 222,
+ 223,
+ 225,
+ 227,
+ 230,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ 240,
+ 241,
+ 246,
+ 247,
+ 252,
+ 254,
+ 262,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Evan[] =
+{
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jordan[] =
+{
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Joel[] =
+{
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kristen[] =
+{
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 174,
+ 175,
+ 176,
+ 177,
+ 178,
+ 179,
+ 180,
+ 181,
+ 182,
+ 183,
+ 184,
+ 185,
+ 186,
+ 187,
+ 188,
+ 189,
+ 190,
+ 191,
+ 192,
+ 193,
+ 194,
+ 195,
+ 196,
+ 197,
+ 198,
+ 199,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Selphy[] =
+{
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 210,
+ 211,
+ 212,
+ 213,
+ 214,
+ 215,
+ 216,
+ 217,
+ 218,
+ 219,
+ 220,
+ 221,
+ 222,
+ 223,
+ 224,
+ 225,
+ 226,
+ 227,
+ 228,
+ 229,
+ 230,
+ 231,
+ 232,
+ 233,
+ 234,
+ 235,
+ 236,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Chloe[] =
+{
+ 237,
+ 238,
+ 239,
+ 240,
+ 241,
+ 242,
+ 243,
+ 244,
+ 245,
+ 246,
+ 247,
+ 248,
+ 249,
+ 250,
+ 251,
+ 252,
+ 253,
+ 254,
+ 255,
+ 256,
+ 257,
+ 258,
+ 259,
+ 260,
+ 261,
+ 262,
+ 263,
+ 264,
+ 265,
+ 266,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Norton[] =
+{
+ 267,
+ 268,
+ 273,
+ 274,
+ 276,
+ 284,
+ 289,
+ 290,
+ 291,
+ 292,
+ 307,
+ 308,
+ 311,
+ 312,
+ 314,
+ 317,
+ 325,
+ 327,
+ 328,
+ 329,
+ 331,
+ 332,
+ 340,
+ 342,
+ 347,
+ 349,
+ 351,
+ 352,
+ 354,
+ 356,
+ 359,
+ 363,
+ 370,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lukas[] =
+{
+ 267,
+ 268,
+ 273,
+ 274,
+ 276,
+ 284,
+ 289,
+ 290,
+ 291,
+ 292,
+ 307,
+ 308,
+ 311,
+ 312,
+ 314,
+ 317,
+ 325,
+ 327,
+ 328,
+ 329,
+ 331,
+ 332,
+ 340,
+ 342,
+ 347,
+ 349,
+ 351,
+ 352,
+ 354,
+ 356,
+ 359,
+ 363,
+ 370,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Zach[] =
+{
+ 267,
+ 268,
+ 273,
+ 274,
+ 276,
+ 284,
+ 289,
+ 290,
+ 291,
+ 292,
+ 307,
+ 308,
+ 311,
+ 312,
+ 314,
+ 317,
+ 325,
+ 327,
+ 328,
+ 329,
+ 331,
+ 332,
+ 340,
+ 342,
+ 347,
+ 349,
+ 351,
+ 352,
+ 354,
+ 356,
+ 359,
+ 363,
+ 370,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kaitlyn[] =
+{
+ 267,
+ 268,
+ 273,
+ 274,
+ 276,
+ 284,
+ 289,
+ 290,
+ 291,
+ 292,
+ 307,
+ 308,
+ 311,
+ 312,
+ 314,
+ 317,
+ 325,
+ 327,
+ 328,
+ 329,
+ 331,
+ 332,
+ 340,
+ 342,
+ 347,
+ 349,
+ 351,
+ 352,
+ 354,
+ 356,
+ 359,
+ 363,
+ 370,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Breanna[] =
+{
+ 267,
+ 268,
+ 273,
+ 274,
+ 276,
+ 284,
+ 289,
+ 290,
+ 291,
+ 292,
+ 307,
+ 308,
+ 311,
+ 312,
+ 314,
+ 317,
+ 325,
+ 327,
+ 328,
+ 329,
+ 331,
+ 332,
+ 340,
+ 342,
+ 347,
+ 349,
+ 351,
+ 352,
+ 354,
+ 356,
+ 359,
+ 363,
+ 370,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kendra[] =
+{
+ 267,
+ 268,
+ 273,
+ 274,
+ 276,
+ 284,
+ 289,
+ 290,
+ 291,
+ 292,
+ 307,
+ 308,
+ 311,
+ 312,
+ 314,
+ 317,
+ 325,
+ 327,
+ 328,
+ 329,
+ 331,
+ 332,
+ 340,
+ 342,
+ 347,
+ 349,
+ 351,
+ 352,
+ 354,
+ 356,
+ 359,
+ 363,
+ 370,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Molly[] =
+{
+ 268,
+ 270,
+ 272,
+ 274,
+ 282,
+ 284,
+ 289,
+ 290,
+ 303,
+ 307,
+ 311,
+ 314,
+ 317,
+ 322,
+ 327,
+ 328,
+ 331,
+ 336,
+ 340,
+ 342,
+ 344,
+ 347,
+ 352,
+ 353,
+ 354,
+ 356,
+ 359,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jazmin[] =
+{
+ 268,
+ 270,
+ 272,
+ 274,
+ 282,
+ 284,
+ 289,
+ 290,
+ 303,
+ 307,
+ 311,
+ 314,
+ 317,
+ 322,
+ 327,
+ 328,
+ 331,
+ 336,
+ 340,
+ 342,
+ 344,
+ 347,
+ 352,
+ 353,
+ 354,
+ 356,
+ 359,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kelsey[] =
+{
+ 268,
+ 270,
+ 272,
+ 274,
+ 282,
+ 284,
+ 289,
+ 290,
+ 303,
+ 307,
+ 311,
+ 314,
+ 317,
+ 322,
+ 327,
+ 328,
+ 331,
+ 336,
+ 340,
+ 342,
+ 344,
+ 347,
+ 352,
+ 353,
+ 354,
+ 356,
+ 359,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jalen[] =
+{
+ 269,
+ 271,
+ 275,
+ 279,
+ 280,
+ 281,
+ 283,
+ 285,
+ 286,
+ 287,
+ 293,
+ 294,
+ 295,
+ 300,
+ 302,
+ 307,
+ 310,
+ 311,
+ 320,
+ 322,
+ 326,
+ 330,
+ 332,
+ 335,
+ 344,
+ 345,
+ 346,
+ 348,
+ 350,
+ 353,
+ 357,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Griffen[] =
+{
+ 269,
+ 271,
+ 275,
+ 279,
+ 280,
+ 281,
+ 283,
+ 285,
+ 286,
+ 287,
+ 293,
+ 294,
+ 295,
+ 300,
+ 302,
+ 307,
+ 310,
+ 311,
+ 320,
+ 322,
+ 326,
+ 330,
+ 332,
+ 335,
+ 344,
+ 345,
+ 346,
+ 348,
+ 350,
+ 353,
+ 357,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Xander[] =
+{
+ 269,
+ 271,
+ 275,
+ 279,
+ 280,
+ 281,
+ 283,
+ 285,
+ 286,
+ 287,
+ 293,
+ 294,
+ 295,
+ 300,
+ 302,
+ 307,
+ 310,
+ 311,
+ 320,
+ 322,
+ 326,
+ 330,
+ 332,
+ 335,
+ 344,
+ 345,
+ 346,
+ 348,
+ 350,
+ 353,
+ 357,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Marvin[] =
+{
+ 267,
+ 268,
+ 269,
+ 270,
+ 271,
+ 272,
+ 273,
+ 274,
+ 275,
+ 276,
+ 277,
+ 278,
+ 279,
+ 280,
+ 281,
+ 282,
+ 283,
+ 284,
+ 285,
+ 286,
+ 287,
+ 288,
+ 289,
+ 290,
+ 291,
+ 292,
+ 293,
+ 294,
+ 295,
+ 296,
+ 297,
+ 298,
+ 299,
+ 300,
+ 301,
+ 302,
+ 303,
+ 304,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Brennan[] =
+{
+ 305,
+ 306,
+ 307,
+ 308,
+ 309,
+ 310,
+ 311,
+ 312,
+ 313,
+ 314,
+ 315,
+ 316,
+ 317,
+ 318,
+ 319,
+ 320,
+ 321,
+ 322,
+ 323,
+ 324,
+ 325,
+ 326,
+ 327,
+ 328,
+ 329,
+ 330,
+ 331,
+ 332,
+ 333,
+ 334,
+ 335,
+ 336,
+ 337,
+ 338,
+ 339,
+ 340,
+ 341,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Baley[] =
+{
+ 159,
+ 160,
+ 161,
+ 172,
+ 173,
+ 177,
+ 198,
+ 226,
+ 238,
+ 263,
+ 264,
+ 277,
+ 278,
+ 282,
+ 303,
+ 331,
+ 343,
+ 368,
+ 369,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Zackary[] =
+{
+ 271,
+ 283,
+ 294,
+ 295,
+ 298,
+ 299,
+ 300,
+ 311,
+ 315,
+ 320,
+ 327,
+ 328,
+ 330,
+ 335,
+ 337,
+ 338,
+ 339,
+ 341,
+ 346,
+ 364,
+ 365,
+ 366,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gabriel[] =
+{
+ 342,
+ 343,
+ 344,
+ 345,
+ 346,
+ 347,
+ 348,
+ 349,
+ 350,
+ 351,
+ 352,
+ 353,
+ 354,
+ 355,
+ 356,
+ 357,
+ 358,
+ 359,
+ 360,
+ 361,
+ 362,
+ 363,
+ 364,
+ 365,
+ 366,
+ 367,
+ 368,
+ 369,
+ 370,
+ 371,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Emily[] =
+{
+ 272,
+ 301,
+ 309,
+ 330,
+ 348,
+ 349,
+ 350,
+ 359,
+ 360,
+ 362,
+ 363,
+ 365,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jordyn[] =
+{
+ 267,
+ 269,
+ 270,
+ 272,
+ 273,
+ 276,
+ 279,
+ 284,
+ 288,
+ 302,
+ 304,
+ 305,
+ 308,
+ 309,
+ 312,
+ 316,
+ 319,
+ 322,
+ 323,
+ 325,
+ 326,
+ 329,
+ 331,
+ 332,
+ 336,
+ 340,
+ 344,
+ 345,
+ 351,
+ 353,
+ 355,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Sofia[] =
+{
+ 270,
+ 272,
+ 274,
+ 276,
+ 279,
+ 282,
+ 285,
+ 290,
+ 293,
+ 313,
+ 314,
+ 321,
+ 334,
+ 340,
+ 348,
+ 356,
+ 359,
+ 360,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Braden[] =
+{
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kayden[] =
+{
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Cooper[] =
+{
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459,
+ 460,
+ 461,
+ 462,
+ 463,
+ 464,
+ 465,
+ 466,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Julia[] =
+{
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Amara[] =
+{
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lynn[] =
+{
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459,
+ 460,
+ 461,
+ 462,
+ 463,
+ 464,
+ 465,
+ 466,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jovan[] =
+{
+ 238,
+ 331,
+ 343,
+ 368,
+ 369,
+ 375,
+ 376,
+ 379,
+ 382,
+ 383,
+ 389,
+ 394,
+ 395,
+ 397,
+ 398,
+ 400,
+ 406,
+ 408,
+ 411,
+ 416,
+ 417,
+ 423,
+ 424,
+ 425,
+ 432,
+ 436,
+ 438,
+ 441,
+ 445,
+ 453,
+ 460,
+ 462,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dominic[] =
+{
+ 238,
+ 331,
+ 343,
+ 368,
+ 369,
+ 375,
+ 376,
+ 379,
+ 382,
+ 383,
+ 389,
+ 394,
+ 395,
+ 397,
+ 398,
+ 400,
+ 406,
+ 408,
+ 411,
+ 416,
+ 417,
+ 423,
+ 424,
+ 425,
+ 432,
+ 436,
+ 438,
+ 441,
+ 445,
+ 453,
+ 460,
+ 462,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Nikolas[] =
+{
+ 238,
+ 331,
+ 343,
+ 368,
+ 369,
+ 375,
+ 376,
+ 379,
+ 382,
+ 383,
+ 389,
+ 394,
+ 395,
+ 397,
+ 398,
+ 400,
+ 406,
+ 408,
+ 411,
+ 416,
+ 417,
+ 423,
+ 424,
+ 425,
+ 432,
+ 436,
+ 438,
+ 441,
+ 445,
+ 453,
+ 460,
+ 462,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Valeria[] =
+{
+ 238,
+ 331,
+ 343,
+ 368,
+ 369,
+ 375,
+ 376,
+ 379,
+ 382,
+ 383,
+ 389,
+ 394,
+ 395,
+ 397,
+ 398,
+ 400,
+ 406,
+ 408,
+ 411,
+ 416,
+ 417,
+ 423,
+ 424,
+ 425,
+ 432,
+ 436,
+ 438,
+ 441,
+ 445,
+ 453,
+ 460,
+ 462,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Delaney[] =
+{
+ 238,
+ 331,
+ 343,
+ 368,
+ 369,
+ 375,
+ 376,
+ 379,
+ 382,
+ 383,
+ 389,
+ 394,
+ 395,
+ 397,
+ 398,
+ 400,
+ 406,
+ 408,
+ 411,
+ 416,
+ 417,
+ 423,
+ 424,
+ 425,
+ 432,
+ 436,
+ 438,
+ 441,
+ 445,
+ 453,
+ 460,
+ 462,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Meghan[] =
+{
+ 238,
+ 331,
+ 343,
+ 368,
+ 369,
+ 375,
+ 376,
+ 379,
+ 382,
+ 383,
+ 389,
+ 394,
+ 395,
+ 397,
+ 398,
+ 400,
+ 406,
+ 408,
+ 411,
+ 416,
+ 417,
+ 423,
+ 424,
+ 425,
+ 432,
+ 436,
+ 438,
+ 441,
+ 445,
+ 453,
+ 460,
+ 462,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Roberto[] =
+{
+ 386,
+ 403,
+ 412,
+ 413,
+ 414,
+ 433,
+ 435,
+ 440,
+ 450,
+ 453,
+ 454,
+ 456,
+ 459,
+ 461,
+ 463,
+ 464,
+ 465,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Damian[] =
+{
+ 386,
+ 403,
+ 412,
+ 413,
+ 414,
+ 433,
+ 435,
+ 440,
+ 450,
+ 453,
+ 454,
+ 456,
+ 459,
+ 461,
+ 463,
+ 464,
+ 465,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Brody[] =
+{
+ 386,
+ 403,
+ 412,
+ 413,
+ 414,
+ 433,
+ 435,
+ 440,
+ 450,
+ 453,
+ 454,
+ 456,
+ 459,
+ 461,
+ 463,
+ 464,
+ 465,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Graham[] =
+{
+ 386,
+ 403,
+ 412,
+ 413,
+ 414,
+ 433,
+ 435,
+ 440,
+ 450,
+ 453,
+ 454,
+ 456,
+ 459,
+ 461,
+ 463,
+ 464,
+ 465,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Tylor[] =
+{
+ 374,
+ 381,
+ 382,
+ 385,
+ 388,
+ 389,
+ 391,
+ 392,
+ 394,
+ 409,
+ 411,
+ 412,
+ 419,
+ 430,
+ 432,
+ 436,
+ 440,
+ 456,
+ 460,
+ 462,
+ 463,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jaren[] =
+{
+ 374,
+ 381,
+ 382,
+ 385,
+ 388,
+ 389,
+ 391,
+ 392,
+ 394,
+ 409,
+ 411,
+ 412,
+ 419,
+ 430,
+ 432,
+ 436,
+ 440,
+ 456,
+ 460,
+ 462,
+ 463,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Cordell[] =
+{
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459,
+ 460,
+ 461,
+ 462,
+ 463,
+ 464,
+ 465,
+ 466,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jazlyn[] =
+{
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Zachery[] =
+{
+ 468,
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Johan[] =
+{
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Shea[] =
+{
+ 468,
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kaila[] =
+{
+ 468,
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Isiah[] =
+{
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Garrett[] =
+{
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Haylie[] =
+{
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Megan[] =
+{
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Issac[] =
+{
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Quinton[] =
+{
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Salma[] =
+{
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ansley[] =
+{
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Holden[] =
+{
+ 343,
+ 368,
+ 369,
+ 383,
+ 417,
+ 423,
+ 424,
+ 432,
+ 480,
+ 481,
+ 490,
+ 491,
+ 494,
+ 496,
+ 512,
+ 513,
+ 519,
+ 520,
+ 528,
+ 534,
+ 537,
+ 541,
+ 549,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Luca[] =
+{
+ 343,
+ 368,
+ 369,
+ 383,
+ 417,
+ 423,
+ 424,
+ 432,
+ 480,
+ 481,
+ 490,
+ 491,
+ 494,
+ 496,
+ 512,
+ 513,
+ 519,
+ 520,
+ 528,
+ 534,
+ 537,
+ 541,
+ 549,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jamison[] =
+{
+ 282,
+ 331,
+ 343,
+ 368,
+ 369,
+ 469,
+ 472,
+ 475,
+ 476,
+ 478,
+ 481,
+ 484,
+ 490,
+ 491,
+ 497,
+ 500,
+ 501,
+ 509,
+ 510,
+ 513,
+ 516,
+ 517,
+ 519,
+ 520,
+ 524,
+ 528,
+ 530,
+ 533,
+ 534,
+ 537,
+ 542,
+ 553,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gunnar[] =
+{
+ 282,
+ 331,
+ 343,
+ 368,
+ 369,
+ 469,
+ 472,
+ 475,
+ 476,
+ 478,
+ 481,
+ 484,
+ 490,
+ 491,
+ 497,
+ 500,
+ 501,
+ 509,
+ 510,
+ 513,
+ 516,
+ 517,
+ 519,
+ 520,
+ 524,
+ 528,
+ 530,
+ 533,
+ 534,
+ 537,
+ 542,
+ 553,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Craig[] =
+{
+ 471,
+ 474,
+ 475,
+ 479,
+ 483,
+ 485,
+ 488,
+ 493,
+ 495,
+ 496,
+ 502,
+ 504,
+ 505,
+ 506,
+ 507,
+ 514,
+ 521,
+ 525,
+ 530,
+ 532,
+ 535,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Pierce[] =
+{
+ 471,
+ 474,
+ 475,
+ 479,
+ 483,
+ 485,
+ 488,
+ 493,
+ 495,
+ 496,
+ 502,
+ 504,
+ 505,
+ 506,
+ 507,
+ 514,
+ 521,
+ 525,
+ 530,
+ 532,
+ 535,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Regina[] =
+{
+ 471,
+ 474,
+ 475,
+ 479,
+ 483,
+ 485,
+ 488,
+ 493,
+ 495,
+ 496,
+ 502,
+ 504,
+ 505,
+ 506,
+ 507,
+ 514,
+ 521,
+ 525,
+ 530,
+ 532,
+ 535,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alison[] =
+{
+ 471,
+ 474,
+ 475,
+ 479,
+ 483,
+ 485,
+ 488,
+ 493,
+ 495,
+ 496,
+ 502,
+ 504,
+ 505,
+ 506,
+ 507,
+ 514,
+ 521,
+ 525,
+ 530,
+ 532,
+ 535,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Hank[] =
+{
+ 277,
+ 278,
+ 282,
+ 303,
+ 331,
+ 343,
+ 368,
+ 369,
+ 383,
+ 417,
+ 423,
+ 424,
+ 432,
+ 481,
+ 513,
+ 519,
+ 520,
+ 528,
+ 575,
+ 609,
+ 615,
+ 616,
+ 624,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Earl[] =
+{
+ 277,
+ 278,
+ 282,
+ 303,
+ 331,
+ 343,
+ 368,
+ 369,
+ 383,
+ 417,
+ 423,
+ 424,
+ 432,
+ 481,
+ 513,
+ 519,
+ 520,
+ 528,
+ 575,
+ 609,
+ 615,
+ 616,
+ 624,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ramiro[] =
+{
+ 316,
+ 333,
+ 347,
+ 350,
+ 354,
+ 358,
+ 361,
+ 362,
+ 363,
+ 364,
+ 573,
+ 576,
+ 621,
+ 626,
+ 631,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Hunter[] =
+{
+ 316,
+ 333,
+ 347,
+ 350,
+ 354,
+ 358,
+ 361,
+ 362,
+ 363,
+ 364,
+ 573,
+ 576,
+ 621,
+ 626,
+ 631,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Aiden[] =
+{
+ 564,
+ 575,
+ 576,
+ 578,
+ 579,
+ 580,
+ 594,
+ 595,
+ 605,
+ 606,
+ 608,
+ 609,
+ 615,
+ 619,
+ 620,
+ 624,
+ 625,
+ 627,
+ 632,
+ 642,
+ 650,
+ 658,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Xavier[] =
+{
+ 564,
+ 575,
+ 576,
+ 578,
+ 579,
+ 580,
+ 594,
+ 595,
+ 605,
+ 606,
+ 608,
+ 609,
+ 615,
+ 619,
+ 620,
+ 624,
+ 625,
+ 627,
+ 632,
+ 642,
+ 650,
+ 658,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Clinton[] =
+{
+ 564,
+ 565,
+ 566,
+ 567,
+ 568,
+ 569,
+ 570,
+ 571,
+ 572,
+ 573,
+ 574,
+ 575,
+ 576,
+ 577,
+ 578,
+ 579,
+ 580,
+ 581,
+ 582,
+ 583,
+ 584,
+ 585,
+ 586,
+ 587,
+ 588,
+ 589,
+ 590,
+ 591,
+ 592,
+ 593,
+ 594,
+ 595,
+ 596,
+ 597,
+ 598,
+ 599,
+ 600,
+ 601,
+ 602,
+ 603,
+ 604,
+ 605,
+ 606,
+ 607,
+ 608,
+ 609,
+ 610,
+ 611,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jesse[] =
+{
+ 564,
+ 565,
+ 566,
+ 567,
+ 568,
+ 569,
+ 570,
+ 571,
+ 572,
+ 573,
+ 574,
+ 575,
+ 576,
+ 577,
+ 578,
+ 579,
+ 580,
+ 581,
+ 582,
+ 583,
+ 584,
+ 585,
+ 586,
+ 587,
+ 588,
+ 589,
+ 590,
+ 591,
+ 592,
+ 593,
+ 594,
+ 595,
+ 596,
+ 597,
+ 598,
+ 599,
+ 600,
+ 601,
+ 602,
+ 603,
+ 604,
+ 605,
+ 606,
+ 607,
+ 608,
+ 609,
+ 610,
+ 611,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Eduardo[] =
+{
+ 268,
+ 307,
+ 317,
+ 349,
+ 352,
+ 573,
+ 583,
+ 585,
+ 588,
+ 590,
+ 599,
+ 614,
+ 618,
+ 635,
+ 639,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Hal[] =
+{
+ 268,
+ 307,
+ 317,
+ 349,
+ 352,
+ 573,
+ 583,
+ 585,
+ 588,
+ 590,
+ 599,
+ 614,
+ 618,
+ 635,
+ 639,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gage[] =
+{
+ 289,
+ 318,
+ 319,
+ 329,
+ 355,
+ 375,
+ 379,
+ 385,
+ 386,
+ 457,
+ 473,
+ 477,
+ 482,
+ 484,
+ 553,
+ 567,
+ 571,
+ 577,
+ 578,
+ 649,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Arnold[] =
+{
+ 289,
+ 318,
+ 319,
+ 329,
+ 355,
+ 375,
+ 379,
+ 385,
+ 386,
+ 457,
+ 473,
+ 477,
+ 482,
+ 484,
+ 553,
+ 567,
+ 571,
+ 577,
+ 578,
+ 649,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jarrett[] =
+{
+ 565,
+ 573,
+ 576,
+ 580,
+ 582,
+ 584,
+ 592,
+ 601,
+ 602,
+ 610,
+ 621,
+ 623,
+ 626,
+ 631,
+ 634,
+ 640,
+ 641,
+ 644,
+ 648,
+ 650,
+ 651,
+ 653,
+ 655,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Garett[] =
+{
+ 565,
+ 573,
+ 576,
+ 580,
+ 582,
+ 584,
+ 592,
+ 601,
+ 602,
+ 610,
+ 621,
+ 623,
+ 626,
+ 631,
+ 634,
+ 640,
+ 641,
+ 644,
+ 648,
+ 650,
+ 651,
+ 653,
+ 655,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Emanuel[] =
+{
+ 564,
+ 565,
+ 574,
+ 579,
+ 582,
+ 594,
+ 595,
+ 605,
+ 606,
+ 608,
+ 609,
+ 616,
+ 619,
+ 620,
+ 623,
+ 624,
+ 625,
+ 627,
+ 642,
+ 643,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gustavo[] =
+{
+ 564,
+ 565,
+ 574,
+ 579,
+ 582,
+ 594,
+ 595,
+ 605,
+ 606,
+ 608,
+ 609,
+ 616,
+ 619,
+ 620,
+ 623,
+ 624,
+ 625,
+ 627,
+ 642,
+ 643,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kameron[] =
+{
+ 568,
+ 581,
+ 589,
+ 598,
+ 600,
+ 603,
+ 607,
+ 611,
+ 617,
+ 618,
+ 622,
+ 636,
+ 643,
+ 646,
+ 647,
+ 652,
+ 654,
+ 656,
+ 659,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alfredo[] =
+{
+ 568,
+ 581,
+ 589,
+ 598,
+ 600,
+ 603,
+ 607,
+ 611,
+ 617,
+ 618,
+ 622,
+ 636,
+ 643,
+ 646,
+ 647,
+ 652,
+ 654,
+ 656,
+ 659,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ruben[] =
+{
+ 612,
+ 613,
+ 614,
+ 615,
+ 616,
+ 617,
+ 618,
+ 619,
+ 620,
+ 621,
+ 622,
+ 623,
+ 624,
+ 625,
+ 626,
+ 627,
+ 628,
+ 629,
+ 630,
+ 631,
+ 632,
+ 633,
+ 634,
+ 635,
+ 636,
+ 637,
+ 638,
+ 639,
+ 640,
+ 641,
+ 642,
+ 643,
+ 644,
+ 645,
+ 646,
+ 647,
+ 648,
+ 649,
+ 650,
+ 651,
+ 652,
+ 653,
+ 654,
+ 655,
+ 656,
+ 657,
+ 658,
+ 659,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lamar[] =
+{
+ 612,
+ 613,
+ 614,
+ 615,
+ 616,
+ 617,
+ 618,
+ 619,
+ 620,
+ 621,
+ 622,
+ 623,
+ 624,
+ 625,
+ 626,
+ 627,
+ 628,
+ 629,
+ 630,
+ 631,
+ 632,
+ 633,
+ 634,
+ 635,
+ 636,
+ 637,
+ 638,
+ 639,
+ 640,
+ 641,
+ 642,
+ 643,
+ 644,
+ 645,
+ 646,
+ 647,
+ 648,
+ 649,
+ 650,
+ 651,
+ 652,
+ 653,
+ 654,
+ 655,
+ 656,
+ 657,
+ 658,
+ 659,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jaxon[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Logan[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Emilee[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Josie[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Armando[] =
+{
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Skyler[] =
+{
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ruth[] =
+{
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Melody[] =
+{
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Pedro[] =
+{
+ 347,
+ 661,
+ 664,
+ 669,
+ 672,
+ 676,
+ 677,
+ 678,
+ 680,
+ 685,
+ 688,
+ 694,
+ 696,
+ 697,
+ 698,
+ 699,
+ 706,
+ 713,
+ 717,
+ 719,
+ 722,
+ 724,
+ 727,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Erick[] =
+{
+ 347,
+ 661,
+ 664,
+ 669,
+ 672,
+ 676,
+ 677,
+ 678,
+ 680,
+ 685,
+ 688,
+ 694,
+ 696,
+ 697,
+ 698,
+ 699,
+ 706,
+ 713,
+ 717,
+ 719,
+ 722,
+ 724,
+ 727,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Elaine[] =
+{
+ 664,
+ 665,
+ 669,
+ 672,
+ 676,
+ 677,
+ 680,
+ 685,
+ 687,
+ 688,
+ 694,
+ 696,
+ 697,
+ 698,
+ 699,
+ 706,
+ 713,
+ 717,
+ 722,
+ 724,
+ 727,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Joyce[] =
+{
+ 664,
+ 665,
+ 669,
+ 672,
+ 676,
+ 677,
+ 680,
+ 685,
+ 687,
+ 688,
+ 694,
+ 696,
+ 697,
+ 698,
+ 699,
+ 706,
+ 713,
+ 717,
+ 722,
+ 724,
+ 727,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Todd[] =
+{
+ 267,
+ 273,
+ 305,
+ 312,
+ 325,
+ 332,
+ 352,
+ 662,
+ 665,
+ 668,
+ 669,
+ 670,
+ 672,
+ 673,
+ 676,
+ 677,
+ 679,
+ 680,
+ 682,
+ 688,
+ 697,
+ 698,
+ 699,
+ 700,
+ 707,
+ 710,
+ 718,
+ 720,
+ 724,
+ 725,
+ 728,
+ 730,
+ 731,
+ 732,
+ 734,
+ 735,
+ 744,
+ 748,
+ 750,
+ 751,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gavin[] =
+{
+ 267,
+ 273,
+ 305,
+ 312,
+ 325,
+ 332,
+ 352,
+ 662,
+ 665,
+ 668,
+ 669,
+ 670,
+ 672,
+ 673,
+ 676,
+ 677,
+ 679,
+ 680,
+ 682,
+ 688,
+ 697,
+ 698,
+ 699,
+ 700,
+ 707,
+ 710,
+ 718,
+ 720,
+ 724,
+ 725,
+ 728,
+ 730,
+ 731,
+ 732,
+ 734,
+ 735,
+ 744,
+ 748,
+ 750,
+ 751,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Malory[] =
+{
+ 267,
+ 273,
+ 305,
+ 312,
+ 325,
+ 332,
+ 352,
+ 662,
+ 665,
+ 668,
+ 669,
+ 670,
+ 672,
+ 673,
+ 676,
+ 677,
+ 679,
+ 680,
+ 682,
+ 688,
+ 697,
+ 698,
+ 699,
+ 700,
+ 707,
+ 710,
+ 718,
+ 720,
+ 724,
+ 725,
+ 728,
+ 730,
+ 731,
+ 732,
+ 734,
+ 735,
+ 744,
+ 748,
+ 750,
+ 751,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Esther[] =
+{
+ 267,
+ 273,
+ 305,
+ 312,
+ 325,
+ 332,
+ 352,
+ 662,
+ 665,
+ 668,
+ 669,
+ 670,
+ 672,
+ 673,
+ 676,
+ 677,
+ 679,
+ 680,
+ 682,
+ 688,
+ 697,
+ 698,
+ 699,
+ 700,
+ 707,
+ 710,
+ 718,
+ 720,
+ 724,
+ 725,
+ 728,
+ 730,
+ 731,
+ 732,
+ 734,
+ 735,
+ 744,
+ 748,
+ 750,
+ 751,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Oscar[] =
+{
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Wilson[] =
+{
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Clare[] =
+{
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Tess[] =
+{
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Leon[] =
+{
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 612,
+ 613,
+ 614,
+ 615,
+ 616,
+ 617,
+ 618,
+ 619,
+ 620,
+ 621,
+ 622,
+ 623,
+ 624,
+ 625,
+ 626,
+ 627,
+ 628,
+ 629,
+ 630,
+ 631,
+ 632,
+ 633,
+ 634,
+ 635,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alonzo[] =
+{
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459,
+ 460,
+ 461,
+ 462,
+ 463,
+ 464,
+ 465,
+ 466,
+ 467,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ 636,
+ 637,
+ 638,
+ 639,
+ 640,
+ 641,
+ 642,
+ 643,
+ 644,
+ 645,
+ 646,
+ 647,
+ 648,
+ 649,
+ 650,
+ 651,
+ 652,
+ 653,
+ 654,
+ 655,
+ 656,
+ 657,
+ 658,
+ 659,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Vince[] =
+{
+ 421,
+ 425,
+ 431,
+ 437,
+ 439,
+ 456,
+ 460,
+ 465,
+ 466,
+ 517,
+ 521,
+ 527,
+ 533,
+ 535,
+ 552,
+ 556,
+ 561,
+ 562,
+ 613,
+ 617,
+ 623,
+ 629,
+ 631,
+ 648,
+ 652,
+ 657,
+ 658,
+ 709,
+ 713,
+ 719,
+ 725,
+ 727,
+ 744,
+ 748,
+ 753,
+ 754,
+ 766,
+ 777,
+ 788,
+ 799,
+ 800,
+ 801,
+ 802,
+ 803,
+ 804,
+ 805,
+ 806,
+ 807,
+ 808,
+ 809,
+ 810,
+ 811,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 820,
+ 821,
+ 822,
+ 823,
+ 824,
+ 825,
+ 826,
+ 827,
+ 828,
+ 829,
+ 830,
+ 831,
+ 832,
+ 833,
+ 834,
+ 835,
+ 846,
+ 847,
+ 848,
+ 849,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Bryon[] =
+{
+ 756,
+ 757,
+ 758,
+ 759,
+ 760,
+ 761,
+ 762,
+ 763,
+ 764,
+ 766,
+ 767,
+ 768,
+ 769,
+ 770,
+ 771,
+ 772,
+ 773,
+ 774,
+ 775,
+ 777,
+ 778,
+ 779,
+ 780,
+ 781,
+ 782,
+ 783,
+ 784,
+ 785,
+ 786,
+ 788,
+ 789,
+ 790,
+ 791,
+ 792,
+ 793,
+ 794,
+ 795,
+ 796,
+ 797,
+ 799,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 846,
+ 847,
+ 848,
+ 849,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ava[] =
+{
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 468,
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 564,
+ 565,
+ 566,
+ 567,
+ 568,
+ 569,
+ 570,
+ 571,
+ 572,
+ 573,
+ 574,
+ 575,
+ 576,
+ 577,
+ 578,
+ 579,
+ 580,
+ 581,
+ 582,
+ 583,
+ 584,
+ 585,
+ 586,
+ 587,
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Miriam[] =
+{
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 588,
+ 589,
+ 590,
+ 591,
+ 592,
+ 593,
+ 594,
+ 595,
+ 596,
+ 597,
+ 598,
+ 599,
+ 600,
+ 601,
+ 602,
+ 603,
+ 604,
+ 605,
+ 606,
+ 607,
+ 608,
+ 609,
+ 610,
+ 611,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Carrie[] =
+{
+ 421,
+ 425,
+ 431,
+ 437,
+ 439,
+ 456,
+ 460,
+ 465,
+ 466,
+ 517,
+ 521,
+ 527,
+ 533,
+ 535,
+ 552,
+ 556,
+ 561,
+ 562,
+ 613,
+ 617,
+ 623,
+ 629,
+ 631,
+ 648,
+ 652,
+ 657,
+ 658,
+ 709,
+ 713,
+ 719,
+ 725,
+ 727,
+ 744,
+ 748,
+ 753,
+ 754,
+ 765,
+ 776,
+ 787,
+ 798,
+ 800,
+ 801,
+ 802,
+ 803,
+ 804,
+ 805,
+ 806,
+ 807,
+ 808,
+ 809,
+ 810,
+ 811,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 820,
+ 821,
+ 822,
+ 823,
+ 824,
+ 825,
+ 826,
+ 827,
+ 828,
+ 829,
+ 830,
+ 831,
+ 832,
+ 833,
+ 834,
+ 835,
+ 842,
+ 843,
+ 844,
+ 845,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gillian2[] =
+{
+ 756,
+ 757,
+ 758,
+ 759,
+ 760,
+ 761,
+ 762,
+ 763,
+ 764,
+ 765,
+ 767,
+ 768,
+ 769,
+ 770,
+ 771,
+ 772,
+ 773,
+ 774,
+ 775,
+ 776,
+ 778,
+ 779,
+ 780,
+ 781,
+ 782,
+ 783,
+ 784,
+ 785,
+ 786,
+ 787,
+ 789,
+ 790,
+ 791,
+ 792,
+ 793,
+ 794,
+ 795,
+ 796,
+ 797,
+ 798,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 842,
+ 843,
+ 844,
+ 845,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Tyler[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Chaz[] =
+{
+ 564,
+ 565,
+ 566,
+ 567,
+ 568,
+ 569,
+ 570,
+ 571,
+ 572,
+ 573,
+ 574,
+ 575,
+ 576,
+ 577,
+ 578,
+ 579,
+ 580,
+ 581,
+ 582,
+ 583,
+ 584,
+ 585,
+ 586,
+ 587,
+ 588,
+ 589,
+ 590,
+ 591,
+ 592,
+ 593,
+ 594,
+ 595,
+ 596,
+ 597,
+ 598,
+ 599,
+ 600,
+ 601,
+ 602,
+ 603,
+ 604,
+ 605,
+ 606,
+ 607,
+ 608,
+ 609,
+ 610,
+ 611,
+ 612,
+ 613,
+ 614,
+ 615,
+ 616,
+ 617,
+ 618,
+ 619,
+ 620,
+ 621,
+ 622,
+ 623,
+ 624,
+ 625,
+ 626,
+ 627,
+ 628,
+ 629,
+ 630,
+ 631,
+ 632,
+ 633,
+ 634,
+ 635,
+ 636,
+ 637,
+ 638,
+ 639,
+ 640,
+ 641,
+ 642,
+ 643,
+ 644,
+ 645,
+ 646,
+ 647,
+ 648,
+ 649,
+ 650,
+ 651,
+ 652,
+ 653,
+ 654,
+ 655,
+ 656,
+ 657,
+ 658,
+ 659,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Nelson[] =
+{
+ 756,
+ 757,
+ 758,
+ 759,
+ 760,
+ 761,
+ 762,
+ 763,
+ 764,
+ 766,
+ 767,
+ 768,
+ 769,
+ 770,
+ 771,
+ 772,
+ 773,
+ 774,
+ 775,
+ 777,
+ 778,
+ 779,
+ 780,
+ 781,
+ 782,
+ 783,
+ 784,
+ 785,
+ 786,
+ 788,
+ 789,
+ 790,
+ 791,
+ 792,
+ 793,
+ 794,
+ 795,
+ 796,
+ 797,
+ 799,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 846,
+ 847,
+ 848,
+ 849,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Shania[] =
+{
+ 468,
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Stella[] =
+{
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459,
+ 460,
+ 461,
+ 462,
+ 463,
+ 464,
+ 465,
+ 466,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dorine[] =
+{
+ 756,
+ 757,
+ 758,
+ 759,
+ 760,
+ 761,
+ 762,
+ 763,
+ 764,
+ 765,
+ 767,
+ 768,
+ 769,
+ 770,
+ 771,
+ 772,
+ 773,
+ 774,
+ 775,
+ 776,
+ 778,
+ 779,
+ 780,
+ 781,
+ 782,
+ 783,
+ 784,
+ 785,
+ 786,
+ 787,
+ 789,
+ 790,
+ 791,
+ 792,
+ 793,
+ 794,
+ 795,
+ 796,
+ 797,
+ 798,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 842,
+ 843,
+ 844,
+ 845,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Maddox[] =
+{
+ 403,
+ 412,
+ 413,
+ 414,
+ 433,
+ 435,
+ 440,
+ 450,
+ 454,
+ 456,
+ 459,
+ 461,
+ 463,
+ 465,
+ 499,
+ 508,
+ 509,
+ 510,
+ 529,
+ 531,
+ 536,
+ 546,
+ 550,
+ 552,
+ 555,
+ 557,
+ 559,
+ 561,
+ 595,
+ 604,
+ 605,
+ 606,
+ 625,
+ 627,
+ 632,
+ 642,
+ 646,
+ 648,
+ 651,
+ 653,
+ 655,
+ 657,
+ 691,
+ 700,
+ 701,
+ 702,
+ 721,
+ 723,
+ 728,
+ 738,
+ 742,
+ 744,
+ 747,
+ 749,
+ 751,
+ 753,
+ 765,
+ 766,
+ 776,
+ 777,
+ 787,
+ 788,
+ 798,
+ 799,
+ 828,
+ 829,
+ 830,
+ 831,
+ 842,
+ 843,
+ 844,
+ 845,
+ 846,
+ 847,
+ 848,
+ 849,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Davin[] =
+{
+ 403,
+ 412,
+ 413,
+ 414,
+ 433,
+ 435,
+ 440,
+ 450,
+ 454,
+ 456,
+ 459,
+ 461,
+ 463,
+ 465,
+ 499,
+ 508,
+ 509,
+ 510,
+ 529,
+ 531,
+ 536,
+ 546,
+ 550,
+ 552,
+ 555,
+ 557,
+ 559,
+ 561,
+ 595,
+ 604,
+ 605,
+ 606,
+ 625,
+ 627,
+ 632,
+ 642,
+ 646,
+ 648,
+ 651,
+ 653,
+ 655,
+ 657,
+ 691,
+ 700,
+ 701,
+ 702,
+ 721,
+ 723,
+ 728,
+ 738,
+ 742,
+ 744,
+ 747,
+ 749,
+ 751,
+ 753,
+ 765,
+ 766,
+ 776,
+ 777,
+ 787,
+ 788,
+ 798,
+ 799,
+ 828,
+ 829,
+ 830,
+ 831,
+ 842,
+ 843,
+ 844,
+ 845,
+ 846,
+ 847,
+ 848,
+ 849,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Trevon[] =
+{
+ 403,
+ 412,
+ 413,
+ 414,
+ 433,
+ 435,
+ 440,
+ 450,
+ 454,
+ 456,
+ 459,
+ 461,
+ 463,
+ 465,
+ 499,
+ 508,
+ 509,
+ 510,
+ 529,
+ 531,
+ 536,
+ 546,
+ 550,
+ 552,
+ 555,
+ 557,
+ 559,
+ 561,
+ 595,
+ 604,
+ 605,
+ 606,
+ 625,
+ 627,
+ 632,
+ 642,
+ 646,
+ 648,
+ 651,
+ 653,
+ 655,
+ 657,
+ 691,
+ 700,
+ 701,
+ 702,
+ 721,
+ 723,
+ 728,
+ 738,
+ 742,
+ 744,
+ 747,
+ 749,
+ 751,
+ 753,
+ 765,
+ 766,
+ 776,
+ 777,
+ 787,
+ 788,
+ 798,
+ 799,
+ 828,
+ 829,
+ 830,
+ 831,
+ 842,
+ 843,
+ 844,
+ 845,
+ 846,
+ 847,
+ 848,
+ 849,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Mateo[] =
+{
+ 373,
+ 382,
+ 390,
+ 402,
+ 403,
+ 416,
+ 417,
+ 424,
+ 431,
+ 432,
+ 435,
+ 450,
+ 451,
+ 469,
+ 480,
+ 486,
+ 498,
+ 499,
+ 512,
+ 513,
+ 520,
+ 527,
+ 528,
+ 531,
+ 546,
+ 547,
+ 565,
+ 574,
+ 582,
+ 594,
+ 595,
+ 608,
+ 609,
+ 616,
+ 623,
+ 624,
+ 627,
+ 642,
+ 643,
+ 661,
+ 670,
+ 678,
+ 690,
+ 691,
+ 704,
+ 705,
+ 712,
+ 719,
+ 720,
+ 723,
+ 738,
+ 739,
+ 808,
+ 809,
+ 810,
+ 811,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Bret[] =
+{
+ 373,
+ 382,
+ 390,
+ 415,
+ 419,
+ 424,
+ 426,
+ 430,
+ 431,
+ 444,
+ 451,
+ 454,
+ 455,
+ 464,
+ 469,
+ 480,
+ 486,
+ 511,
+ 515,
+ 520,
+ 522,
+ 526,
+ 527,
+ 540,
+ 547,
+ 550,
+ 551,
+ 560,
+ 565,
+ 574,
+ 582,
+ 607,
+ 611,
+ 616,
+ 618,
+ 622,
+ 623,
+ 636,
+ 643,
+ 646,
+ 647,
+ 656,
+ 661,
+ 670,
+ 678,
+ 703,
+ 707,
+ 712,
+ 714,
+ 718,
+ 719,
+ 732,
+ 739,
+ 742,
+ 743,
+ 752,
+ 808,
+ 809,
+ 810,
+ 811,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Raul[] =
+{
+ 373,
+ 382,
+ 383,
+ 386,
+ 390,
+ 423,
+ 424,
+ 431,
+ 433,
+ 450,
+ 451,
+ 466,
+ 469,
+ 480,
+ 481,
+ 482,
+ 486,
+ 519,
+ 520,
+ 527,
+ 529,
+ 546,
+ 547,
+ 562,
+ 565,
+ 574,
+ 575,
+ 578,
+ 582,
+ 615,
+ 616,
+ 623,
+ 625,
+ 642,
+ 643,
+ 658,
+ 661,
+ 670,
+ 671,
+ 674,
+ 678,
+ 711,
+ 712,
+ 719,
+ 721,
+ 738,
+ 739,
+ 754,
+ 808,
+ 809,
+ 810,
+ 811,
+ 832,
+ 833,
+ 834,
+ 835,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Kay[] =
+{
+ 373,
+ 382,
+ 387,
+ 390,
+ 402,
+ 403,
+ 413,
+ 414,
+ 424,
+ 427,
+ 431,
+ 433,
+ 451,
+ 469,
+ 470,
+ 480,
+ 486,
+ 498,
+ 499,
+ 509,
+ 510,
+ 520,
+ 523,
+ 527,
+ 529,
+ 547,
+ 565,
+ 574,
+ 579,
+ 582,
+ 594,
+ 595,
+ 605,
+ 606,
+ 616,
+ 619,
+ 623,
+ 625,
+ 643,
+ 661,
+ 670,
+ 675,
+ 678,
+ 690,
+ 691,
+ 701,
+ 702,
+ 712,
+ 715,
+ 719,
+ 721,
+ 739,
+ 808,
+ 809,
+ 810,
+ 811,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Elena[] =
+{
+ 373,
+ 382,
+ 390,
+ 415,
+ 419,
+ 424,
+ 426,
+ 430,
+ 431,
+ 444,
+ 451,
+ 454,
+ 455,
+ 464,
+ 469,
+ 480,
+ 486,
+ 511,
+ 515,
+ 520,
+ 522,
+ 526,
+ 527,
+ 540,
+ 547,
+ 550,
+ 551,
+ 560,
+ 565,
+ 574,
+ 582,
+ 607,
+ 611,
+ 616,
+ 618,
+ 622,
+ 623,
+ 636,
+ 643,
+ 646,
+ 647,
+ 656,
+ 661,
+ 670,
+ 678,
+ 703,
+ 707,
+ 712,
+ 714,
+ 718,
+ 719,
+ 732,
+ 739,
+ 742,
+ 743,
+ 752,
+ 808,
+ 809,
+ 810,
+ 811,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alana[] =
+{
+ 373,
+ 382,
+ 383,
+ 386,
+ 390,
+ 423,
+ 424,
+ 431,
+ 433,
+ 450,
+ 451,
+ 466,
+ 469,
+ 480,
+ 481,
+ 482,
+ 486,
+ 519,
+ 520,
+ 527,
+ 529,
+ 546,
+ 547,
+ 562,
+ 565,
+ 574,
+ 575,
+ 578,
+ 582,
+ 615,
+ 616,
+ 623,
+ 625,
+ 642,
+ 643,
+ 658,
+ 661,
+ 670,
+ 671,
+ 674,
+ 678,
+ 711,
+ 712,
+ 719,
+ 721,
+ 738,
+ 739,
+ 754,
+ 808,
+ 809,
+ 810,
+ 811,
+ 832,
+ 833,
+ 834,
+ 835,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alexas[] =
+{
+ 382,
+ 387,
+ 403,
+ 423,
+ 424,
+ 425,
+ 431,
+ 433,
+ 435,
+ 450,
+ 459,
+ 461,
+ 465,
+ 466,
+ 470,
+ 480,
+ 499,
+ 519,
+ 520,
+ 521,
+ 527,
+ 529,
+ 531,
+ 546,
+ 555,
+ 557,
+ 561,
+ 562,
+ 574,
+ 579,
+ 595,
+ 615,
+ 616,
+ 617,
+ 623,
+ 625,
+ 627,
+ 642,
+ 651,
+ 653,
+ 657,
+ 658,
+ 670,
+ 675,
+ 691,
+ 711,
+ 712,
+ 713,
+ 719,
+ 721,
+ 723,
+ 738,
+ 747,
+ 749,
+ 753,
+ 754,
+ 762,
+ 763,
+ 764,
+ 773,
+ 774,
+ 775,
+ 784,
+ 785,
+ 786,
+ 795,
+ 796,
+ 797,
+ 804,
+ 805,
+ 806,
+ 807,
+ 808,
+ 809,
+ 810,
+ 811,
+ 828,
+ 829,
+ 830,
+ 831,
+ 832,
+ 833,
+ 834,
+ 835,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Weston[] =
+{
+ 374,
+ 377,
+ 404,
+ 421,
+ 422,
+ 426,
+ 437,
+ 439,
+ 446,
+ 451,
+ 453,
+ 457,
+ 458,
+ 472,
+ 475,
+ 500,
+ 517,
+ 518,
+ 522,
+ 533,
+ 535,
+ 542,
+ 547,
+ 549,
+ 553,
+ 554,
+ 566,
+ 569,
+ 596,
+ 613,
+ 614,
+ 618,
+ 629,
+ 631,
+ 638,
+ 643,
+ 645,
+ 649,
+ 650,
+ 662,
+ 665,
+ 692,
+ 709,
+ 710,
+ 714,
+ 725,
+ 727,
+ 734,
+ 739,
+ 741,
+ 745,
+ 746,
+ 762,
+ 763,
+ 764,
+ 766,
+ 773,
+ 774,
+ 775,
+ 777,
+ 784,
+ 785,
+ 786,
+ 788,
+ 795,
+ 796,
+ 797,
+ 799,
+ 800,
+ 801,
+ 802,
+ 803,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 846,
+ 847,
+ 848,
+ 849,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jasper[] =
+{
+ 378,
+ 388,
+ 400,
+ 409,
+ 410,
+ 411,
+ 416,
+ 429,
+ 432,
+ 438,
+ 447,
+ 452,
+ 456,
+ 460,
+ 462,
+ 463,
+ 471,
+ 476,
+ 496,
+ 505,
+ 506,
+ 507,
+ 512,
+ 525,
+ 528,
+ 534,
+ 543,
+ 548,
+ 552,
+ 556,
+ 558,
+ 559,
+ 570,
+ 580,
+ 592,
+ 601,
+ 602,
+ 603,
+ 608,
+ 621,
+ 624,
+ 630,
+ 639,
+ 644,
+ 648,
+ 652,
+ 654,
+ 655,
+ 666,
+ 676,
+ 688,
+ 697,
+ 698,
+ 699,
+ 704,
+ 717,
+ 720,
+ 726,
+ 735,
+ 740,
+ 744,
+ 748,
+ 750,
+ 751,
+ 762,
+ 763,
+ 764,
+ 773,
+ 774,
+ 775,
+ 784,
+ 785,
+ 786,
+ 795,
+ 796,
+ 797,
+ 820,
+ 821,
+ 822,
+ 823,
+ 824,
+ 825,
+ 826,
+ 827,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Nadia[] =
+{
+ 382,
+ 387,
+ 403,
+ 423,
+ 424,
+ 425,
+ 431,
+ 433,
+ 435,
+ 450,
+ 459,
+ 461,
+ 465,
+ 466,
+ 470,
+ 480,
+ 499,
+ 519,
+ 520,
+ 521,
+ 527,
+ 529,
+ 531,
+ 546,
+ 555,
+ 557,
+ 561,
+ 562,
+ 574,
+ 579,
+ 595,
+ 615,
+ 616,
+ 617,
+ 623,
+ 625,
+ 627,
+ 642,
+ 651,
+ 653,
+ 657,
+ 658,
+ 670,
+ 675,
+ 691,
+ 711,
+ 712,
+ 713,
+ 719,
+ 721,
+ 723,
+ 738,
+ 747,
+ 749,
+ 753,
+ 754,
+ 762,
+ 763,
+ 764,
+ 773,
+ 774,
+ 775,
+ 784,
+ 785,
+ 786,
+ 795,
+ 796,
+ 797,
+ 804,
+ 805,
+ 806,
+ 807,
+ 808,
+ 809,
+ 810,
+ 811,
+ 828,
+ 829,
+ 830,
+ 831,
+ 832,
+ 833,
+ 834,
+ 835,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Miranda[] =
+{
+ 374,
+ 377,
+ 404,
+ 421,
+ 422,
+ 426,
+ 437,
+ 439,
+ 446,
+ 451,
+ 453,
+ 457,
+ 458,
+ 472,
+ 475,
+ 500,
+ 517,
+ 518,
+ 522,
+ 533,
+ 535,
+ 542,
+ 547,
+ 549,
+ 553,
+ 554,
+ 566,
+ 569,
+ 596,
+ 613,
+ 614,
+ 618,
+ 629,
+ 631,
+ 638,
+ 643,
+ 645,
+ 649,
+ 650,
+ 662,
+ 665,
+ 692,
+ 709,
+ 710,
+ 714,
+ 725,
+ 727,
+ 734,
+ 739,
+ 741,
+ 745,
+ 746,
+ 762,
+ 763,
+ 764,
+ 765,
+ 773,
+ 774,
+ 775,
+ 776,
+ 784,
+ 785,
+ 786,
+ 787,
+ 795,
+ 796,
+ 797,
+ 798,
+ 800,
+ 801,
+ 802,
+ 803,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 842,
+ 843,
+ 844,
+ 845,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Emma[] =
+{
+ 378,
+ 388,
+ 400,
+ 409,
+ 410,
+ 411,
+ 416,
+ 429,
+ 432,
+ 438,
+ 447,
+ 452,
+ 456,
+ 460,
+ 462,
+ 463,
+ 471,
+ 476,
+ 496,
+ 505,
+ 506,
+ 507,
+ 512,
+ 525,
+ 528,
+ 534,
+ 543,
+ 548,
+ 552,
+ 556,
+ 558,
+ 559,
+ 570,
+ 580,
+ 592,
+ 601,
+ 602,
+ 603,
+ 608,
+ 621,
+ 624,
+ 630,
+ 639,
+ 644,
+ 648,
+ 652,
+ 654,
+ 655,
+ 666,
+ 676,
+ 688,
+ 697,
+ 698,
+ 699,
+ 704,
+ 717,
+ 720,
+ 726,
+ 735,
+ 740,
+ 744,
+ 748,
+ 750,
+ 751,
+ 762,
+ 763,
+ 764,
+ 773,
+ 774,
+ 775,
+ 784,
+ 785,
+ 786,
+ 795,
+ 796,
+ 797,
+ 820,
+ 821,
+ 822,
+ 823,
+ 824,
+ 825,
+ 826,
+ 827,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Rolando[] =
+{
+ 185,
+ 290,
+ 377,
+ 380,
+ 385,
+ 401,
+ 404,
+ 409,
+ 410,
+ 428,
+ 437,
+ 438,
+ 439,
+ 446,
+ 466,
+ 475,
+ 478,
+ 484,
+ 497,
+ 500,
+ 505,
+ 506,
+ 524,
+ 533,
+ 534,
+ 535,
+ 542,
+ 562,
+ 569,
+ 572,
+ 577,
+ 593,
+ 596,
+ 601,
+ 602,
+ 620,
+ 629,
+ 630,
+ 631,
+ 638,
+ 658,
+ 665,
+ 668,
+ 673,
+ 689,
+ 692,
+ 697,
+ 698,
+ 716,
+ 725,
+ 726,
+ 727,
+ 734,
+ 754,
+ 756,
+ 757,
+ 758,
+ 766,
+ 767,
+ 768,
+ 769,
+ 777,
+ 778,
+ 779,
+ 780,
+ 788,
+ 789,
+ 790,
+ 791,
+ 799,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 832,
+ 833,
+ 834,
+ 835,
+ 846,
+ 847,
+ 848,
+ 849,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Stanly[] =
+{
+ 185,
+ 290,
+ 377,
+ 380,
+ 385,
+ 401,
+ 404,
+ 409,
+ 410,
+ 428,
+ 437,
+ 438,
+ 439,
+ 446,
+ 466,
+ 475,
+ 478,
+ 484,
+ 497,
+ 500,
+ 505,
+ 506,
+ 524,
+ 533,
+ 534,
+ 535,
+ 542,
+ 562,
+ 569,
+ 572,
+ 577,
+ 593,
+ 596,
+ 601,
+ 602,
+ 620,
+ 629,
+ 630,
+ 631,
+ 638,
+ 658,
+ 665,
+ 668,
+ 673,
+ 689,
+ 692,
+ 697,
+ 698,
+ 716,
+ 725,
+ 726,
+ 727,
+ 734,
+ 754,
+ 759,
+ 760,
+ 761,
+ 766,
+ 770,
+ 771,
+ 772,
+ 777,
+ 781,
+ 782,
+ 783,
+ 788,
+ 792,
+ 793,
+ 794,
+ 799,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 832,
+ 833,
+ 834,
+ 835,
+ 846,
+ 847,
+ 848,
+ 849,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dario[] =
+{
+ 185,
+ 290,
+ 377,
+ 380,
+ 385,
+ 401,
+ 404,
+ 409,
+ 410,
+ 428,
+ 437,
+ 438,
+ 439,
+ 446,
+ 466,
+ 475,
+ 478,
+ 484,
+ 497,
+ 500,
+ 505,
+ 506,
+ 524,
+ 533,
+ 534,
+ 535,
+ 542,
+ 562,
+ 569,
+ 572,
+ 577,
+ 593,
+ 596,
+ 601,
+ 602,
+ 620,
+ 629,
+ 630,
+ 631,
+ 638,
+ 658,
+ 665,
+ 668,
+ 673,
+ 689,
+ 692,
+ 697,
+ 698,
+ 716,
+ 725,
+ 726,
+ 727,
+ 734,
+ 754,
+ 762,
+ 763,
+ 764,
+ 766,
+ 773,
+ 774,
+ 775,
+ 777,
+ 784,
+ 785,
+ 786,
+ 788,
+ 795,
+ 796,
+ 797,
+ 799,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 832,
+ 833,
+ 834,
+ 835,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 846,
+ 847,
+ 848,
+ 849,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Karlee[] =
+{
+ 185,
+ 290,
+ 377,
+ 380,
+ 385,
+ 401,
+ 404,
+ 409,
+ 410,
+ 428,
+ 437,
+ 438,
+ 439,
+ 446,
+ 466,
+ 475,
+ 478,
+ 484,
+ 497,
+ 500,
+ 505,
+ 506,
+ 524,
+ 533,
+ 534,
+ 535,
+ 542,
+ 562,
+ 569,
+ 572,
+ 577,
+ 593,
+ 596,
+ 601,
+ 602,
+ 620,
+ 629,
+ 630,
+ 631,
+ 638,
+ 658,
+ 665,
+ 668,
+ 673,
+ 689,
+ 692,
+ 697,
+ 698,
+ 716,
+ 725,
+ 726,
+ 727,
+ 734,
+ 754,
+ 756,
+ 757,
+ 758,
+ 765,
+ 767,
+ 768,
+ 769,
+ 776,
+ 778,
+ 779,
+ 780,
+ 787,
+ 789,
+ 790,
+ 791,
+ 798,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 832,
+ 833,
+ 834,
+ 835,
+ 842,
+ 843,
+ 844,
+ 845,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jaylin[] =
+{
+ 185,
+ 290,
+ 377,
+ 380,
+ 385,
+ 401,
+ 404,
+ 409,
+ 410,
+ 428,
+ 437,
+ 438,
+ 439,
+ 446,
+ 466,
+ 475,
+ 478,
+ 484,
+ 497,
+ 500,
+ 505,
+ 506,
+ 524,
+ 533,
+ 534,
+ 535,
+ 542,
+ 562,
+ 569,
+ 572,
+ 577,
+ 593,
+ 596,
+ 601,
+ 602,
+ 620,
+ 629,
+ 630,
+ 631,
+ 638,
+ 658,
+ 665,
+ 668,
+ 673,
+ 689,
+ 692,
+ 697,
+ 698,
+ 716,
+ 725,
+ 726,
+ 727,
+ 734,
+ 754,
+ 759,
+ 760,
+ 761,
+ 765,
+ 770,
+ 771,
+ 772,
+ 776,
+ 781,
+ 782,
+ 783,
+ 787,
+ 792,
+ 793,
+ 794,
+ 798,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 832,
+ 833,
+ 834,
+ 835,
+ 842,
+ 843,
+ 844,
+ 845,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ingrid[] =
+{
+ 185,
+ 290,
+ 377,
+ 380,
+ 385,
+ 401,
+ 404,
+ 409,
+ 410,
+ 428,
+ 437,
+ 438,
+ 439,
+ 446,
+ 466,
+ 475,
+ 478,
+ 484,
+ 497,
+ 500,
+ 505,
+ 506,
+ 524,
+ 533,
+ 534,
+ 535,
+ 542,
+ 562,
+ 569,
+ 572,
+ 577,
+ 593,
+ 596,
+ 601,
+ 602,
+ 620,
+ 629,
+ 630,
+ 631,
+ 638,
+ 658,
+ 665,
+ 668,
+ 673,
+ 689,
+ 692,
+ 697,
+ 698,
+ 716,
+ 725,
+ 726,
+ 727,
+ 734,
+ 754,
+ 762,
+ 763,
+ 764,
+ 765,
+ 773,
+ 774,
+ 775,
+ 776,
+ 784,
+ 785,
+ 786,
+ 787,
+ 795,
+ 796,
+ 797,
+ 798,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 832,
+ 833,
+ 834,
+ 835,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 842,
+ 843,
+ 844,
+ 845,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Delilah[] =
+{
+ 347,
+ 352,
+ 374,
+ 378,
+ 398,
+ 421,
+ 426,
+ 447,
+ 472,
+ 476,
+ 494,
+ 517,
+ 522,
+ 543,
+ 566,
+ 570,
+ 590,
+ 613,
+ 618,
+ 639,
+ 662,
+ 666,
+ 686,
+ 709,
+ 714,
+ 735,
+ 800,
+ 801,
+ 802,
+ 803,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Carly[] =
+{
+ 344,
+ 374,
+ 378,
+ 394,
+ 395,
+ 405,
+ 413,
+ 414,
+ 420,
+ 421,
+ 434,
+ 441,
+ 457,
+ 472,
+ 476,
+ 490,
+ 491,
+ 501,
+ 509,
+ 510,
+ 516,
+ 517,
+ 530,
+ 537,
+ 553,
+ 566,
+ 570,
+ 586,
+ 587,
+ 597,
+ 605,
+ 606,
+ 612,
+ 613,
+ 626,
+ 633,
+ 649,
+ 662,
+ 666,
+ 682,
+ 683,
+ 693,
+ 701,
+ 702,
+ 708,
+ 709,
+ 722,
+ 729,
+ 745,
+ 800,
+ 801,
+ 802,
+ 803,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Lexie[] =
+{
+ 344,
+ 347,
+ 352,
+ 394,
+ 395,
+ 398,
+ 405,
+ 413,
+ 414,
+ 420,
+ 421,
+ 426,
+ 434,
+ 441,
+ 447,
+ 457,
+ 490,
+ 491,
+ 494,
+ 501,
+ 509,
+ 510,
+ 516,
+ 517,
+ 522,
+ 530,
+ 537,
+ 543,
+ 553,
+ 586,
+ 587,
+ 590,
+ 597,
+ 605,
+ 606,
+ 612,
+ 613,
+ 618,
+ 626,
+ 633,
+ 639,
+ 649,
+ 682,
+ 683,
+ 686,
+ 693,
+ 701,
+ 702,
+ 708,
+ 709,
+ 714,
+ 722,
+ 729,
+ 735,
+ 745,
+ 800,
+ 801,
+ 802,
+ 803,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Miller[] =
+{
+ 345,
+ 376,
+ 386,
+ 387,
+ 397,
+ 399,
+ 402,
+ 403,
+ 406,
+ 408,
+ 411,
+ 413,
+ 414,
+ 425,
+ 427,
+ 429,
+ 433,
+ 435,
+ 440,
+ 441,
+ 445,
+ 448,
+ 449,
+ 450,
+ 452,
+ 454,
+ 456,
+ 458,
+ 459,
+ 460,
+ 462,
+ 465,
+ 466,
+ 467,
+ 470,
+ 474,
+ 482,
+ 493,
+ 495,
+ 498,
+ 499,
+ 502,
+ 504,
+ 507,
+ 509,
+ 510,
+ 521,
+ 523,
+ 525,
+ 529,
+ 531,
+ 536,
+ 537,
+ 541,
+ 544,
+ 545,
+ 546,
+ 548,
+ 550,
+ 552,
+ 554,
+ 555,
+ 556,
+ 558,
+ 561,
+ 562,
+ 563,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Marv[] =
+{
+ 345,
+ 568,
+ 578,
+ 579,
+ 589,
+ 591,
+ 594,
+ 595,
+ 598,
+ 600,
+ 603,
+ 605,
+ 606,
+ 617,
+ 619,
+ 621,
+ 625,
+ 627,
+ 632,
+ 633,
+ 637,
+ 640,
+ 641,
+ 642,
+ 644,
+ 646,
+ 648,
+ 650,
+ 651,
+ 652,
+ 654,
+ 657,
+ 658,
+ 659,
+ 664,
+ 674,
+ 675,
+ 685,
+ 687,
+ 690,
+ 691,
+ 694,
+ 696,
+ 699,
+ 701,
+ 702,
+ 713,
+ 715,
+ 717,
+ 721,
+ 723,
+ 728,
+ 729,
+ 733,
+ 736,
+ 737,
+ 738,
+ 740,
+ 742,
+ 744,
+ 746,
+ 747,
+ 748,
+ 750,
+ 753,
+ 754,
+ 755,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Layton[] =
+{
+ 345,
+ 425,
+ 433,
+ 435,
+ 445,
+ 450,
+ 454,
+ 456,
+ 458,
+ 459,
+ 460,
+ 465,
+ 466,
+ 521,
+ 529,
+ 531,
+ 541,
+ 546,
+ 550,
+ 552,
+ 554,
+ 555,
+ 556,
+ 561,
+ 562,
+ 617,
+ 625,
+ 627,
+ 637,
+ 642,
+ 646,
+ 648,
+ 650,
+ 651,
+ 652,
+ 657,
+ 658,
+ 713,
+ 721,
+ 723,
+ 733,
+ 738,
+ 742,
+ 744,
+ 746,
+ 747,
+ 748,
+ 753,
+ 754,
+ 804,
+ 805,
+ 806,
+ 807,
+ 820,
+ 821,
+ 822,
+ 823,
+ 824,
+ 825,
+ 826,
+ 827,
+ 828,
+ 829,
+ 830,
+ 831,
+ 832,
+ 833,
+ 834,
+ 835,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Brooks[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gregory[] =
+{
+ 421,
+ 425,
+ 431,
+ 437,
+ 439,
+ 456,
+ 460,
+ 465,
+ 466,
+ 517,
+ 521,
+ 527,
+ 533,
+ 535,
+ 552,
+ 556,
+ 561,
+ 562,
+ 613,
+ 617,
+ 623,
+ 629,
+ 631,
+ 648,
+ 652,
+ 657,
+ 658,
+ 709,
+ 713,
+ 719,
+ 725,
+ 727,
+ 744,
+ 748,
+ 753,
+ 754,
+ 765,
+ 766,
+ 776,
+ 777,
+ 787,
+ 788,
+ 798,
+ 799,
+ 800,
+ 801,
+ 802,
+ 803,
+ 804,
+ 805,
+ 806,
+ 807,
+ 808,
+ 809,
+ 810,
+ 811,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ 820,
+ 821,
+ 822,
+ 823,
+ 824,
+ 825,
+ 826,
+ 827,
+ 828,
+ 829,
+ 830,
+ 831,
+ 832,
+ 833,
+ 834,
+ 835,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Reese[] =
+{
+ 756,
+ 757,
+ 758,
+ 759,
+ 760,
+ 761,
+ 762,
+ 763,
+ 764,
+ 765,
+ 766,
+ 767,
+ 768,
+ 769,
+ 770,
+ 771,
+ 772,
+ 773,
+ 774,
+ 775,
+ 776,
+ 777,
+ 778,
+ 779,
+ 780,
+ 781,
+ 782,
+ 783,
+ 784,
+ 785,
+ 786,
+ 787,
+ 788,
+ 789,
+ 790,
+ 791,
+ 792,
+ 793,
+ 794,
+ 795,
+ 796,
+ 797,
+ 798,
+ 799,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ 842,
+ 843,
+ 844,
+ 845,
+ 846,
+ 847,
+ 848,
+ 849,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ 876,
+ 877,
+ 878,
+ 879,
+ 880,
+ 881,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Mason[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Toby[] =
+{
+ 564,
+ 565,
+ 566,
+ 567,
+ 568,
+ 569,
+ 570,
+ 571,
+ 572,
+ 573,
+ 574,
+ 575,
+ 576,
+ 577,
+ 578,
+ 579,
+ 580,
+ 581,
+ 582,
+ 583,
+ 584,
+ 585,
+ 586,
+ 587,
+ 588,
+ 589,
+ 590,
+ 591,
+ 592,
+ 593,
+ 594,
+ 595,
+ 596,
+ 597,
+ 598,
+ 599,
+ 600,
+ 601,
+ 602,
+ 603,
+ 604,
+ 605,
+ 606,
+ 607,
+ 608,
+ 609,
+ 610,
+ 611,
+ 612,
+ 613,
+ 614,
+ 615,
+ 616,
+ 617,
+ 618,
+ 619,
+ 620,
+ 621,
+ 622,
+ 623,
+ 624,
+ 625,
+ 626,
+ 627,
+ 628,
+ 629,
+ 630,
+ 631,
+ 632,
+ 633,
+ 634,
+ 635,
+ 636,
+ 637,
+ 638,
+ 639,
+ 640,
+ 641,
+ 642,
+ 643,
+ 644,
+ 645,
+ 646,
+ 647,
+ 648,
+ 649,
+ 650,
+ 651,
+ 652,
+ 653,
+ 654,
+ 655,
+ 656,
+ 657,
+ 658,
+ 659,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dorothy[] =
+{
+ 468,
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Piper[] =
+{
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459,
+ 460,
+ 461,
+ 462,
+ 463,
+ 464,
+ 465,
+ 466,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Finn[] =
+{
+ 317,
+ 371,
+ 373,
+ 377,
+ 390,
+ 392,
+ 399,
+ 431,
+ 452,
+ 456,
+ 469,
+ 475,
+ 486,
+ 488,
+ 495,
+ 527,
+ 548,
+ 552,
+ 565,
+ 569,
+ 573,
+ 576,
+ 580,
+ 582,
+ 584,
+ 591,
+ 592,
+ 601,
+ 602,
+ 610,
+ 621,
+ 623,
+ 626,
+ 631,
+ 634,
+ 640,
+ 641,
+ 644,
+ 648,
+ 650,
+ 651,
+ 653,
+ 655,
+ 661,
+ 665,
+ 669,
+ 672,
+ 676,
+ 678,
+ 680,
+ 687,
+ 688,
+ 697,
+ 698,
+ 706,
+ 717,
+ 719,
+ 722,
+ 727,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 749,
+ 751,
+ 808,
+ 809,
+ 810,
+ 811,
+ 816,
+ 817,
+ 818,
+ 819,
+ 820,
+ 821,
+ 822,
+ 823,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Samir[] =
+{
+ 317,
+ 371,
+ 373,
+ 377,
+ 390,
+ 392,
+ 399,
+ 431,
+ 452,
+ 456,
+ 469,
+ 475,
+ 486,
+ 488,
+ 495,
+ 527,
+ 548,
+ 552,
+ 565,
+ 569,
+ 573,
+ 576,
+ 580,
+ 582,
+ 584,
+ 591,
+ 592,
+ 601,
+ 602,
+ 610,
+ 621,
+ 623,
+ 626,
+ 631,
+ 634,
+ 640,
+ 641,
+ 644,
+ 648,
+ 650,
+ 651,
+ 653,
+ 655,
+ 661,
+ 665,
+ 669,
+ 672,
+ 676,
+ 678,
+ 680,
+ 687,
+ 688,
+ 697,
+ 698,
+ 706,
+ 717,
+ 719,
+ 722,
+ 727,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 749,
+ 751,
+ 808,
+ 809,
+ 810,
+ 811,
+ 816,
+ 817,
+ 818,
+ 819,
+ 820,
+ 821,
+ 822,
+ 823,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Fiona[] =
+{
+ 317,
+ 371,
+ 373,
+ 377,
+ 381,
+ 384,
+ 388,
+ 390,
+ 392,
+ 399,
+ 400,
+ 409,
+ 410,
+ 418,
+ 429,
+ 431,
+ 434,
+ 439,
+ 442,
+ 448,
+ 449,
+ 452,
+ 456,
+ 458,
+ 459,
+ 461,
+ 463,
+ 469,
+ 471,
+ 475,
+ 479,
+ 483,
+ 486,
+ 488,
+ 495,
+ 496,
+ 505,
+ 506,
+ 514,
+ 525,
+ 527,
+ 530,
+ 535,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 557,
+ 559,
+ 565,
+ 569,
+ 582,
+ 584,
+ 591,
+ 623,
+ 644,
+ 648,
+ 661,
+ 665,
+ 678,
+ 680,
+ 687,
+ 719,
+ 740,
+ 744,
+ 808,
+ 809,
+ 810,
+ 811,
+ 816,
+ 817,
+ 818,
+ 819,
+ 820,
+ 821,
+ 822,
+ 823,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gloria[] =
+{
+ 317,
+ 371,
+ 373,
+ 377,
+ 381,
+ 384,
+ 388,
+ 390,
+ 392,
+ 399,
+ 400,
+ 409,
+ 410,
+ 418,
+ 429,
+ 431,
+ 434,
+ 439,
+ 442,
+ 448,
+ 449,
+ 452,
+ 456,
+ 458,
+ 459,
+ 461,
+ 463,
+ 469,
+ 471,
+ 475,
+ 479,
+ 483,
+ 486,
+ 488,
+ 495,
+ 496,
+ 505,
+ 506,
+ 514,
+ 525,
+ 527,
+ 530,
+ 535,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 557,
+ 559,
+ 565,
+ 569,
+ 582,
+ 584,
+ 591,
+ 623,
+ 644,
+ 648,
+ 661,
+ 665,
+ 678,
+ 680,
+ 687,
+ 719,
+ 740,
+ 744,
+ 808,
+ 809,
+ 810,
+ 811,
+ 816,
+ 817,
+ 818,
+ 819,
+ 820,
+ 821,
+ 822,
+ 823,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Nico[] =
+{
+ 660,
+ 661,
+ 662,
+ 663,
+ 664,
+ 665,
+ 666,
+ 667,
+ 668,
+ 669,
+ 670,
+ 671,
+ 672,
+ 673,
+ 674,
+ 675,
+ 676,
+ 677,
+ 678,
+ 679,
+ 680,
+ 681,
+ 682,
+ 683,
+ 684,
+ 685,
+ 686,
+ 687,
+ 688,
+ 689,
+ 690,
+ 691,
+ 692,
+ 693,
+ 694,
+ 695,
+ 696,
+ 697,
+ 698,
+ 699,
+ 700,
+ 701,
+ 702,
+ 703,
+ 704,
+ 705,
+ 706,
+ 707,
+ 708,
+ 709,
+ 710,
+ 711,
+ 712,
+ 713,
+ 714,
+ 715,
+ 716,
+ 717,
+ 718,
+ 719,
+ 720,
+ 721,
+ 722,
+ 723,
+ 724,
+ 725,
+ 726,
+ 727,
+ 728,
+ 729,
+ 730,
+ 731,
+ 732,
+ 733,
+ 734,
+ 735,
+ 736,
+ 737,
+ 738,
+ 739,
+ 740,
+ 741,
+ 742,
+ 743,
+ 744,
+ 745,
+ 746,
+ 747,
+ 748,
+ 749,
+ 750,
+ 751,
+ 752,
+ 753,
+ 754,
+ 755,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Jeremy[] =
+{
+ 564,
+ 565,
+ 566,
+ 567,
+ 568,
+ 569,
+ 570,
+ 571,
+ 572,
+ 573,
+ 574,
+ 575,
+ 576,
+ 577,
+ 578,
+ 579,
+ 580,
+ 581,
+ 582,
+ 583,
+ 584,
+ 585,
+ 586,
+ 587,
+ 588,
+ 589,
+ 590,
+ 591,
+ 592,
+ 593,
+ 594,
+ 595,
+ 596,
+ 597,
+ 598,
+ 599,
+ 600,
+ 601,
+ 602,
+ 603,
+ 604,
+ 605,
+ 606,
+ 607,
+ 608,
+ 609,
+ 610,
+ 611,
+ 612,
+ 613,
+ 614,
+ 615,
+ 616,
+ 617,
+ 618,
+ 619,
+ 620,
+ 621,
+ 622,
+ 623,
+ 624,
+ 625,
+ 626,
+ 627,
+ 628,
+ 629,
+ 630,
+ 631,
+ 632,
+ 633,
+ 634,
+ 635,
+ 636,
+ 637,
+ 638,
+ 639,
+ 640,
+ 641,
+ 642,
+ 643,
+ 644,
+ 645,
+ 646,
+ 647,
+ 648,
+ 649,
+ 650,
+ 651,
+ 652,
+ 653,
+ 654,
+ 655,
+ 656,
+ 657,
+ 658,
+ 659,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Caitlin[] =
+{
+ 468,
+ 469,
+ 470,
+ 471,
+ 472,
+ 473,
+ 474,
+ 475,
+ 476,
+ 477,
+ 478,
+ 479,
+ 480,
+ 481,
+ 482,
+ 483,
+ 484,
+ 485,
+ 486,
+ 487,
+ 488,
+ 489,
+ 490,
+ 491,
+ 492,
+ 493,
+ 494,
+ 495,
+ 496,
+ 497,
+ 498,
+ 499,
+ 500,
+ 501,
+ 502,
+ 503,
+ 504,
+ 505,
+ 506,
+ 507,
+ 508,
+ 509,
+ 510,
+ 511,
+ 512,
+ 513,
+ 514,
+ 515,
+ 516,
+ 517,
+ 518,
+ 519,
+ 520,
+ 521,
+ 522,
+ 523,
+ 524,
+ 525,
+ 526,
+ 527,
+ 528,
+ 529,
+ 530,
+ 531,
+ 532,
+ 533,
+ 534,
+ 535,
+ 536,
+ 537,
+ 538,
+ 539,
+ 540,
+ 541,
+ 542,
+ 543,
+ 544,
+ 545,
+ 546,
+ 547,
+ 548,
+ 549,
+ 550,
+ 551,
+ 552,
+ 553,
+ 554,
+ 555,
+ 556,
+ 557,
+ 558,
+ 559,
+ 560,
+ 561,
+ 562,
+ 563,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Reena[] =
+{
+ 372,
+ 373,
+ 374,
+ 375,
+ 376,
+ 377,
+ 378,
+ 379,
+ 380,
+ 381,
+ 382,
+ 383,
+ 384,
+ 385,
+ 386,
+ 387,
+ 388,
+ 389,
+ 390,
+ 391,
+ 392,
+ 393,
+ 394,
+ 395,
+ 396,
+ 397,
+ 398,
+ 399,
+ 400,
+ 401,
+ 402,
+ 403,
+ 404,
+ 405,
+ 406,
+ 407,
+ 408,
+ 409,
+ 410,
+ 411,
+ 412,
+ 413,
+ 414,
+ 415,
+ 416,
+ 417,
+ 418,
+ 419,
+ 420,
+ 421,
+ 422,
+ 423,
+ 424,
+ 425,
+ 426,
+ 427,
+ 428,
+ 429,
+ 430,
+ 431,
+ 432,
+ 433,
+ 434,
+ 435,
+ 436,
+ 437,
+ 438,
+ 439,
+ 440,
+ 441,
+ 442,
+ 443,
+ 444,
+ 445,
+ 446,
+ 447,
+ 448,
+ 449,
+ 450,
+ 451,
+ 452,
+ 453,
+ 454,
+ 455,
+ 456,
+ 457,
+ 458,
+ 459,
+ 460,
+ 461,
+ 462,
+ 463,
+ 464,
+ 465,
+ 466,
+ 467,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Avery[] =
+{
+ 21,
+ 238,
+ 282,
+ 303,
+ 331,
+ 343,
+ 368,
+ 369,
+ 383,
+ 417,
+ 423,
+ 424,
+ 432,
+ 481,
+ 513,
+ 519,
+ 520,
+ 528,
+ 575,
+ 609,
+ 615,
+ 616,
+ 624,
+ 671,
+ 705,
+ 711,
+ 712,
+ 720,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Liam[] =
+{
+ 21,
+ 238,
+ 282,
+ 303,
+ 331,
+ 343,
+ 368,
+ 369,
+ 383,
+ 417,
+ 423,
+ 424,
+ 432,
+ 481,
+ 513,
+ 519,
+ 520,
+ 528,
+ 575,
+ 609,
+ 615,
+ 616,
+ 624,
+ 671,
+ 705,
+ 711,
+ 712,
+ 720,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Theo[] =
+{
+ 333,
+ 347,
+ 350,
+ 354,
+ 358,
+ 361,
+ 362,
+ 363,
+ 364,
+ 371,
+ 381,
+ 384,
+ 429,
+ 434,
+ 439,
+ 479,
+ 483,
+ 525,
+ 530,
+ 535,
+ 573,
+ 576,
+ 621,
+ 626,
+ 631,
+ 669,
+ 672,
+ 717,
+ 722,
+ 727,
+ 816,
+ 817,
+ 818,
+ 819,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Bailey[] =
+{
+ 333,
+ 347,
+ 350,
+ 354,
+ 358,
+ 361,
+ 362,
+ 363,
+ 364,
+ 371,
+ 381,
+ 384,
+ 429,
+ 434,
+ 439,
+ 479,
+ 483,
+ 525,
+ 530,
+ 535,
+ 573,
+ 576,
+ 621,
+ 626,
+ 631,
+ 669,
+ 672,
+ 717,
+ 722,
+ 727,
+ 816,
+ 817,
+ 818,
+ 819,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Hugo[] =
+{
+ 383,
+ 386,
+ 402,
+ 403,
+ 416,
+ 417,
+ 423,
+ 432,
+ 433,
+ 435,
+ 450,
+ 466,
+ 481,
+ 482,
+ 498,
+ 499,
+ 512,
+ 513,
+ 519,
+ 528,
+ 529,
+ 531,
+ 546,
+ 562,
+ 575,
+ 578,
+ 594,
+ 595,
+ 608,
+ 609,
+ 615,
+ 624,
+ 625,
+ 627,
+ 642,
+ 658,
+ 671,
+ 674,
+ 690,
+ 691,
+ 704,
+ 705,
+ 711,
+ 720,
+ 721,
+ 723,
+ 738,
+ 754,
+ 762,
+ 763,
+ 764,
+ 773,
+ 774,
+ 775,
+ 784,
+ 785,
+ 786,
+ 795,
+ 796,
+ 797,
+ 832,
+ 833,
+ 834,
+ 835,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Bryce[] =
+{
+ 383,
+ 386,
+ 402,
+ 403,
+ 416,
+ 417,
+ 423,
+ 432,
+ 433,
+ 435,
+ 450,
+ 466,
+ 481,
+ 482,
+ 498,
+ 499,
+ 512,
+ 513,
+ 519,
+ 528,
+ 529,
+ 531,
+ 546,
+ 562,
+ 575,
+ 578,
+ 594,
+ 595,
+ 608,
+ 609,
+ 615,
+ 624,
+ 625,
+ 627,
+ 642,
+ 658,
+ 671,
+ 674,
+ 690,
+ 691,
+ 704,
+ 705,
+ 711,
+ 720,
+ 721,
+ 723,
+ 738,
+ 754,
+ 762,
+ 763,
+ 764,
+ 773,
+ 774,
+ 775,
+ 784,
+ 785,
+ 786,
+ 795,
+ 796,
+ 797,
+ 832,
+ 833,
+ 834,
+ 835,
+ 836,
+ 837,
+ 838,
+ 839,
+ 840,
+ 841,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gideon[] =
+{
+ 441,
+ 445,
+ 448,
+ 449,
+ 451,
+ 453,
+ 454,
+ 455,
+ 458,
+ 537,
+ 541,
+ 544,
+ 545,
+ 547,
+ 549,
+ 550,
+ 551,
+ 554,
+ 633,
+ 637,
+ 640,
+ 641,
+ 643,
+ 645,
+ 646,
+ 647,
+ 650,
+ 729,
+ 733,
+ 736,
+ 737,
+ 739,
+ 741,
+ 742,
+ 743,
+ 746,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Triston[] =
+{
+ 441,
+ 445,
+ 448,
+ 449,
+ 451,
+ 453,
+ 454,
+ 455,
+ 458,
+ 537,
+ 541,
+ 544,
+ 545,
+ 547,
+ 549,
+ 550,
+ 551,
+ 554,
+ 633,
+ 637,
+ 640,
+ 641,
+ 643,
+ 645,
+ 646,
+ 647,
+ 650,
+ 729,
+ 733,
+ 736,
+ 737,
+ 739,
+ 741,
+ 742,
+ 743,
+ 746,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Charles[] =
+{
+ 352,
+ 381,
+ 391,
+ 393,
+ 396,
+ 398,
+ 407,
+ 422,
+ 426,
+ 443,
+ 447,
+ 479,
+ 487,
+ 489,
+ 492,
+ 494,
+ 503,
+ 518,
+ 522,
+ 539,
+ 543,
+ 573,
+ 583,
+ 585,
+ 588,
+ 590,
+ 599,
+ 614,
+ 618,
+ 635,
+ 639,
+ 669,
+ 679,
+ 681,
+ 684,
+ 686,
+ 695,
+ 710,
+ 714,
+ 731,
+ 735,
+ 756,
+ 757,
+ 758,
+ 767,
+ 768,
+ 769,
+ 778,
+ 779,
+ 780,
+ 789,
+ 790,
+ 791,
+ 870,
+ 871,
+ 872,
+ 873,
+ 874,
+ 875,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Raymond[] =
+{
+ 374,
+ 376,
+ 381,
+ 404,
+ 407,
+ 422,
+ 439,
+ 443,
+ 459,
+ 472,
+ 500,
+ 506,
+ 507,
+ 518,
+ 532,
+ 546,
+ 566,
+ 585,
+ 588,
+ 628,
+ 635,
+ 679,
+ 681,
+ 684,
+ 710,
+ 731,
+ 785,
+ 795,
+ 796,
+ 797,
+ 817,
+ 842,
+ 843,
+ 846,
+ 847,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dirk[] =
+{
+ 355,
+ 375,
+ 379,
+ 385,
+ 386,
+ 412,
+ 435,
+ 440,
+ 454,
+ 457,
+ 459,
+ 465,
+ 473,
+ 477,
+ 482,
+ 484,
+ 508,
+ 531,
+ 536,
+ 550,
+ 553,
+ 555,
+ 561,
+ 567,
+ 571,
+ 577,
+ 578,
+ 604,
+ 627,
+ 632,
+ 646,
+ 649,
+ 651,
+ 657,
+ 663,
+ 667,
+ 673,
+ 674,
+ 700,
+ 723,
+ 728,
+ 742,
+ 745,
+ 747,
+ 753,
+ 756,
+ 757,
+ 758,
+ 767,
+ 768,
+ 769,
+ 778,
+ 779,
+ 780,
+ 789,
+ 790,
+ 791,
+ 828,
+ 829,
+ 830,
+ 831,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Harold[] =
+{
+ 355,
+ 375,
+ 379,
+ 385,
+ 386,
+ 412,
+ 435,
+ 440,
+ 454,
+ 457,
+ 459,
+ 465,
+ 473,
+ 477,
+ 482,
+ 484,
+ 508,
+ 531,
+ 536,
+ 550,
+ 553,
+ 555,
+ 561,
+ 567,
+ 571,
+ 577,
+ 578,
+ 604,
+ 627,
+ 632,
+ 646,
+ 649,
+ 651,
+ 657,
+ 663,
+ 667,
+ 673,
+ 674,
+ 700,
+ 723,
+ 728,
+ 742,
+ 745,
+ 747,
+ 753,
+ 756,
+ 757,
+ 758,
+ 767,
+ 768,
+ 769,
+ 778,
+ 779,
+ 780,
+ 789,
+ 790,
+ 791,
+ 828,
+ 829,
+ 830,
+ 831,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Omar[] =
+{
+ 373,
+ 388,
+ 390,
+ 392,
+ 400,
+ 409,
+ 410,
+ 418,
+ 431,
+ 442,
+ 448,
+ 449,
+ 452,
+ 456,
+ 458,
+ 459,
+ 461,
+ 463,
+ 469,
+ 471,
+ 486,
+ 488,
+ 496,
+ 505,
+ 506,
+ 514,
+ 527,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 557,
+ 559,
+ 565,
+ 580,
+ 582,
+ 584,
+ 592,
+ 601,
+ 602,
+ 610,
+ 623,
+ 634,
+ 640,
+ 641,
+ 644,
+ 648,
+ 650,
+ 651,
+ 653,
+ 655,
+ 661,
+ 676,
+ 678,
+ 680,
+ 688,
+ 697,
+ 698,
+ 706,
+ 719,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 749,
+ 751,
+ 808,
+ 809,
+ 810,
+ 811,
+ 820,
+ 821,
+ 822,
+ 823,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Peter[] =
+{
+ 373,
+ 388,
+ 390,
+ 392,
+ 400,
+ 409,
+ 410,
+ 418,
+ 431,
+ 442,
+ 448,
+ 449,
+ 452,
+ 456,
+ 458,
+ 459,
+ 461,
+ 463,
+ 469,
+ 471,
+ 486,
+ 488,
+ 496,
+ 505,
+ 506,
+ 514,
+ 527,
+ 538,
+ 544,
+ 545,
+ 548,
+ 552,
+ 554,
+ 555,
+ 557,
+ 559,
+ 565,
+ 580,
+ 582,
+ 584,
+ 592,
+ 601,
+ 602,
+ 610,
+ 623,
+ 634,
+ 640,
+ 641,
+ 644,
+ 648,
+ 650,
+ 651,
+ 653,
+ 655,
+ 661,
+ 676,
+ 678,
+ 680,
+ 688,
+ 697,
+ 698,
+ 706,
+ 719,
+ 730,
+ 736,
+ 737,
+ 740,
+ 744,
+ 746,
+ 747,
+ 749,
+ 751,
+ 808,
+ 809,
+ 810,
+ 811,
+ 820,
+ 821,
+ 822,
+ 823,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dev[] =
+{
+ 372,
+ 387,
+ 402,
+ 403,
+ 413,
+ 414,
+ 416,
+ 417,
+ 427,
+ 428,
+ 432,
+ 433,
+ 435,
+ 440,
+ 450,
+ 466,
+ 468,
+ 470,
+ 498,
+ 499,
+ 509,
+ 510,
+ 512,
+ 513,
+ 523,
+ 524,
+ 528,
+ 529,
+ 531,
+ 536,
+ 546,
+ 562,
+ 564,
+ 579,
+ 594,
+ 595,
+ 605,
+ 606,
+ 608,
+ 609,
+ 619,
+ 620,
+ 624,
+ 625,
+ 627,
+ 632,
+ 642,
+ 658,
+ 660,
+ 675,
+ 690,
+ 691,
+ 701,
+ 702,
+ 704,
+ 705,
+ 715,
+ 716,
+ 720,
+ 721,
+ 723,
+ 728,
+ 738,
+ 754,
+ 832,
+ 833,
+ 834,
+ 835,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Corey[] =
+{
+ 372,
+ 387,
+ 402,
+ 403,
+ 413,
+ 414,
+ 416,
+ 417,
+ 427,
+ 428,
+ 432,
+ 433,
+ 435,
+ 440,
+ 450,
+ 466,
+ 468,
+ 470,
+ 498,
+ 499,
+ 509,
+ 510,
+ 512,
+ 513,
+ 523,
+ 524,
+ 528,
+ 529,
+ 531,
+ 536,
+ 546,
+ 562,
+ 564,
+ 579,
+ 594,
+ 595,
+ 605,
+ 606,
+ 608,
+ 609,
+ 619,
+ 620,
+ 624,
+ 625,
+ 627,
+ 632,
+ 642,
+ 658,
+ 660,
+ 675,
+ 690,
+ 691,
+ 701,
+ 702,
+ 704,
+ 705,
+ 715,
+ 716,
+ 720,
+ 721,
+ 723,
+ 728,
+ 738,
+ 754,
+ 832,
+ 833,
+ 834,
+ 835,
+ 860,
+ 861,
+ 862,
+ 863,
+ 864,
+ 865,
+ 866,
+ 867,
+ 868,
+ 869,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Andre[] =
+{
+ 374,
+ 378,
+ 415,
+ 419,
+ 421,
+ 426,
+ 430,
+ 444,
+ 451,
+ 454,
+ 455,
+ 464,
+ 472,
+ 476,
+ 511,
+ 515,
+ 517,
+ 522,
+ 526,
+ 540,
+ 547,
+ 550,
+ 551,
+ 560,
+ 566,
+ 570,
+ 607,
+ 611,
+ 613,
+ 618,
+ 622,
+ 636,
+ 643,
+ 646,
+ 647,
+ 656,
+ 662,
+ 666,
+ 703,
+ 707,
+ 709,
+ 714,
+ 718,
+ 732,
+ 739,
+ 742,
+ 743,
+ 752,
+ 800,
+ 801,
+ 802,
+ 803,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Ferris[] =
+{
+ 374,
+ 378,
+ 415,
+ 419,
+ 421,
+ 426,
+ 430,
+ 444,
+ 451,
+ 454,
+ 455,
+ 464,
+ 472,
+ 476,
+ 511,
+ 515,
+ 517,
+ 522,
+ 526,
+ 540,
+ 547,
+ 550,
+ 551,
+ 560,
+ 566,
+ 570,
+ 607,
+ 611,
+ 613,
+ 618,
+ 622,
+ 636,
+ 643,
+ 646,
+ 647,
+ 656,
+ 662,
+ 666,
+ 703,
+ 707,
+ 709,
+ 714,
+ 718,
+ 732,
+ 739,
+ 742,
+ 743,
+ 752,
+ 800,
+ 801,
+ 802,
+ 803,
+ 850,
+ 851,
+ 852,
+ 853,
+ 854,
+ 855,
+ 856,
+ 857,
+ 858,
+ 859,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Alivia[] =
+{
+ 399,
+ 400,
+ 409,
+ 422,
+ 438,
+ 441,
+ 445,
+ 448,
+ 449,
+ 451,
+ 452,
+ 454,
+ 455,
+ 489,
+ 492,
+ 493,
+ 503,
+ 526,
+ 532,
+ 535,
+ 536,
+ 560,
+ 573,
+ 583,
+ 590,
+ 592,
+ 608,
+ 611,
+ 620,
+ 651,
+ 682,
+ 688,
+ 714,
+ 729,
+ 732,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Paige[] =
+{
+ 399,
+ 400,
+ 409,
+ 422,
+ 438,
+ 441,
+ 445,
+ 448,
+ 449,
+ 451,
+ 452,
+ 454,
+ 455,
+ 489,
+ 492,
+ 493,
+ 503,
+ 526,
+ 532,
+ 535,
+ 536,
+ 560,
+ 573,
+ 583,
+ 590,
+ 592,
+ 608,
+ 611,
+ 620,
+ 651,
+ 682,
+ 688,
+ 714,
+ 729,
+ 732,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Anya[] =
+{
+ 442,
+ 443,
+ 444,
+ 446,
+ 447,
+ 538,
+ 539,
+ 540,
+ 542,
+ 543,
+ 634,
+ 635,
+ 636,
+ 638,
+ 639,
+ 730,
+ 731,
+ 732,
+ 734,
+ 735,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Dawn[] =
+{
+ 377,
+ 381,
+ 410,
+ 421,
+ 422,
+ 443,
+ 456,
+ 460,
+ 461,
+ 471,
+ 472,
+ 473,
+ 484,
+ 491,
+ 502,
+ 503,
+ 507,
+ 508,
+ 515,
+ 520,
+ 540,
+ 549,
+ 569,
+ 574,
+ 583,
+ 586,
+ 601,
+ 622,
+ 624,
+ 639,
+ 644,
+ 655,
+ 734,
+ 804,
+ 810,
+ 815,
+ 823,
+ 831,
+ 843,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Abby[] =
+{
+ 185,
+ 290,
+ 313,
+ 334,
+ 348,
+ 359,
+ 360,
+ 377,
+ 380,
+ 382,
+ 385,
+ 394,
+ 395,
+ 398,
+ 400,
+ 401,
+ 404,
+ 409,
+ 410,
+ 416,
+ 437,
+ 438,
+ 439,
+ 441,
+ 445,
+ 446,
+ 453,
+ 475,
+ 478,
+ 480,
+ 484,
+ 490,
+ 491,
+ 494,
+ 496,
+ 497,
+ 500,
+ 505,
+ 506,
+ 512,
+ 533,
+ 534,
+ 535,
+ 537,
+ 541,
+ 542,
+ 549,
+ 569,
+ 572,
+ 574,
+ 577,
+ 586,
+ 587,
+ 590,
+ 592,
+ 593,
+ 596,
+ 601,
+ 602,
+ 608,
+ 629,
+ 630,
+ 631,
+ 633,
+ 637,
+ 638,
+ 645,
+ 665,
+ 668,
+ 670,
+ 673,
+ 682,
+ 683,
+ 686,
+ 688,
+ 689,
+ 692,
+ 697,
+ 698,
+ 704,
+ 725,
+ 726,
+ 727,
+ 729,
+ 733,
+ 734,
+ 741,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ -1
+};
+
+const u16 gBattleFrontierTrainerMons_Gretel[] =
+{
+ 185,
+ 290,
+ 313,
+ 334,
+ 348,
+ 359,
+ 360,
+ 377,
+ 380,
+ 382,
+ 385,
+ 394,
+ 395,
+ 398,
+ 400,
+ 401,
+ 404,
+ 409,
+ 410,
+ 416,
+ 437,
+ 438,
+ 439,
+ 441,
+ 445,
+ 446,
+ 453,
+ 475,
+ 478,
+ 480,
+ 484,
+ 490,
+ 491,
+ 494,
+ 496,
+ 497,
+ 500,
+ 505,
+ 506,
+ 512,
+ 533,
+ 534,
+ 535,
+ 537,
+ 541,
+ 542,
+ 549,
+ 569,
+ 572,
+ 574,
+ 577,
+ 586,
+ 587,
+ 590,
+ 592,
+ 593,
+ 596,
+ 601,
+ 602,
+ 608,
+ 629,
+ 630,
+ 631,
+ 633,
+ 637,
+ 638,
+ 645,
+ 665,
+ 668,
+ 670,
+ 673,
+ 682,
+ 683,
+ 686,
+ 688,
+ 689,
+ 692,
+ 697,
+ 698,
+ 704,
+ 725,
+ 726,
+ 727,
+ 729,
+ 733,
+ 734,
+ 741,
+ 812,
+ 813,
+ 814,
+ 815,
+ 816,
+ 817,
+ 818,
+ 819,
+ -1
+};
diff --git a/src/data/battle_frontier/battle_frontier_trainers.h b/src/data/battle_frontier/battle_frontier_trainers.h
new file mode 100644
index 000000000..faef40656
--- /dev/null
+++ b/src/data/battle_frontier/battle_frontier_trainers.h
@@ -0,0 +1,2403 @@
+const struct BattleFrontierTrainer gBattleFrontierTrainers[] =
+{
+ [0] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("BRADY"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NEVER, EC_WORD_GOING, EC_WORD_TO, EC_WORD_LOSE, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_STRONG, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_QUES, 0xFFFF, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Brady
+ },
+ [1] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("CONNER"),
+ .speechBefore = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_BUG, EC_WORD_ME, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_IS, EC_WORD_JUST, EC_WORD_AWESOME, 0xFFFF},
+ .speechLose = {EC_WORD_DARN, EC_WORD_ELLIPSIS, EC_WORD_LOSING, EC_WORD_DOES, EC_WORD_BUG, EC_WORD_ME},
+ .monSets = gBattleFrontierTrainerMons_Conner
+ },
+ [2] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("BRADLEY"),
+ .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_MY, EC_WORD_OPPONENT, EC_WORD_TODAY},
+ .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, 0xFFFF, EC_WORD_SEE_YA, EC_WORD_LATER, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_TOMORROW, EC_WORD_IS, EC_WORD_WHEN, EC_WORD_WE, EC_WORD_REALLY, EC_WORD_BATTLE},
+ .monSets = gBattleFrontierTrainerMons_Bradley
+ },
+ [3] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("CYBIL"),
+ .speechBefore = {EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_NOT_VERY, EC_WORD_SCARY, EC_WORD_AT, EC_WORD_ALL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_SAD, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOU, EC_MOVE2(STRUGGLE)},
+ .speechLose = {EC_WORD_THIS, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_HAPPENING, EC_WORD_TO_ME, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Cybil
+ },
+ [4] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("RODETTE"),
+ .speechBefore = {EC_WORD_OH, EC_WORD_THIS, EC_WORD_IS, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_INCREDIBLE, EC_WORD_HOW, EC_WORD_STRONG, EC_WORD_I_AM, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_OH_DEAR, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_NO, EC_WORD_GOOD},
+ .monSets = gBattleFrontierTrainerMons_Rodette
+ },
+ [5] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("PEGGY"),
+ .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_TO, EC_WORD_BE, EC_WORD_DESTROYED, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_LOLLING, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_SAD, EC_WORD_THANKS, EC_WORD_TO, EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Peggy
+ },
+ [6] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
+ .trainerName = _("KEITH"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_JUST, EC_WORD_STUDY, EC_WORD_YOU, EC_WORD_KNOW},
+ .speechWin = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_STUDY, EC_WORD_ENOUGH, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Keith
+ },
+ [7] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
+ .trainerName = _("GRAYSON"),
+ .speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_BATTLE, EC_WORD_ISN_T, EC_WORD_CHILD_S_PLAY, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_DONE, EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_WE, EC_WORD_WERE, EC_WORD_LIKE, EC_WORD_TOYS, EC_WORD_TO, EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Grayson
+ },
+ [8] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
+ .trainerName = _("GLENN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_COOL, EC_WORD_IF_I_WIN, 0xFFFF},
+ .speechWin = {EC_WORD_COOL, EC_WORD_EXCL, 0xFFFF, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_COOL},
+ .monSets = gBattleFrontierTrainerMons_Glenn
+ },
+ [9] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("LILIANA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_GIVE_UP, EC_WORD_UNTIL, EC_WORD_I, EC_WORD_WIN},
+ .speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_WORD_SURRENDER, EC_WORD_IN, EC_WORD_ME},
+ .speechLose = {EC_WORD_THAT_S, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_GIVE_UP, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Liliana
+ },
+ [10] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("ELISE"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_IS, EC_WORD_FROM, EC_WORD_MY, EC_WORD_FATHER},
+ .speechWin = {EC_WORD_I, EC_WORD_WIN, EC_WORD_EXCL, EC_WORD_FATHER, EC_WORD_I_VE, EC_WORD_WON},
+ .speechLose = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_FATHER, EC_WORD_FOR, EC_WORD_I_VE, EC_WORD_LOST},
+ .monSets = gBattleFrontierTrainerMons_Elise
+ },
+ [11] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("ZOEY"),
+ .speechBefore = {EC_WORD_PLEASE, EC_WORD_BATTLE, EC_WORD_LIKE, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_IT},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
+ .speechLose = {EC_WORD_WERE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_BEING, EC_WORD_SERIOUS, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Zoey
+ },
+ [12] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("MANUEL"),
+ .speechBefore = {EC_WORD_ME, EC_WORD_LOSE, EC_WORD_QUES, EC_WORD_THAT_S, EC_WORD_PREPOSTEROUS, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_NATURALLY, EC_WORD_I, EC_WORD_WIN, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_LOST, EC_WORD_MOTHER},
+ .monSets = gBattleFrontierTrainerMons_Manuel
+ },
+ [13] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("RUSS"),
+ .speechBefore = {EC_WORD_THEY, EC_WORD_ALL, EC_WORD_WANT, EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_HAVE, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_PARTY},
+ .speechLose = {EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_DO, EC_WORD_THAT, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Russ
+ },
+ [14] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("DUSTIN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_COOL, EC_WORD_POKEMON, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_WHEN_I_WIN, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_MYSELF, EC_WORD_IF_I_LOSE, EC_WORD_TOO, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Dustin
+ },
+ [15] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("TINA"),
+ .speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_YOU, EC_WORD_CAN, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(SWEET_KISS)},
+ .speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_YOUR, EC_MOVE2(SWEET_KISS), EC_WORD_FROM, EC_WORD_MY, EC_POKEMON2(JYNX)},
+ .speechLose = {EC_WORD_YOU, EC_WORD_WANT, EC_WORD_A, EC_MOVE(SWIFT), EC_MOVE2(MEGA_KICK), EC_WORD_INSTEAD},
+ .monSets = gBattleFrontierTrainerMons_Tina
+ },
+ [16] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("GILLIAN"),
+ .speechBefore = {EC_WORD_THE, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_IS, EC_WORD_SO, EC_WORD_YESTERDAY},
+ .speechWin = {EC_WORD_POKEMON, EC_WORD_NEVER, EC_WORD_GO, EC_WORD_OUT, EC_WORD_OF, EC_WORD_FASHION},
+ .speechLose = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_DISAPPOINT, EC_WORD_ME, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Gillian
+ },
+ [17] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("ZOE"),
+ .speechBefore = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_A, EC_WORD_WORRY, EC_WORD_AT, EC_WORD_ALL},
+ .speechWin = {EC_WORD_LIFE, EC_WORD_IS, EC_WORD_ALWAYS, EC_WORD_GOOD, EC_WORD_TO_ME, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_WORRY, EC_WORD_ABOUT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SKILL},
+ .monSets = gBattleFrontierTrainerMons_Zoe
+ },
+ [18] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("CHEN"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_TOTALLY, EC_WORD_READY, EC_WORD_TO, EC_WORD_ROCK, EC_WORD_TODAY},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_READY, EC_WORD_TO, EC_WORD_GO, EC_WORD_ON, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_MOVE(FOCUS_ENERGY), EC_WORD_AND, EC_WORD_TOUGHNESS},
+ .monSets = gBattleFrontierTrainerMons_Chen
+ },
+ [19] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("AL"),
+ .speechBefore = {EC_WORD_YOUR, EC_WORD_LOOK, EC_WORD_SAYS, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_ME, EC_WORD_WHO_IS, EC_WORD_REALLY, EC_WORD_TOUGH, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_RIGHT, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_REALLY, EC_WORD_TOUGH},
+ .monSets = gBattleFrontierTrainerMons_Al
+ },
+ [20] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("MITCH"),
+ .speechBefore = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_IS, EC_WORD_MY, EC_WORD_ALLY, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WAS, EC_WORD_THAT, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_YOU, EC_WORD_QUES},
+ .speechLose = {EC_WORD_MOTHER, EC_WORD_NATURE, EC_WORD_DIDN_T, EC_WORD_LET_ME_WIN, EC_WORD_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Mitch
+ },
+ [21] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("ANNE"),
+ .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_LET_S, EC_WORD_BATTLE, EC_WORD_NOW},
+ .speechWin = {EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Anne
+ },
+ [22] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("ALIZE"),
+ .speechBefore = {EC_WORD_CUTE, EC_WORD_AND, EC_WORD_AWFULLY, EC_WORD_STRONG, EC_WORD_THAT_S, EC_WORD_ME},
+ .speechWin = {EC_WORD_YUP, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_AND, EC_WORD_AWFULLY, EC_WORD_STRONG},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_WEAK, EC_WORD_ELLIPSIS, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_CUTE},
+ .monSets = gBattleFrontierTrainerMons_Alize
+ },
+ [23] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("LAUREN"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_OLD, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_ALSO, EC_WORD_GOOD},
+ .speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_I_WAS, EC_WORD_OLD, EC_WORD_BUT, EC_WORD_GOOD},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_WEIRD, EC_WORD_DREAM, EC_WORD_THAT_WAS, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Lauren
+ },
+ [24] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("KIPP"),
+ .speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_GO, EC_MOVE2(SURF)},
+ .speechWin = {EC_WORD_YEAH, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_OFF, EC_WORD_TO, EC_MOVE2(SURF)},
+ .speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Kipp
+ },
+ [25] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("JASON"),
+ .speechBefore = {EC_WORD_TEACH, EC_WORD_ME, EC_WORD_A, EC_WORD_GOOD, EC_WORD_STRATEGY, 0xFFFF},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_YOUR, EC_WORD_GOOD, EC_WORD_STRATEGY, EC_WORD_QUES_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_WOW, EC_WORD_THAT, EC_WORD_IS, EC_WORD_AN, EC_WORD_AWESOME, EC_WORD_STRATEGY},
+ .monSets = gBattleFrontierTrainerMons_Jason
+ },
+ [26] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("JOHN"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_PRETTY, EC_WORD_NEW, EC_WORD_TRAINER, 0xFFFF},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_BUT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_NEW, EC_WORD_SO, EC_WORD_WHAT, EC_WORD_IF_I_LOSE, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_John
+ },
+ [27] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("ANN"),
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_SO, EC_WORD_EXCITING, EC_WORD_IT, EC_WORD_REALLY, EC_WORD_IS},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_HAPPY, EC_WORD_I, EC_WORD_CAN, EC_WORD_CRY},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SAD, EC_WORD_I, EC_WORD_WILL, EC_WORD_CRY},
+ .monSets = gBattleFrontierTrainerMons_Ann
+ },
+ [28] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("EILEEN"),
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_OK_QUES},
+ .speechWin = {EC_WORD_SO, EC_WORD_THIS, EC_WORD_IS, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_FEELING},
+ .speechLose = {EC_WORD_AN, EC_WORD_ADULT, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_YOU, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Eileen
+ },
+ [29] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("CARLIE"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_IS, EC_WORD_FOR, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_MY, EC_WORD_SUMMER, EC_WORD_VACATION, EC_WORD_WILL, EC_WORD_BE, EC_WORD_AWESOME},
+ .speechLose = {EC_WORD_I, EC_WORD_CAN_T_WIN, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Carlie
+ },
+ [30] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("GORDON"),
+ .speechBefore = {EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_COME, EC_WORD_TO_ME, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_OH_YEAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_REALLY, EC_WORD_WON},
+ .speechLose = {EC_WORD_NOTHING, EC_WORD_IS, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_FOR, EC_WORD_ME},
+ .monSets = gBattleFrontierTrainerMons_Gordon
+ },
+ [31] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("AYDEN"),
+ .speechBefore = {EC_WORD_COME_ON, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_HOT, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_WATER, EC_WORD_TO, EC_WORD_COOL, EC_WORD_DOWN},
+ .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_ICE, EC_WORD_COLD},
+ .monSets = gBattleFrontierTrainerMons_Ayden
+ },
+ [32] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("MARCO"),
+ .speechBefore = {EC_WORD_I, EC_MOVE2(SURF), EC_WORD_IN, EC_WORD_THE, EC_WORD_WINTER, EC_WORD_TOO},
+ .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_MOVE2(SURF), EC_WORD_RIGHT, EC_WORD_NOW},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(BEAT_UP), EC_WORD_MY, EC_MOVE2(SURF), EC_WORD_BOARD},
+ .monSets = gBattleFrontierTrainerMons_Marco
+ },
+ [33] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("CIERRA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_MY, EC_WORD_SWIFT_SWIM},
+ .speechWin = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_SYNCHRONIZE, EC_WORD_WITH, EC_WORD_ME, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SYNCHRONIZE, EC_WORD_BETTER, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Cierra
+ },
+ [34] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("MARCY"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_KNOCKOUT, EC_WORD_YOU, EC_WORD_CAN_T_WIN, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_AFTER, EC_WORD_ALL, EC_WORD_I_AM, EC_WORD_A, EC_WORD_KNOCKOUT, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_THAT_S, EC_WORD_NOT, EC_WORD_THE, EC_WORD_KNOCKOUT, EC_WORD_I, EC_WORD_MEAN},
+ .monSets = gBattleFrontierTrainerMons_Marcy
+ },
+ [35] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("KATHY"),
+ .speechBefore = {EC_WORD_I_VE, EC_WORD_WON, EC_WORD_EVERY, EC_WORD_MATCH, EC_WORD_TODAY, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_SO, EC_WORD_GREAT, EC_WORD_TO, EC_WORD_WIN, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_HUH_QUES, EC_WORD_I, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_HAVE, EC_WORD_LOST},
+ .monSets = gBattleFrontierTrainerMons_Kathy
+ },
+ [36] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("PEYTON"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NEVER, EC_WORD_DISAPPOINTED, EC_WORD_WITH, EC_WORD_MY, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_IF, EC_WORD_WE, EC_WORD_WIN, EC_WORD_TOGETHER},
+ .speechLose = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_MORE, EC_WORD_IF_I_LOSE},
+ .monSets = gBattleFrontierTrainerMons_Peyton
+ },
+ [37] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("JULIAN"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_RIGHT, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOTALLY, EC_WORD_OUT, EC_WORD_OF, EC_WORD_THE, EC_WORD_QUESTION},
+ .speechLose = {EC_WORD_YOU, EC_WORD_DO, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Julian
+ },
+ [38] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("QUINN"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_BUT, EC_WORD_A, EC_WORD_DREAM},
+ .speechWin = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_BEAUTIFUL, EC_WORD_DREAM, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_AN, EC_WORD_AWFUL, EC_MOVE(NIGHTMARE), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Quinn
+ },
+ [39] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("HAYLEE"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_I_AM, EC_WORD_FEELING},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_OVERWHELMING, EC_WORD_JOY, EC_WORD_OVER, EC_WORD_THIS},
+ .speechLose = {EC_WORD_DESTROYED, EC_WORD_IS, EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_FEELING},
+ .monSets = gBattleFrontierTrainerMons_Haylee
+ },
+ [40] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("AMANDA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_COME, EC_WORD_FROM, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_FAMILY},
+ .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_TREASURE, EC_WORD_THIS, EC_WORD_WIN, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO_HOME, EC_WORD_RIGHT, EC_WORD_NOW},
+ .monSets = gBattleFrontierTrainerMons_Amanda
+ },
+ [41] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("STACY"),
+ .speechBefore = {EC_WORD_ALL, EC_WORD_POKEMON, EC_WORD_HAVE, EC_WORD_THEIR, EC_WORD_OWN, EC_WORD_CUTE_CHARM},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_WHAT, EC_WORD_I, EC_WORD_MEAN, EC_WORD_QUES},
+ .speechLose = {EC_WORD_SHOULD, EC_WORD_I, EC_WORD_NOT, EC_WORD_ADORE, EC_WORD_POKEMON, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Stacy
+ },
+ [42] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
+ .trainerName = _("RAFAEL"),
+ .speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_SOME, EC_WORD_SPIRIT},
+ .speechWin = {EC_WORD_THAT_S_IT_EXCL, EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_SPIRIT, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_WELL, EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_OUR, EC_WORD_SPIRIT},
+ .monSets = gBattleFrontierTrainerMons_Rafael
+ },
+ [43] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
+ .trainerName = _("OLIVER"),
+ .speechBefore = {EC_WORD_A, EC_WORD_GENIUS, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_WORKS, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_THAN, EC_WORD_I_AM},
+ .monSets = gBattleFrontierTrainerMons_Oliver
+ },
+ [44] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
+ .trainerName = _("PAYTON"),
+ .speechBefore = {EC_WORD_I, EC_WORD_TRAIN, EC_WORD_FROM, EC_WORD_THE, EC_WORD_EGG, EC_WORD_UP},
+ .speechWin = {EC_WORD_WELL, EC_WORD_DONE, EC_WORD_EXCL, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_A, EC_MOVE2(SOFT_BOILED), EC_WORD_LOSS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Payton
+ },
+ [45] = {
+ .facilityClass = FACILITY_CLASS_POKEMON_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},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_KIND, EC_WORD_AND, EC_WORD_YOU_RE, EC_WORD_ALSO, EC_WORD_STRONG},
+ .monSets = gBattleFrontierTrainerMons_Pamela
+ },
+ [46] = {
+ .facilityClass = FACILITY_CLASS_POKEMON_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},
+ .speechLose = {EC_WORD_OH_DEAR, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_WORD_ABOUT, EC_WORD_THIS},
+ .monSets = gBattleFrontierTrainerMons_Eliza
+ },
+ [47] = {
+ .facilityClass = FACILITY_CLASS_POKEMON_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},
+ .speechLose = {EC_WORD_PROMISE, EC_WORD_ME, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_PLEASE, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Marisa
+ },
+ [48] = {
+ .facilityClass = FACILITY_CLASS_BUG_CATCHER,
+ .trainerName = _("LEWIS"),
+ .speechBefore = {EC_WORD_A_LITTLE, EC_WORD_BUG, EC_WORD_IS, EC_WORD_SCARY, EC_WORD_QUES, EC_WORD_HAHAHA},
+ .speechWin = {EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL, EC_WORD_A, EC_WORD_SCARY, EC_WORD_BUG},
+ .speechLose = {EC_WORD_OH, EC_WORD_A, EC_WORD_BUG, EC_WORD_ISN_T, EC_WORD_SCARY, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Lewis
+ },
+ [49] = {
+ .facilityClass = FACILITY_CLASS_BUG_CATCHER,
+ .trainerName = _("YOSHI"),
+ .speechBefore = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_LOVEY_DOVEY},
+ .speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_THE, EC_WORD_BEST, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_IGNORANT, EC_WORD_ABOUT, EC_WORD_BUG, EC_WORD_POKEMON, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Yoshi
+ },
+ [50] = {
+ .facilityClass = FACILITY_CLASS_BUG_CATCHER,
+ .trainerName = _("DESTIN"),
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_WAY, EC_WORD_TOO, EC_WORD_HOT, EC_WORD_HERE, 0xFFFF},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_ABOUT, EC_WORD_TO, EC_MOVE(OVERHEAT), 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_SOME, EC_WORD_WATER, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Destin
+ },
+ [51] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("KEON"),
+ .speechBefore = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_BUT, EC_WORD_HERE_I_COME, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_FOR, EC_WORD_MY, EC_WORD_OVERWHELMING, EC_WORD_POWER},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Keon
+ },
+ [52] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("STUART"),
+ .speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_YOU, EC_WORD_A, EC_WORD_HOT, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_THE, EC_WORD_MASTER, EC_WORD_OF, EC_WORD_COOL, EC_WORD_THAT_S, EC_WORD_ME},
+ .speechLose = {EC_WORD_I, EC_WORD_SEE, EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_SO, EC_WORD_COOL},
+ .monSets = gBattleFrontierTrainerMons_Stuart
+ },
+ [53] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("NESTOR"),
+ .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_REALLY, EC_WORD_SMOOTH, EC_WORD_MOVE},
+ .speechWin = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_NOTHING, EC_WORD_SMOOTH, EC_WORD_ABOUT, EC_WORD_THAT},
+ .speechLose = {EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SMOOTH, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Nestor
+ },
+ [54] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("DERRICK"),
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_YOU, EC_MOVE2(MEDITATE), EC_WORD_LIKE, EC_WORD_ME},
+ .speechWin = {EC_WORD_HOW, EC_WORD_I, EC_MOVE2(MEDITATE), EC_WORD_IS, EC_WORD_JUST, EC_WORD_BEAUTIFUL},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(MEDITATE), EC_WORD_FOR, EC_WORD_A, EC_MOVE2(CALM_MIND)},
+ .monSets = gBattleFrontierTrainerMons_Derrick
+ },
+ [55] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("BRYSON"),
+ .speechBefore = {EC_MOVE2(POISON_POWDER), EC_WORD_IS, EC_WORD_IN, EC_WORD_OUR, EC_MOVE2(COTTON_SPORE), EC_WORD_MOVE},
+ .speechWin = {EC_WORD_HOW_DO, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_OUR, EC_MOVE2(POISON_POWDER), EC_WORD_QUES},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(COTTON_SPORE), EC_WORD_WAS, EC_WORD_USELESS, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Bryson
+ },
+ [56] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("CLAYTON"),
+ .speechBefore = {EC_WORD_HUH_QUES, 0xFFFF, 0xFFFF, EC_WORD_WHERE, EC_WORD_IS_IT_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_POKENAV},
+ .speechLose = {EC_WORD_WHERE, EC_WORD_IS_IT_QUES, EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_MY, EC_WORD_SENSE},
+ .monSets = gBattleFrontierTrainerMons_Clayton
+ },
+ [57] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("TRENTON"),
+ .speechBefore = {EC_WORD_COME_OVER, EC_WORD_FOR, EC_WORD_SOME, EC_WORD_TASTY, EC_WORD_WATER, 0xFFFF},
+ .speechWin = {EC_WORD_MMM, EC_WORD_DO, EC_WORD_YOU, EC_WORD_WANT, EC_WORD_SOME, EC_WORD_QUES},
+ .speechLose = {EC_WORD_I, EC_WORD_GOT, EC_WORD_THIS, EC_WORD_TASTY, EC_WORD_WATER, EC_WORD_SHOPPING},
+ .monSets = gBattleFrontierTrainerMons_Trenton
+ },
+ [58] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("JENSON"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_DOWNCAST},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THE, EC_MOVE(CUT)},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_TRAINER, EC_WORD_WHO_IS, EC_WORD_FEELING, EC_WORD_DOWNCAST},
+ .monSets = gBattleFrontierTrainerMons_Jenson
+ },
+ [59] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("WESLEY"),
+ .speechBefore = {EC_POKEMON2(MEW), EC_POKEMON2(MEW), EC_WORD_IS, EC_WORD_HOW, EC_WORD_I, EC_WORD_CRY},
+ .speechWin = {EC_WORD_YES, EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_EXCL},
+ .speechLose = {EC_POKEMON2(MEW), EC_POKEMON2(MEW), EC_WORD_EXCL, EC_POKEMON2(MEW), EC_WORD_EXCL_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Wesley
+ },
+ [60] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("ANTON"),
+ .speechBefore = {EC_WORD_GET, EC_WORD_READY, EC_WORD_FOR, EC_WORD_ME, EC_WORD_TO, EC_MOVE(THRASH)},
+ .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_WORD_SORRY, EC_WORD_ABOUT, EC_WORD_THAT, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_TOUGH, EC_WORD_LOSS, EC_WORD_TO, EC_MOVE2(SWALLOW)},
+ .monSets = gBattleFrontierTrainerMons_Anton
+ },
+ [61] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("LAWSON"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AT, EC_WORD_HEART, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_NOT, EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_NOT, EC_WORD_AT, EC_WORD_ALL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_OLD, EC_WORD_AND, EC_WORD_FEELING, EC_WORD_SHAKY, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Lawson
+ },
+ [62] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("SAMMY"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_PARTY, EC_WORD_IS, EC_WORD_READY, EC_WORD_TO, EC_WORD_ROCK},
+ .speechWin = {EC_WORD_MY, EC_WORD_PARTY, EC_WORD_IS, EC_WORD_JUST, EC_WORD_INCREDIBLE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_CRY, EC_WORD_FOR, EC_WORD_MY, EC_WORD_PARTY, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Sammy
+ },
+ [63] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("ARNIE"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_I, EC_WORD_HAVE, EC_WORD_NO, EC_WORD_RIVAL},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE},
+ .speechLose = {EC_WORD_NO, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WON_T, EC_WORD_ACCEPT, EC_WORD_THIS},
+ .monSets = gBattleFrontierTrainerMons_Arnie
+ },
+ [64] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("ADRIAN"),
+ .speechBefore = {EC_WORD_YAHOO, EC_WORD_EXCL, 0xFFFF, EC_WORD_YAHOO, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_GOOD_BYE, EC_WORD_EXCL, 0xFFFF, EC_WORD_GOOD_BYE, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Adrian
+ },
+ [65] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("TRISTAN"),
+ .speechBefore = {EC_WORD_CONFUSED, EC_WORD_QUES, 0xFFFF, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
+ .speechWin = {EC_WORD_SEE, EC_WORD_QUES, 0xFFFF, EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_IN, EC_WORD_BATTLE},
+ .monSets = gBattleFrontierTrainerMons_Tristan
+ },
+ [66] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("JULIANA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_SHOPPING, EC_WORD_TOO, EC_WORD_MUCH},
+ .speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_PLUSH_DOLL},
+ .speechLose = {EC_WORD_I, EC_WORD_SO, EC_WORD_WANT, EC_WORD_ANOTHER, EC_WORD_POKEMON, EC_WORD_PLUSH_DOLL},
+ .monSets = gBattleFrontierTrainerMons_Juliana
+ },
+ [67] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("RYLEE"),
+ .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS},
+ .speechWin = {EC_WORD_BYE_BYE, EC_WORD_EXCL, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_NO, EC_WORD_GUTS},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_GUTSY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_QUITE, EC_WORD_SUPER},
+ .monSets = gBattleFrontierTrainerMons_Rylee
+ },
+ [68] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("CHELSEA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_SERIOUSLY, EC_WORD_MEAN, EC_WORD_TO, EC_WORD_WIN, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MY, EC_WORD_WILL, EC_WORD_TO, EC_WORD_WIN, 0xFFFF},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Chelsea
+ },
+ [69] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("DANELA"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_MUST_BE, EC_WORD_MY, EC_WORD_OPPONENT, EC_WORD_NOW, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_OH_DEAR, EC_WORD_TOO_WEAK, EC_WORD_EXCL, EC_WORD_DON_T, EC_WORD_GIVE_UP, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_GOOD, EC_WORD_AND, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE},
+ .monSets = gBattleFrontierTrainerMons_Danela
+ },
+ [70] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("LIZBETH"),
+ .speechBefore = {EC_WORD_IF_I_LOSE, EC_WORD_YOU, EC_WORD_CAN, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(PRESENT)},
+ .speechWin = {EC_WORD_HERE_IT_IS, EC_WORD_A_LITTLE, EC_WORD_PRAISE, EC_WORD_AS, EC_WORD_YOUR, EC_MOVE2(PRESENT)},
+ .speechLose = {EC_WORD_YOUR, EC_MOVE2(PRESENT), EC_WORD_QUES_EXCL, EC_WORD_HERE_IT_IS, EC_WORD_A, EC_MOVE(DOUBLE_SLAP)},
+ .monSets = gBattleFrontierTrainerMons_Lizbeth
+ },
+ [71] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("AMELIA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_BELIEVE, EC_WORD_IN, EC_WORD_CUTE, EC_WORD_FASHION, EC_WORD_APPEAL},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_A, EC_WORD_DISASTER},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_AWFUL, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_HOME},
+ .monSets = gBattleFrontierTrainerMons_Amelia
+ },
+ [72] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("JILLIAN"),
+ .speechBefore = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_THAT, EC_WORD_I, EC_WORD_SMELL, EC_WORD_QUES},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_THE, EC_MOVE(SWEET_SCENT), EC_WORD_OF, EC_WORD_TASTY, EC_WORD_WATER},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_YOUR, EC_WORD_OFFENSIVE, EC_WORD_STENCH, EC_WORD_THAT_S, EC_WORD_WHAT},
+ .monSets = gBattleFrontierTrainerMons_Jillian
+ },
+ [73] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("ABBIE"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_TRY, EC_WORD_MY, EC_WORD_SECRET, EC_MOVE(AROMATHERAPY), EC_WORD_OK_QUES},
+ .speechWin = {EC_WORD_MY, EC_MOVE(AROMATHERAPY), EC_WORD_IS, EC_WORD_TERRIBLE, EC_WORD_FOR, EC_WORD_YOU},
+ .speechLose = {EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_SMELL, EC_WORD_A, EC_WORD_THING, EC_WORD_QUES_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Abbie
+ },
+ [74] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("BRIANA"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_WORKS, EC_WORD_TOO, EC_WORD_MUCH},
+ .speechWin = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_MISS, EC_WORD_HIM, EC_WORD_MORE, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_LONESOME, EC_WORD_WITHOUT, EC_WORD_HIM, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Briana
+ },
+ [75] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("ANTONIO"),
+ .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_TO, EC_WORD_GO, EC_WORD_GO},
+ .speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_DON_T, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_DANCE},
+ .speechLose = {EC_WORD_GO, EC_WORD_GO, EC_WORD_ELLIPSIS, EC_WORD_JUST, EC_MOVE(FLAIL), EC_WORD_ABOUT},
+ .monSets = gBattleFrontierTrainerMons_Antonio
+ },
+ [76] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("JADEN"),
+ .speechBefore = {EC_WORD_HELLO, EC_WORD_I, EC_WORD_THINK, EC_WORD_I, EC_WORD_ADORE, EC_WORD_YOU},
+ .speechWin = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_MOVE(THRASH), EC_WORD_IN, EC_MOVE2(FRUSTRATION)},
+ .speechLose = {EC_WORD_THIS_IS_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_GOOD_BYE, EC_WORD_FOREVER, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Jaden
+ },
+ [77] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("DAKOTA"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER},
+ .speechWin = {EC_WORD_GOT, EC_WORD_IT, EC_WORD_QUES, EC_WORD_DANCE, EC_WORD_WITH, EC_WORD_POWER},
+ .speechLose = {EC_WORD_OKAY, EC_WORD_YOU, EC_WORD_UNDERSTAND, EC_WORD_ALL_RIGHT, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Dakota
+ },
+ [78] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("BRAYDEN"),
+ .speechBefore = {EC_WORD_COLOR_CHANGE, EC_WORD_VERSION, EC_WORD_TOYS, EC_WORD_ARE, EC_WORD_USELESS, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_COLLECT, EC_WORD_NORMAL, EC_WORD_VERSION, EC_WORD_TOYS},
+ .speechLose = {EC_WORD_I, EC_MOVE2(ATTRACT), EC_WORD_COLOR_CHANGE, EC_WORD_VERSION, EC_WORD_TOYS, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Brayden
+ },
+ [79] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("CORSON"),
+ .speechBefore = {EC_WORD_I, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(BEAT_UP), EC_WORD_ON, EC_WORD_YOU},
+ .speechWin = {EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_COOL},
+ .speechLose = {EC_WORD_WHY, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_I, EC_MOVE2(CURSE), EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Corson
+ },
+ [80] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("TREVIN"),
+ .speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NONE, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_ME},
+ .speechWin = {EC_WORD_YES_SIR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_I_AM, EC_WORD_THE, EC_WORD_BEST},
+ .speechLose = {EC_WORD_SERIOUS, EC_WORD_QUES_EXCL, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Trevin
+ },
+ [81] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("PATRICK"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_EXCL, EC_WORD_GIVE_UP, EC_WORD_NOW, 0xFFFF},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_DISAPPOINTED, EC_WORD_I_AM, EC_WORD_PERFECT, 0xFFFF},
+ .speechLose = {EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_PERFECT, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Patrick
+ },
+ [82] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("KADEN"),
+ .speechBefore = {EC_WORD_WHAT, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_UP, EC_WORD_TO, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOU, EC_WORD_WERE, EC_WORD_A, EC_WORD_SURPRISE, EC_WORD_TO_ME, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_WHO, EC_WORD_I_AM, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Kaden
+ },
+ [83] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("MAXWELL"),
+ .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_WHO_IS, EC_WORD_YOUR, EC_WORD_RIVAL, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_MY, EC_WORD_RIVAL, EC_WORD_IS, EC_WORD_MY, EC_WORD_GIRL, EC_WORD_FRIEND},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_MAKING, EC_WORD_YOU, EC_WORD_MY, EC_WORD_RIVAL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Maxwell
+ },
+ [84] = {
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .trainerName = _("DARYL"),
+ .speechBefore = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_TO, EC_MOVE(CHARGE)},
+ .speechWin = {EC_WORD_AM, EC_WORD_I, EC_WORD_OVERWHELMING, EC_WORD_OR, EC_WORD_WHAT, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_A, EC_WORD_LEGEND, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Daryl
+ },
+ [85] = {
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .trainerName = _("KENNETH"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_BETTER, EC_WORD_NOT, EC_MOVE2(SLACK_OFF), EC_WORD_WITH, EC_WORD_ME},
+ .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_MOVE2(TAUNT), EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Kenneth
+ },
+ [86] = {
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .trainerName = _("RICH"),
+ .speechBefore = {EC_WORD_YOUR, EC_MOVE(FACADE), EC_WORD_DOESN_T, EC_MOVE2(TRICK), EC_WORD_ME, 0xFFFF},
+ .speechWin = {EC_WORD_SERIOUSLY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_OK_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_REALLY, EC_WORD_TOUGH, EC_WORD_ON, EC_WORD_ME, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Rich
+ },
+ [87] = {
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .trainerName = _("CADEN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_DEFEATED, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_FIRE, EC_WORD_EXCL, 0xFFFF, EC_WORD_FIRE, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_SO, EC_WORD_HOT},
+ .monSets = gBattleFrontierTrainerMons_Caden
+ },
+ [88] = {
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .trainerName = _("MARLON"),
+ .speechBefore = {EC_WORD_A, EC_WORD_POKEDEX, EC_WORD_IS, EC_WORD_A_LITTLE, EC_WORD_RADIO, EC_WORD_QUES},
+ .speechWin = {EC_WORD_A_LITTLE, EC_WORD_RADIO, EC_WORD_HUH_QUES, EC_WORD_THAT_S, EC_WORD_TOTALLY, EC_WORD_COOL},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_QUES, EC_WORD_IS, EC_WORD_POKENAV, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Marlon
+ },
+ [89] = {
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .trainerName = _("NASH"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_BABY, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_LEFT, EC_WORD_YOU, EC_WORD_JUST, EC_WORD_AN, EC_MOVE2(EMBER)},
+ .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_WATER, EC_WORD_PLEASE},
+ .monSets = gBattleFrontierTrainerMons_Nash
+ },
+ [90] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ .trainerName = _("ROBBY"),
+ .speechBefore = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_HAPPY, EC_WORD_TO, EC_WORD_MEET_YOU, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_LEADER, EC_WORD_WITH, EC_WORD_REFRESHING, EC_WORD_SERENE_GRACE},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(THRASH), EC_WORD_MY, EC_WORD_TOYS, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Robby
+ },
+ [91] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ .trainerName = _("REECE"),
+ .speechBefore = {EC_WORD_MY, EC_MOVE2(QUICK_ATTACK), EC_WORD_CAN, EC_WORD_BEAT, EC_WORD_A, EC_MOVE2(TELEPORT)},
+ .speechWin = {EC_WORD_LIKE, EC_WORD_I, EC_WORD_SAID, EC_WORD_I_AM, EC_WORD_DARN, EC_WORD_FAST},
+ .speechLose = {EC_WORD_I_WAS, EC_WORD_KIDDING, EC_WORD_ABOUT, EC_WORD_THAT, EC_MOVE2(TELEPORT), EC_WORD_THING},
+ .monSets = gBattleFrontierTrainerMons_Reece
+ },
+ [92] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ .trainerName = _("KATHRYN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_TRAIN, EC_WORD_GOOD, EC_WORD_ENOUGH, EC_WORD_QUES},
+ .speechWin = {EC_WORD_DON_T, EC_MOVE2(TAUNT), EC_WORD_ME, EC_WORD_LIKE, EC_WORD_THAT, EC_WORD_OK_QUES},
+ .speechLose = {EC_WORD_WHY, EC_WORD_COULDN_T, EC_WORD_I, EC_WORD_WIN, EC_WORD_THIS, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Kathryn
+ },
+ [93] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ .trainerName = _("ELLEN"),
+ .speechBefore = {EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_AN, EC_WORD_EGG, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_A, EC_WORD_TASTY, EC_WORD_VICTORY, EC_WORD_FOR, EC_WORD_ME},
+ .speechLose = {EC_WORD_TOO, EC_WORD_TOUGH, EC_WORD_TO, EC_WORD_CRUSH, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Ellen
+ },
+ [94] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("RAMON"),
+ .speechBefore = {EC_WORD_OKAY, EC_WORD_EXCL, 0xFFFF, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PERFECTION},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_THAT, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_SECRET, EC_WORD_WHY, EC_WORD_I_AM, EC_WORD_HAPPY},
+ .monSets = gBattleFrontierTrainerMons_Ramon
+ },
+ [95] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("ARTHUR"),
+ .speechBefore = {EC_WORD_HERE_I_COME, EC_WORD_FEELING, EC_WORD_READY, EC_WORD_FOR, EC_WORD_IT, EC_WORD_ALL},
+ .speechWin = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_THAT_WAS, EC_WORD_FABULOUS, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Arthur
+ },
+ [96] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("ALONDRA"),
+ .speechBefore = {EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_IS, EC_WORD_A, EC_WORD_GREAT, EC_WORD_DAY},
+ .speechWin = {EC_WORD_MY, EC_MOVE2(DIVE), EC_WORD_WILL, EC_WORD_BE, EC_WORD_A, EC_WORD_LEGEND},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(DIVE), EC_WORD_LEFT, EC_WORD_ME, EC_WORD_COLD, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Alondra
+ },
+ [97] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("ADRIANA"),
+ .speechBefore = {EC_WORD_COME, EC_WORD_SEE, EC_WORD_AN, EC_WORD_INCREDIBLE, EC_WORD_SWIFT_SWIM, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I, EC_WORD_MAKE, EC_WORD_IT, EC_WORD_LOOK, EC_WORD_SO, EC_WORD_EASY},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_TIRED, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Adriana
+ },
+ [98] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ .trainerName = _("MALIK"),
+ .speechBefore = {EC_WORD_OH, EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_PLEASE, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_WON, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_TIRED},
+ .speechLose = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_LOST, EC_WORD_ELLIPSIS, EC_WORD_I_AM, EC_WORD_TIRED},
+ .monSets = gBattleFrontierTrainerMons_Malik
+ },
+ [99] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
+ .trainerName = _("JILL"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_WINS, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_THE, EC_MOVE2(QUICK_ATTACK), EC_WORD_TRAINER, EC_WORD_GIVES, EC_WORD_UP, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Jill
+ },
+ [100] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ .trainerName = _("ERIK"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_FROM, EC_WORD_THE, EC_WORD_SPEED_BOOST, EC_WORD_HERO, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Erik
+ },
+ [101] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ .trainerName = _("YAZMIN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_RATHER, EC_WORD_RUN, EC_WORD_THAN, EC_WORD_BIKE},
+ .speechWin = {EC_WORD_YES, EC_WORD_I, EC_WORD_WOULD, EC_WORD_MUCH, EC_WORD_RATHER, EC_WORD_RUN},
+ .speechLose = {EC_WORD_BYE_BYE, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_RUN_AWAY},
+ .monSets = gBattleFrontierTrainerMons_Yazmin
+ },
+ [102] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("JAMAL"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_FATHER},
+ .speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_FOR, EC_WORD_MY, EC_WORD_BABY},
+ .speechLose = {EC_WORD_MY, EC_WORD_BABY, EC_WORD_WILL, EC_WORD_BE, EC_WORD_TOTALLY, EC_WORD_AWESOME},
+ .monSets = gBattleFrontierTrainerMons_Jamal
+ },
+ [103] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("LESLIE"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_BE, EC_WORD_A, EC_WORD_MOTHER},
+ .speechWin = {EC_WORD_A, EC_WORD_BABY, EC_WORD_WILL, EC_WORD_BE, EC_WORD_A_LITTLE, EC_WORD_CHALLENGE},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_TOO, EC_WORD_HAPPY, EC_WORD_TO, EC_WORD_BE, EC_WORD_ANGRY},
+ .monSets = gBattleFrontierTrainerMons_Leslie
+ },
+ [104] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ .trainerName = _("DAVE"),
+ .speechBefore = {EC_WORD_WHAT, EC_WORD_SHOULD, EC_WORD_I, EC_WORD_DO, EC_WORD_TODAY, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I, EC_WORD_SHOULD, EC_WORD_ENJOY, EC_WORD_SOME, EC_WORD_SPORTS, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_WORD_PLAY, EC_WORD_A, EC_WORD_GAME},
+ .monSets = gBattleFrontierTrainerMons_Dave
+ },
+ [105] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ .trainerName = _("CARLO"),
+ .speechBefore = {EC_WORD_HAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_DO, EC_WORD_THINGS, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_AT, EC_MOVE(EXTREME_SPEED), EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Carlo
+ },
+ [106] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
+ .trainerName = _("EMILIA"),
+ .speechBefore = {EC_WORD_ME, EC_WORD_WORRY, EC_WORD_QUES, EC_WORD_I, EC_WORD_HAVE, EC_WORD_NONE},
+ .speechWin = {EC_WORD_AHAHA, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THAT_WAS, EC_WORD_FANTASTIC, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_AHAHA, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THAT_WAS, EC_WORD_ENTERTAINING, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Emilia
+ },
+ [107] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
+ .trainerName = _("DALIA"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_VERY, EC_WORD_EXPENSIVE, 0xFFFF},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_COME, EC_WORD_NEAR, EC_WORD_MY, EC_WORD_BIKE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_MY, EC_WORD_BIKE, EC_WORD_IS, EC_WORD_MY, EC_WORD_BEST, EC_WORD_FRIEND},
+ .monSets = gBattleFrontierTrainerMons_Dalia
+ },
+ [108] = {
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .trainerName = _("HITOMI"),
+ .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_HAH, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL},
+ .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL_EXCL, 0xFFFF, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_EXCL_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Hitomi
+ },
+ [109] = {
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .trainerName = _("RICARDO"),
+ .speechBefore = {EC_WORD_COME_ON, EC_WORD_EXCL, EC_WORD_PLAY, EC_WORD_TIME, EC_WORD_IS, EC_WORD_OVER},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_OUT, EC_WORD_OF, EC_WORD_HERE, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_HIT, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Ricardo
+ },
+ [110] = {
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .trainerName = _("SHIZUKA"),
+ .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU_RE, EC_WORD_SERIOUS, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_FORGET, EC_WORD_ABOUT, EC_WORD_YOU, 0xFFFF},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_PERFECT, EC_WORD_IN, EC_WORD_EVERY, EC_WORD_WAY, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Shizuka
+ },
+ [111] = {
+ .facilityClass = FACILITY_CLASS_BATTLE_GIRL,
+ .trainerName = _("JOANA"),
+ .speechBefore = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_LOSE, EC_WORD_RIGHT, EC_WORD_AWAY},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_WINNER, EC_WORD_HEAR, EC_WORD_ME, EC_MOVE2(ROAR)},
+ .speechLose = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_ACCEPT, EC_WORD_THAT, EC_MOVE(OUTRAGE)},
+ .monSets = gBattleFrontierTrainerMons_Joana
+ },
+ [112] = {
+ .facilityClass = FACILITY_CLASS_BATTLE_GIRL,
+ .trainerName = _("KELLY"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_NIGHT, EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_REALLY, EC_WORD_SCARY},
+ .speechWin = {EC_WORD_A, EC_WORD_LADY, EC_WORD_GHOST, EC_WORD_APPEARS, EC_WORD_THERE, 0xFFFF},
+ .speechLose = {EC_WORD_THE, EC_WORD_HOME, EC_WORD_WORK, EC_WORD_IS, EC_WORD_AWFULLY, EC_WORD_SCARY},
+ .monSets = gBattleFrontierTrainerMons_Kelly
+ },
+ [113] = {
+ .facilityClass = FACILITY_CLASS_BATTLE_GIRL,
+ .trainerName = _("RAYNA"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_WHEN, EC_WORD_IT_S, EC_WORD_ABOUT, EC_WORD_POWER},
+ .speechWin = {EC_WORD_UNDERSTAND, EC_WORD_MY, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Rayna
+ },
+ [114] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("EVAN"),
+ .speechBefore = {EC_WORD_EVERY, EC_WORD_BATTLE, EC_WORD_HAS, EC_WORD_A, EC_WORD_SMELL, 0xFFFF},
+ .speechWin = {EC_WORD_OH, EC_WORD_EXCL, EC_WORD_THE, EC_MOVE(SWEET_SCENT), EC_WORD_OF, EC_WORD_VICTORY},
+ .speechLose = {EC_WORD_THE, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_OF, EC_WORD_A, EC_WORD_LOSS},
+ .monSets = gBattleFrontierTrainerMons_Evan
+ },
+ [115] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("JORDAN"),
+ .speechBefore = {EC_WORD_GOOD, EC_WORD_EXCL, 0xFFFF, EC_WORD_COME_ON, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_QUES_EXCL, 0xFFFF, EC_WORD_BUT, EC_WORD_HOW, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Jordan
+ },
+ [116] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("JOEL"),
+ .speechBefore = {EC_WORD_FUFUFU, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Joel
+ },
+ [117] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("KRISTEN"),
+ .speechBefore = {EC_WORD_HAHAHA, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_A, EC_WORD_KID, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_JUST, EC_WORD_A_LITTLE, EC_WORD_KID, EC_WORD_AFTER, EC_WORD_ALL, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_A, EC_WORD_TOUGH, EC_WORD_KID, EC_WORD_HUH_QUES, EC_WORD_HUMPH, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Kristen
+ },
+ [118] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("SELPHY"),
+ .speechBefore = {EC_WORD_HUH_QUES, EC_WORD_WHAT, EC_WORD_IS_IT_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_OH, EC_WORD_YES, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES},
+ .speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_EXCL, EC_WORD_WHY, EC_WORD_NOT, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Selphy
+ },
+ [119] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("CHLOE"),
+ .speechBefore = {EC_WORD_COME, EC_WORD_WE, EC_WORD_WILL, EC_WORD_DO, EC_WORD_BATTLE, EC_WORD_NOW},
+ .speechWin = {EC_WORD_MORE, EC_WORD_EXCL, 0xFFFF, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_STRONG, EC_WORD_YOU, EC_WORD_ARE},
+ .monSets = gBattleFrontierTrainerMons_Chloe
+ },
+ [120] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_M,
+ .trainerName = _("NORTON"),
+ .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_ONLY, EC_WORD_YOU, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_EXCUSE_ME, EC_WORD_BUT, EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_PUSHOVER, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_SOME, EC_WORD_KIND, EC_WORD_OF, EC_WORD_AWESOME, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Norton
+ },
+ [121] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_M,
+ .trainerName = _("LUKAS"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_JOKING, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TERRIBLE, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_EXISTS, EC_WORD_TO, EC_WORD_SHINE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_ROCK_HEAD, EC_WORD_COME, EC_WORD_TO, EC_WORD_SHINE, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Lukas
+ },
+ [122] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_M,
+ .trainerName = _("ZACH"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_EXCELLENT, EC_MOVE2(MIMIC), EC_WORD_OF, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_LIKE, EC_WORD_A_LITTLE, EC_POKEMON2(TOGEPI), EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_LIKE, EC_WORD_A, EC_POKEMON2(MANKEY), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Zach
+ },
+ [123] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_F,
+ .trainerName = _("KAITLYN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_CRUSH, EC_WORD_THINGS, EC_WORD_WITH, EC_WORD_PSYCHIC, EC_WORD_POWER},
+ .speechWin = {EC_WORD_MY, EC_WORD_VICTORY, EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_THE, EC_WORD_NEWS},
+ .speechLose = {EC_WORD_NO, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_WORD_THIS, EC_WORD_WON_T, EC_WORD_DO},
+ .monSets = gBattleFrontierTrainerMons_Kaitlyn
+ },
+ [124] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_F,
+ .trainerName = _("BREANNA"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_WILL, EC_WORD_CRUSH, EC_WORD_YOU, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_HAVE, EC_WORD_SOME, EC_WORD_MORE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GUTS, EC_WORD_AND, EC_WORD_SKILL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Breanna
+ },
+ [125] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_F,
+ .trainerName = _("KENDRA"),
+ .speechBefore = {EC_WORD_IF, EC_WORD_YOU_RE, EC_WORD_SMART, EC_WORD_STOP, EC_WORD_RIGHT, EC_WORD_NOW},
+ .speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_STOP},
+ .speechLose = {EC_WORD_WHY, EC_WORD_DIDN_T, EC_WORD_YOU, EC_WORD_STOP, EC_WORD_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Kendra
+ },
+ [126] = {
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .trainerName = _("MOLLY"),
+ .speechBefore = {EC_WORD_WILL, EC_WORD_MY, EC_WORD_CUTE_CHARM, EC_MOVE2(ATTRACT), EC_WORD_YOU, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_MY, EC_WORD_TOYS, EC_WORD_NOW},
+ .speechLose = {EC_WORD_OH, EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Molly
+ },
+ [127] = {
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .trainerName = _("JAZMIN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_FORECAST, EC_WORD_TERRIBLE, EC_WORD_THINGS, EC_WORD_FOR, EC_WORD_YOU},
+ .speechWin = {EC_WORD_THERE, EC_WORD_WASN_T, EC_WORD_MY, EC_WORD_FORECAST, EC_WORD_RIGHT, EC_WORD_QUES},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_DIDN_T, EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THIS},
+ .monSets = gBattleFrontierTrainerMons_Jazmin
+ },
+ [128] = {
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .trainerName = _("KELSEY"),
+ .speechBefore = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_SLEPT, EC_WORD_IN, EC_WORD_DAYS, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_MY, EC_WORD_SLEEP, EC_WORD_WILL, EC_WORD_BE, EC_WORD_EXCELLENT, EC_WORD_NOW},
+ .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_DESTROYED, EC_WORD_MY, EC_WORD_SLEEP, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Kelsey
+ },
+ [129] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("JALEN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_ALLOW, EC_WORD_POKEMON, EC_WORD_TO, EC_MOVE(THRASH)},
+ .speechWin = {EC_WORD_HAHAHA, EC_WORD_EXCL, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_ANGRY, EC_WORD_QUES},
+ .speechLose = {EC_WORD_WHY, EC_WORD_IS, EC_WORD_THIS, EC_WORD_SO, EC_WORD_HARD, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Jalen
+ },
+ [130] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("GRIFFEN"),
+ .speechBefore = {EC_WORD_I, EC_MOVE2(SWALLOW), EC_MOVE2(SLUDGE), EC_WORD_TO, EC_MOVE2(TRANSFORM), EC_WORD_MYSELF},
+ .speechWin = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GROWTH), EC_WORD_OF, EC_MOVE2(ACID_ARMOR)},
+ .speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GROWTH), EC_WORD_OF, EC_WORD_SUCTION_CUPS},
+ .monSets = gBattleFrontierTrainerMons_Griffen
+ },
+ [131] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("XANDER"),
+ .speechBefore = {EC_WORD_I, EC_WORD_GOT, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ON, EC_WORD_RENTAL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_INCREDIBLE, EC_WORD_MY, EC_WORD_RENTAL, EC_WORD_POKEMON, EC_WORD_WON},
+ .speechLose = {EC_WORD_RENTAL, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_UP, EC_WORD_TO, EC_MOVE2(SCRATCH)},
+ .monSets = gBattleFrontierTrainerMons_Xander
+ },
+ [132] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("MARVIN"),
+ .speechBefore = {EC_WORD_YOU_RE, EC_WORD_UP, EC_WORD_TO, EC_WORD_THE, EC_WORD_CHALLENGE, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_THINK, EC_WORD_YOU_RE, EC_WORD_GOOD, EC_WORD_ENOUGH},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_PERFECT, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
+ .monSets = gBattleFrontierTrainerMons_Marvin
+ },
+ [133] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("BRENNAN"),
+ .speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_TO, EC_WORD_SEE, EC_WORD_THE, EC_WORD_NEWS},
+ .speechWin = {EC_WORD_COMICS, EC_WORD_GET, EC_WORD_DAMP, EC_WORD_FROM, EC_WORD_DRIZZLE, EC_WORD_QUES},
+ .speechLose = {EC_WORD_THE, EC_WORD_TIGHT, EC_WORD_MONEY, EC_WORD_LIVING, EC_WORD_CHANNEL, EC_WORD_QUES_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Brennan
+ },
+ [134] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("BALEY"),
+ .speechBefore = {EC_MOVE(SCREECH), EC_WORD_IS, EC_WORD_LIKE, EC_WORD_MUSIC, EC_WORD_TO_ME, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_MY, EC_MOVE(SCREECH), EC_WORD_STRATEGY, EC_WORD_IS, EC_WORD_THE, EC_WORD_BEST},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_SOUNDPROOF, EC_WORD_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Baley
+ },
+ [135] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("ZACKARY"),
+ .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_MOVE(DIG), EC_WORD_IT, EC_WORD_YO, EC_WORD_QUES},
+ .speechWin = {EC_MOVE2(TAKE_DOWN), EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(DIVE), EC_WORD_YO, EC_WORD_YO},
+ .speechLose = {EC_WORD_BREAK, EC_WORD_DOWN, EC_MOVE2(DIVE), EC_WORD_TIME, EC_WORD_FOR, EC_WORD_ME},
+ .monSets = gBattleFrontierTrainerMons_Zackary
+ },
+ [136] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("GABRIEL"),
+ .speechBefore = {EC_MOVE2(POUND), EC_WORD_THE, EC_WORD_THICK_FAT, EC_WORD_ON, EC_WORD_MY, EC_MOVE2(BELLY_DRUM)},
+ .speechWin = {EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_MOVE2(POUND), EC_WORD_MY, EC_MOVE2(BELLY_DRUM)},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(BELLY_DRUM), EC_WORD_WAS, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Gabriel
+ },
+ [137] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("EMILY"),
+ .speechBefore = {EC_WORD_HOW, EC_WORD_ABOUT, EC_WORD_A_TINY_BIT, EC_WORD_OF, EC_MOVE(HYPNOSIS), EC_WORD_QUES},
+ .speechWin = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_STRATEGY, EC_WORD_WORKS, EC_WORD_TO, EC_WORD_PERFECTION},
+ .speechLose = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_STRATEGY, EC_WORD_WENT, EC_WORD_BADLY, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Emily
+ },
+ [138] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("JORDYN"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_MY, EC_WORD_SECRET, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_AS, EC_WORD_I, EC_WORD_APPEAR, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_BUT, EC_WORD_HOW, EC_WORD_DID, EC_WORD_YOU, EC_WORD_KNOW, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Jordyn
+ },
+ [139] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("SOFIA"),
+ .speechBefore = {EC_POKEMON(LOUDRED), EC_WORD_PROBABLY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), 0xFFFF},
+ .speechWin = {EC_WORD_THAT_S, EC_WORD_THE, EC_WORD_FEELING, EC_WORD_THAT, EC_WORD_I, EC_WORD_GET},
+ .speechLose = {EC_WORD_I, EC_WORD_WORK, EC_WORD_AT, EC_WORD_THE, EC_WORD_DEPT_STORE, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Sofia
+ },
+ [140] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("BRADEN"),
+ .speechBefore = {EC_WORD_I_CHOOSE_YOU, EC_WORD_EXCL, 0xFFFF, EC_WORD_THIS_IS_IT_EXCL, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_PRETTY, EC_WORD_AWESOME, EC_WORD_ABOUT, EC_WORD_MYSELF},
+ .speechLose = {EC_WORD_ALL_RIGHT, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Braden
+ },
+ [141] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("KAYDEN"),
+ .speechBefore = {EC_WORD_THEY, EC_WORD_OVERDO, EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_THAT, EC_WORD_GOURMET, EC_WORD_THING, EC_WORD_ISN_T, EC_WORD_FOR, EC_WORD_ME},
+ .speechLose = {EC_WORD_HEY, EC_WORD_THIS, EC_WORD_IS, EC_WORD_PRETTY, EC_WORD_TASTY, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Kayden
+ },
+ [142] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("COOPER"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_ABSOLUTELY, EC_WORD_BE, EC_WORD_A, EC_WORD_PUSHOVER},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_TOO, EC_WORD_EXCITING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_EXCL, 0xFFFF, EC_WORD_SORRY, EC_WORD_I_AM, EC_WORD_SORRY},
+ .monSets = gBattleFrontierTrainerMons_Cooper
+ },
+ [143] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("JULIA"),
+ .speechBefore = {EC_WORD_SPIRIT, EC_WORD_ALONE, EC_WORD_WON_T, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_WIN},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_ACCEPT, EC_WORD_THIS, EC_WORD_WITH, EC_WORD_SERENE_GRACE},
+ .speechLose = {EC_WORD_FOR_NOW, EC_WORD_GOOD_BYE, EC_WORD_BUT, EC_WORD_IT_S, EC_WORD_NOT, EC_WORD_OVER},
+ .monSets = gBattleFrontierTrainerMons_Julia
+ },
+ [144] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("AMARA"),
+ .speechBefore = {EC_WORD_WROOOAAR_EXCL, EC_WORD_EXCL_EXCL, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_READY, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_WORD_I, EC_WORD_LOSE, EC_WORD_MYSELF, EC_WORD_IF, EC_WORD_IT_S, EC_WORD_EXCITING},
+ .speechLose = {EC_WORD_THAT_S, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_MOVE2(TACKLE), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Amara
+ },
+ [145] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("LYNN"),
+ .speechBefore = {EC_WORD_YOUR, EC_WORD_SECRET, EC_WORD_CAN_T, EC_WORD_BE, EC_WORD_HIDDEN, EC_WORD_FOREVER},
+ .speechWin = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_YOUR, EC_WORD_SECRET, EC_WORD_NOW, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_MOVE(SAFEGUARD), EC_WORD_YOUR, EC_WORD_OWN, EC_WORD_SECRET},
+ .monSets = gBattleFrontierTrainerMons_Lynn
+ },
+ [146] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
+ .trainerName = _("JOVAN"),
+ .speechBefore = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_SADLY, EC_WORD_LACKING},
+ .speechWin = {EC_WORD_MY, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_COOL, EC_WORD_ISN_T_IT_QUES},
+ .speechLose = {EC_WORD_I_WAS, EC_WORD_MINUS, EC_WORD_MY, EC_WORD_NORMAL, EC_WORD_POWER, EC_WORD_TODAY},
+ .monSets = gBattleFrontierTrainerMons_Jovan
+ },
+ [147] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
+ .trainerName = _("DOMINIC"),
+ .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_THIS, EC_WORD_EXCELLENT, EC_WORD_CAMERA, 0xFFFF},
+ .speechWin = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_WAS, EC_WORD_AWFULLY, EC_WORD_EXPENSIVE, 0xFFFF},
+ .speechLose = {EC_WORD_MY, EC_WORD_CAMERA, EC_WORD_DOESN_T, EC_WORD_MISS, EC_WORD_A, EC_WORD_THING},
+ .monSets = gBattleFrontierTrainerMons_Dominic
+ },
+ [148] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
+ .trainerName = _("NIKOLAS"),
+ .speechBefore = {EC_WORD_I, EC_MOVE2(MIMIC), EC_WORD_POKEMON, EC_WORD_AFTER, EC_WORD_EVERY, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_IF_I_WIN, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON2(TAUROS)},
+ .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_PRETEND, EC_WORD_I_AM, EC_WORD_A, EC_POKEMON2(MILTANK)},
+ .monSets = gBattleFrontierTrainerMons_Nikolas
+ },
+ [149] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .trainerName = _("VALERIA"),
+ .speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_YOU, EC_WORD_WOULD, EC_WORD_NOT, EC_MOVE2(GLARE)},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_EXCL, EC_WORD_I, EC_WORD_MEAN, EC_WORD_REALLY},
+ .speechLose = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_A, EC_WORD_REALLY, EC_MOVE(SCARY_FACE), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Valeria
+ },
+ [150] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .trainerName = _("DELANEY"),
+ .speechBefore = {EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_OVER, EC_WORD_TIME, EC_WORD_TO, EC_WORD_PLAY},
+ .speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_IS, EC_WORD_FROM, EC_WORD_SCHOOL},
+ .speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_WORK, EC_WORD_NEXT, EC_WORD_WEEK},
+ .monSets = gBattleFrontierTrainerMons_Delaney
+ },
+ [151] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .trainerName = _("MEGHAN"),
+ .speechBefore = {EC_WORD_SCHOOL, EC_WORD_IS, EC_WORD_OUT, EC_WORD_TIME, EC_WORD_TO, EC_WORD_PLAY},
+ .speechWin = {EC_WORD_MY, EC_WORD_BOY, EC_WORD_FRIEND, EC_WORD_LIKES, EC_WORD_COMICS, 0xFFFF},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_BACK, EC_WORD_TO, EC_WORD_SCHOOL, EC_WORD_SOON, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Meghan
+ },
+ [152] = {
+ .facilityClass = FACILITY_CLASS_DRAGON_TAMER,
+ .trainerName = _("ROBERTO"),
+ .speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_INVINCIBLE, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_YOU, EC_WORD_WEREN_T, EC_WORD_BAD, EC_WORD_I_WAS, EC_WORD_JUST, EC_WORD_BETTER},
+ .speechLose = {EC_WORD_AREN_T, EC_WORD_YOU, EC_WORD_SATISFIED, EC_WORD_YET, EC_WORD_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Roberto
+ },
+ [153] = {
+ .facilityClass = FACILITY_CLASS_DRAGON_TAMER,
+ .trainerName = _("DAMIAN"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_PURE_POWER, EC_WORD_IS, EC_WORD_MACHINE, EC_WORD_LIKE, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_MY, EC_MOVE2(MACH_PUNCH), EC_WORD_WILL, EC_WORD_MAKE, EC_WORD_A, EC_MOVE(BRICK_BREAK)},
+ .speechLose = {EC_WORD_ARRGH, EC_WORD_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Damian
+ },
+ [154] = {
+ .facilityClass = FACILITY_CLASS_DRAGON_TAMER,
+ .trainerName = _("BRODY"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_SEEMS, EC_POKEMON(ODDISH), EC_WORD_QUES},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_MY, EC_WORD_FAMILY, EC_WORD_STAY_AT_HOME, EC_WORD_LOOK, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_QUESTION, EC_WORD_YOUR, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_SERIOUSLY},
+ .monSets = gBattleFrontierTrainerMons_Brody
+ },
+ [155] = {
+ .facilityClass = FACILITY_CLASS_DRAGON_TAMER,
+ .trainerName = _("GRAHAM"),
+ .speechBefore = {EC_WORD_YEAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL, EC_WORD_WAHAHAHA, EC_WORD_WAHAHAHA, EC_WORD_EXCL_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_MY, EC_WORD_BAD},
+ .monSets = gBattleFrontierTrainerMons_Graham
+ },
+ [156] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("TYLOR"),
+ .speechBefore = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_FEELING, EC_WORD_MY, EC_MOVE2(HEAT_WAVE), EC_WORD_QUES},
+ .speechWin = {EC_WORD_YES, EC_WORD_I_AM, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_BUT, EC_WORD_I_WAS, EC_WORD_ON, EC_WORD_FIRE, EC_WORD_FOR, EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Tylor
+ },
+ [157] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("JAREN"),
+ .speechBefore = {EC_WORD_FIGHTING, EC_WORD_SPIRIT, EC_WORD_QUES, EC_WORD_ME, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MORE, EC_WORD_CUTE, EC_WORD_POKEMON, 0xFFFF},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_LOOK, EC_WORD_QUITE, EC_WORD_CUTE, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Jaren
+ },
+ [158] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
+ .trainerName = _("CORDELL"),
+ .speechBefore = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_DECIDED, EC_WORD_ON, EC_WORD_SPIRIT},
+ .speechWin = {EC_WORD_CAN_T, EC_WORD_YOU, EC_WORD_ACCEPT, EC_WORD_THAT, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_BE, EC_WORD_ON, EC_WORD_MY, EC_WORD_WAY},
+ .monSets = gBattleFrontierTrainerMons_Cordell
+ },
+ [159] = {
+ .facilityClass = FACILITY_CLASS_POKEMON_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},
+ .speechLose = {EC_WORD_AN, EC_WORD_AVANT_GARDE, EC_WORD_POKEDEX, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_AWESOME},
+ .monSets = gBattleFrontierTrainerMons_Jazlyn
+ },
+ [160] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("ZACHERY"),
+ .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_MY, EC_WORD_OWN, EC_WORD_PLACE, EC_WORD_YEEHAW_EXCL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_AN, EC_WORD_EXCITING, EC_WORD_TIME, EC_WORD_FOR, EC_WORD_ME},
+ .speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_FLATTEN, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Zachery
+ },
+ [161] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("JOHAN"),
+ .speechBefore = {EC_WORD_WINTER, EC_WORD_WILL, EC_WORD_SOON, EC_WORD_BE, EC_WORD_HERE, 0xFFFF},
+ .speechWin = {EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_COULD, EC_WORD_USE, EC_WORD_A, EC_MOVE2(HELPING_HAND)},
+ .speechLose = {EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_USE, EC_WORD_MY, EC_WORD_ALLOWANCE, EC_WORD_UP},
+ .monSets = gBattleFrontierTrainerMons_Johan
+ },
+ [162] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("SHEA"),
+ .speechBefore = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_BATTLE, EC_WORD_WITH, EC_WORD_BEAUTY, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOU, EC_WORD_BATTLE, EC_WORD_IN, EC_WORD_AN, EC_WORD_UGLY, EC_WORD_WAY},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_BEAUTY, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Shea
+ },
+ [163] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("KAILA"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_THIRSTY, EC_WORD_RIGHT, EC_WORD_NOW, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_I, EC_WORD_COULD, EC_WORD_USE, EC_WORD_A, EC_WORD_COLD, EC_WORD_DRINK},
+ .speechLose = {EC_WORD_THAT, EC_WORD_LOSS, EC_WORD_IS, EC_WORD_HARD, EC_WORD_TO, EC_MOVE2(SWALLOW)},
+ .monSets = gBattleFrontierTrainerMons_Kaila
+ },
+ [164] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
+ .trainerName = _("ISIAH"),
+ .speechBefore = {EC_WORD_I, EC_WORD_PRETEND, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_A_LOT, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_MOVE2(TRICK), EC_WORD_MOTHER, EC_WORD_FOR, EC_WORD_MY, EC_WORD_ALLOWANCE},
+ .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_WANT, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE},
+ .monSets = gBattleFrontierTrainerMons_Isiah
+ },
+ [165] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_M,
+ .trainerName = _("GARRETT"),
+ .speechBefore = {EC_WORD_I, EC_WORD_ENJOY, EC_WORD_COMICS, EC_WORD_AND, EC_WORD_THIS, EC_WORD_GAME},
+ .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_THIS, EC_WORD_MUSIC, EC_WORD_IDOL, EC_WORD_TOO},
+ .speechLose = {EC_WORD_BUT, EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MORE},
+ .monSets = gBattleFrontierTrainerMons_Garrett
+ },
+ [166] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("HAYLIE"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WORRY, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_SLEEP},
+ .speechWin = {EC_WORD_A, EC_WORD_WIN, EC_WORD_GIVES, EC_WORD_ME, EC_WORD_A, EC_MOVE2(CALM_MIND)},
+ .speechLose = {EC_WORD_MY, EC_WORD_INSOMNIA, EC_WORD_WILL, EC_WORD_GET, EC_WORD_BAD, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Haylie
+ },
+ [167] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("MEGAN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_BELIEVE, EC_WORD_IN, EC_WORD_AN, EC_MOVE(AROMATHERAPY), EC_WORD_BATH},
+ .speechWin = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_HEALTHY, EC_WORD_CLEAR_BODY, 0xFFFF},
+ .speechLose = {EC_WORD_IF, EC_WORD_ONLY, EC_MOVE(AROMATHERAPY), EC_WORD_WERE, EC_WORD_LESS, EC_WORD_EXPENSIVE},
+ .monSets = gBattleFrontierTrainerMons_Megan
+ },
+ [168] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("ISSAC"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_HOBBY, EC_WORD_QUES, 0xFFFF, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(WATER_SPORT)},
+ .speechLose = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_ANY, EC_WORD_KIND, EC_WORD_OF, EC_MOVE2(MUD_SPORT)},
+ .monSets = gBattleFrontierTrainerMons_Issac
+ },
+ [169] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("QUINTON"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_SAD, EC_WORD_CAUSE, EC_WORD_I_AM, EC_WORD_TOO_WEAK, 0xFFFF},
+ .speechWin = {EC_WORD_YOU, EC_WORD_AREN_T, EC_WORD_TOO_STRONG, EC_WORD_FOR, EC_WORD_ME, 0xFFFF},
+ .speechLose = {EC_WORD_HEY, EC_WORD_WHAT, EC_WORD_DID, EC_WORD_I, EC_WORD_DO, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Quinton
+ },
+ [170] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("SALMA"),
+ .speechBefore = {EC_WORD_YOU_VE, EC_WORD_GOT, EC_WORD_YOUR, EC_WORD_HUSTLE, EC_WORD_ON, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I, EC_WORD_WIN, EC_WORD_YOU, EC_WORD_HUSTLE, EC_WORD_ON, EC_WORD_OUT},
+ .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_HOW, EC_WORD_I, EC_WORD_LOST},
+ .monSets = gBattleFrontierTrainerMons_Salma
+ },
+ [171] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("ANSLEY"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_BORED, EC_WORD_ELLIPSIS, EC_WORD_DANCE, EC_WORD_FOR, EC_WORD_ME},
+ .speechWin = {EC_WORD_YOU_VE, EC_WORD_BORED, EC_WORD_ME, EC_WORD_SOME, EC_WORD_MORE, 0xFFFF},
+ .speechLose = {EC_WORD_TAKE, EC_WORD_YOUR, EC_MOVE2(FRUSTRATION), EC_WORD_SOME, EC_WORD_OTHER, EC_WORD_PLACE},
+ .monSets = gBattleFrontierTrainerMons_Ansley
+ },
+ [172] = {
+ .facilityClass = FACILITY_CLASS_BUG_CATCHER,
+ .trainerName = _("HOLDEN"),
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_COMMEMORATE, EC_WORD_MY, EC_WORD_COOLNESS, EC_WORD_IN, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_FOR, EC_WORD_ANY, EC_WORD_PRAISE, 0xFFFF},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_BATTLE, EC_WORD_SENSE, EC_WORD_IS, EC_WORD_AMUSING, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Holden
+ },
+ [173] = {
+ .facilityClass = FACILITY_CLASS_BUG_CATCHER,
+ .trainerName = _("LUCA"),
+ .speechBefore = {EC_WORD_WE, EC_WORD_WILL, EC_WORD_HAVE, EC_WORD_A, EC_WORD_COOL, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_IN, EC_WORD_A, EC_WORD_COOL, EC_WORD_WAY},
+ .speechLose = {EC_WORD_HELLO, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_JUST, EC_WORD_A, EC_WORD_KID},
+ .monSets = gBattleFrontierTrainerMons_Luca
+ },
+ [174] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("JAMISON"),
+ .speechBefore = {EC_WORD_MY, EC_MOVE2(SECRET_POWER), EC_WORD_IS, EC_WORD_OVERWHELMING, EC_WORD_TO, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_USE, EC_MOVE(SMOKESCREEN), EC_WORD_TO, EC_WORD_ESCAPE},
+ .monSets = gBattleFrontierTrainerMons_Jamison
+ },
+ [175] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("GUNNAR"),
+ .speechBefore = {EC_WORD_I, EC_MOVE(CUT), EC_WORD_DOWN, EC_WORD_EVERY, EC_WORD_OPPONENT, 0xFFFF},
+ .speechWin = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_FOR, EC_WORD_YOUR, EC_WORD_LOSS},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_LOSE, EC_WORD_THAT, EC_MOVE(SCARY_FACE), EC_WORD_OF, EC_WORD_YOURS},
+ .monSets = gBattleFrontierTrainerMons_Gunnar
+ },
+ [176] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("CRAIG"),
+ .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_FOR, EC_WORD_MY, EC_WORD_TRAIN},
+ .speechWin = {EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_ISN_T, EC_WORD_HERE, EC_WORD_YET, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_HERE_IT_IS, EC_WORD_MY, EC_WORD_TRAIN, EC_WORD_SEE_YA, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Craig
+ },
+ [177] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("PIERCE"),
+ .speechBefore = {EC_WORD_THERE, EC_WORD_WAS, EC_WORD_A, EC_MOVE2(HEAT_WAVE), EC_WORD_LAST, EC_WORD_WEEK},
+ .speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(HEAT_WAVE), 0xFFFF},
+ .speechLose = {EC_WORD_DIDN_T, EC_WORD_IT, EC_MOVE(HAIL), EC_WORD_TOO, EC_WORD_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Pierce
+ },
+ [178] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("REGINA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_PLAY, EC_WORD_IN, EC_WORD_WATER},
+ .speechWin = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_COME, EC_WORD_OUT, 0xFFFF},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_NOT, EC_WORD_MUCH, EC_WORD_GOOD, EC_WORD_IN, EC_WORD_WATER},
+ .monSets = gBattleFrontierTrainerMons_Regina
+ },
+ [179] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("ALISON"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_KINDERGARTEN, EC_WORD_MAGAZINE, EC_WORD_IS, EC_WORD_TOO, EC_WORD_MUCH},
+ .speechWin = {EC_WORD_HOW, EC_WORD_TO, EC_WORD_BUG, EC_WORD_YOUR, EC_WORD_TEACHER, EC_WORD_QUES},
+ .speechLose = {EC_WORD_ENJOY, EC_WORD_A, EC_WORD_TASTY, EC_WORD_SCHOOL, EC_WORD_DIET, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Alison
+ },
+ [180] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("HANK"),
+ .speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_A, EC_WORD_BUG, EC_WORD_EVENT, EC_WORD_SOON},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_BUG, EC_WORD_FASHION, EC_WORD_SHOW, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Hank
+ },
+ [181] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("EARL"),
+ .speechBefore = {EC_WORD_THE, EC_WORD_INVINCIBLE, EC_WORD_BUG, EC_WORD_TRAINER, EC_WORD_IS, EC_WORD_HERE},
+ .speechWin = {EC_WORD_THE, EC_WORD_INVINCIBLE, EC_WORD_BUG, EC_WORD_TRAINER, EC_WORD_AM, EC_WORD_I},
+ .speechLose = {EC_WORD_SEE, EC_WORD_HOW, EC_WORD_FAST, EC_WORD_I, EC_WORD_RUN_AWAY, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Earl
+ },
+ [182] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("RAMIRO"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WENT, EC_WORD_TO, EC_WORD_A, EC_WORD_FISHING, EC_WORD_SCHOOL},
+ .speechWin = {EC_WORD_SERIOUSLY, EC_WORD_I_AM, EC_WORD_IN, EC_WORD_THE, EC_WORD_FISHING, EC_WORD_HALL_OF_FAME},
+ .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_BACK, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Ramiro
+ },
+ [183] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("HUNTER"),
+ .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_A, EC_WORD_TOTALLY, EC_WORD_COOL, EC_MOVE(CROSS_CHOP)},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_TOO_WEAK, EC_WORD_TO, EC_WORD_DO, EC_WORD_A, EC_MOVE(CROSS_CHOP)},
+ .speechLose = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_A, EC_WORD_MISTAKE, EC_WORD_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Hunter
+ },
+ [184] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("AIDEN"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_WORK, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_HEALTHY},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_HEALTHY, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_HEALTHY, EC_WORD_THAN, EC_WORD_I_AM, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Aiden
+ },
+ [185] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("XAVIER"),
+ .speechBefore = {EC_WORD_HEY_THERE, EC_WORD_EXCL, 0xFFFF, EC_WORD_LOOK, EC_WORD_LOOK, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_WORD_GOOD_BYE, EC_WORD_AND, EC_WORD_THANK_YOU, EC_WORD_THAT_WAS, EC_WORD_FUNNY, 0xFFFF},
+ .speechLose = {EC_WORD_WOWEE, EC_WORD_EXCL, 0xFFFF, EC_WORD_NO, EC_WORD_NO, EC_WORD_EXCL_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Xavier
+ },
+ [186] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("CLINTON"),
+ .speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOUR, EC_MOVE2(FURY_SWIPES), EC_WORD_YOUR, EC_MOVE(STRENGTH), EC_WORD_YOUNG, EC_WORD_TRAINER},
+ .speechLose = {EC_WORD_TCH, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Clinton
+ },
+ [187] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("JESSE"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_FOR, EC_WORD_MY, EC_WORD_MOTHER},
+ .speechWin = {EC_WORD_MOTHER, EC_WORD_WILL, EC_WORD_BE, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_ME},
+ .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_MY, EC_WORD_MOTHER, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Jesse
+ },
+ [188] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("EDUARDO"),
+ .speechBefore = {EC_WORD_OUR, EC_WORD_MUSIC, EC_WORD_WILL, EC_WORD_PLAY, EC_WORD_ALL, EC_WORD_NIGHT},
+ .speechWin = {EC_WORD_NIGHTTIME, EC_WORD_IS, EC_WORD_WHEN, EC_WORD_I, EC_WORD_PLAY, EC_WORD_BEST},
+ .speechLose = {EC_WORD_LET_S, EC_WORD_PARTY, EC_WORD_UNTIL, EC_WORD_THE, EC_MOVE(MORNING_SUN), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Eduardo
+ },
+ [189] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("HAL"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_TRENDY, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_HIP_AND, EC_WORD_HAPPENING, EC_WORD_OH_YEAH, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_ALWAYS, EC_WORD_TRENDY, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH},
+ .monSets = gBattleFrontierTrainerMons_Hal
+ },
+ [190] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("GAGE"),
+ .speechBefore = {EC_WORD_HERE_IT_IS, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_HIDDEN, EC_WORD_MOVE},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_FLYING, EC_WORD_TYPE, EC_WORD_VICTORY, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_JUST, EC_MOVE(FLY), EC_WORD_AWAY, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Gage
+ },
+ [191] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("ARNOLD"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_WEIRD, EC_WORD_FROM, EC_WORD_A, EC_WORD_DREAM},
+ .speechWin = {EC_WORD_YOUR, EC_MOVE(SCARY_FACE), EC_WORD_WAS, EC_WORD_IN, EC_WORD_MY, EC_WORD_DREAM},
+ .speechLose = {EC_WORD_MY, EC_WORD_INCREDIBLE, EC_WORD_DREAM, EC_WORD_WAS, EC_WORD_SO, EC_WORD_WEIRD},
+ .monSets = gBattleFrontierTrainerMons_Arnold
+ },
+ [192] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("JARRETT"),
+ .speechBefore = {EC_WORD_COME_ON, EC_WORD_LET_S, EC_WORD_DANCE, EC_WORD_LIKE, EC_WORD_IT_S, EC_WORD_YESTERDAY},
+ .speechWin = {EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_HOW, EC_WORD_I, EC_WORD_DANCE, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_APPRECIATE, EC_WORD_HOW, EC_WORD_I, EC_WORD_DANCE},
+ .monSets = gBattleFrontierTrainerMons_Jarrett
+ },
+ [193] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("GARETT"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_GIRL, EC_WORD_GIVES, EC_WORD_ME, EC_WORD_A_LITTLE, EC_MOVE2(SWEET_KISS)},
+ .speechWin = {EC_WORD_MY, EC_WORD_GIRL, EC_WORD_FRIEND, EC_WORD_IS, EC_WORD_MY, EC_WORD_TREASURE},
+ .speechLose = {EC_WORD_A, EC_WORD_TREASURE, EC_WORD_ISN_T, EC_WORD_ALWAYS, EC_WORD_ABOUT, EC_WORD_MONEY},
+ .monSets = gBattleFrontierTrainerMons_Garett
+ },
+ [194] = {
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .trainerName = _("EMANUEL"),
+ .speechBefore = {EC_WORD_SMARTNESS, EC_WORD_ALONE, EC_WORD_WON_T, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_WIN},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_NOT_VERY, EC_WORD_SMART, EC_WORD_BUT, EC_WORD_I, EC_WORD_WON},
+ .speechLose = {EC_WORD_HOW, EC_WORD_DID, EC_WORD_YOU, EC_MOVE2(FAKE_OUT), EC_WORD_ME, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Emanuel
+ },
+ [195] = {
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .trainerName = _("GUSTAVO"),
+ .speechBefore = {EC_MOVE(CHARGE), EC_WORD_EXCL, 0xFFFF, EC_MOVE(CHARGE), EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_SURRENDER, EC_WORD_QUES, 0xFFFF, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_SURRENDER, EC_WORD_YET},
+ .monSets = gBattleFrontierTrainerMons_Gustavo
+ },
+ [196] = {
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .trainerName = _("KAMERON"),
+ .speechBefore = {EC_WORD_TAKE_THAT, EC_WORD_EXCL, EC_WORD_IT_S, EC_WORD_MY, EC_WORD_FIERY, EC_MOVE2(TRICK)},
+ .speechWin = {EC_WORD_DID, EC_WORD_MY, EC_WORD_FIERY, EC_MOVE2(TRICK), EC_MOVE(ASTONISH), EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU, EC_WORD_DIDN_T, EC_WORD_FALL, EC_WORD_FOR, EC_WORD_MY, EC_MOVE2(TRICK)},
+ .monSets = gBattleFrontierTrainerMons_Kameron
+ },
+ [197] = {
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .trainerName = _("ALFREDO"),
+ .speechBefore = {EC_WORD_A, EC_WORD_FIERY, EC_WORD_GOURMET, EC_WORD_AM, EC_WORD_I, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_TASTY, EC_WORD_GOURMET, EC_WORD_VICTORY, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_A, EC_WORD_DISASTER, EC_WORD_THAT_WAS, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Alfredo
+ },
+ [198] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("RUBEN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_WAIT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING},
+ .speechWin = {EC_WORD_GET, EC_WORD_GOING, EC_WORD_EXCL, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE},
+ .speechLose = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_TO, EC_WORD_GET, EC_WORD_GOING, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Ruben
+ },
+ [199] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("LAMAR"),
+ .speechBefore = {EC_WORD_A, EC_MOVE2(PRESENT), EC_WORD_FOR, EC_WORD_ME, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_MMM, EC_WORD_THIS, EC_WORD_IS, EC_WORD_QUITE, EC_WORD_TASTY, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_OH, EC_WORD_IT_S, EC_WORD_A, EC_WORD_GAME, EC_WORD_IS_IT_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Lamar
+ },
+ [200] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("JAXON"),
+ .speechBefore = {EC_WORD_A, EC_WORD_SHELL_ARMOR, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_I, EC_WORD_WANT},
+ .speechWin = {EC_WORD_MY, EC_WORD_FATHER, EC_WORD_AND, EC_WORD_MOTHER, EC_WORD_WON_T, EC_WORD_ACCEPT},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_SHELL_ARMOR, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Jaxon
+ },
+ [201] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("LOGAN"),
+ .speechBefore = {EC_WORD_IF_I_LOSE, EC_WORD_I, EC_WORD_WILL, EC_WORD_STUDY, EC_WORD_FOR, EC_WORD_SCHOOL},
+ .speechWin = {EC_WORD_ME, EC_WORD_STUDY, EC_WORD_QUES, EC_WORD_NOT_VERY, EC_WORD_LIKELY_TO, EC_WORD_SEE},
+ .speechLose = {EC_WORD_NO, EC_WORD_THANKS, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SLEEP},
+ .monSets = gBattleFrontierTrainerMons_Logan
+ },
+ [202] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("EMILEE"),
+ .speechBefore = {EC_WORD_IS, EC_WORD_THIS, EC_WORD_KIND, EC_WORD_OF, EC_WORD_BATTLE, EC_WORD_OK_QUES},
+ .speechWin = {EC_WORD_LET_S, EC_WORD_GO, EC_WORD_FOR, EC_WORD_AN, EC_MOVE(ICY_WIND), EC_MOVE2(SURF)},
+ .speechLose = {EC_WORD_HOW, EC_WORD_ABOUT, EC_WORD_A, EC_MOVE(ROCK_SLIDE), EC_WORD_SHOW, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Emilee
+ },
+ [203] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("JOSIE"),
+ .speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_FASHION, EC_WORD_CONTEST, EC_WORD_IS, EC_WORD_PRETTY},
+ .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_LIKE, EC_WORD_MODE, EC_WORD_FASHION, EC_WORD_THINGS},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_TOTALLY, EC_WORD_LACKING, EC_WORD_IN, EC_WORD_FASHION, EC_WORD_SENSE},
+ .monSets = gBattleFrontierTrainerMons_Josie
+ },
+ [204] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("ARMANDO"),
+ .speechBefore = {EC_WORD_I, EC_WORD_NEED, EC_WORD_MORE, EC_WORD_GRASS, EC_WORD_TYPE, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_TRADE, EC_WORD_ME, EC_WORD_A, EC_WORD_GRASS, EC_WORD_POKEMON, EC_WORD_PLEASE},
+ .speechLose = {EC_WORD_THERE, EC_WORD_AREN_T, EC_WORD_ENOUGH, EC_WORD_GRASS, EC_WORD_TYPE, EC_WORD_POKEMON},
+ .monSets = gBattleFrontierTrainerMons_Armando
+ },
+ [205] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("SKYLER"),
+ .speechBefore = {EC_MOVE2(INGRAIN), EC_WORD_IS, EC_WORD_MY, EC_WORD_CHOICE, EC_WORD_BATTLE, EC_WORD_MOVE},
+ .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MOVE, EC_WORD_ME, EC_WORD_NOW, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU, EC_MOVE(CUT), EC_WORD_ME, EC_WORD_DOWN, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Skyler
+ },
+ [206] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("RUTH"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_MUCH, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_STOP, EC_WORD_I, EC_WORD_DON_T, EC_WORD_ENJOY, EC_WORD_THIS},
+ .monSets = gBattleFrontierTrainerMons_Ruth
+ },
+ [207] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("MELODY"),
+ .speechBefore = {EC_WORD_I, EC_MOVE2(WISH), EC_WORD_SUNDAY, EC_WORD_IS, EC_WORD_A, EC_MOVE2(SUNNY_DAY)},
+ .speechWin = {EC_WORD_SUNDAY, EC_WORD_SEEMS, EC_WORD_FOREVER, EC_WORD_TO, EC_WORD_COME, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_THE, EC_WORD_FORECAST, EC_WORD_SAYS, EC_WORD_IT, EC_WORD_WILL, EC_MOVE(HAIL)},
+ .monSets = gBattleFrontierTrainerMons_Melody
+ },
+ [208] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("PEDRO"),
+ .speechBefore = {EC_WORD_A, EC_WORD_SWIFT_SWIM, EC_WORD_WILL, EC_WORD_DO, EC_WORD_YOU, EC_WORD_GOOD},
+ .speechWin = {EC_WORD_THAT_S, EC_WORD_HOW, EC_WORD_I, EC_WORD_SINK, EC_WORD_AN, EC_WORD_OPPONENT},
+ .speechLose = {EC_WORD_UH_OH, EC_WORD_EXCL, 0xFFFF, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Pedro
+ },
+ [209] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("ERICK"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE2(TACKLE), EC_WORD_YOU, EC_WORD_DOWN, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_RUN_AWAY, EC_WORD_YOU, EC_WORD_LOSER, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_THINK, EC_WORD_YOU, EC_WORD_WOULD, EC_MOVE(COUNTER)},
+ .monSets = gBattleFrontierTrainerMons_Erick
+ },
+ [210] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("ELAINE"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_HEROINE, EC_WORD_ADVENTURE, EC_WORD_ISN_T, EC_WORD_GOING, EC_WORD_WELL},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I, EC_WORD_NEED},
+ .speechLose = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_HEROINE},
+ .monSets = gBattleFrontierTrainerMons_Elaine
+ },
+ [211] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("JOYCE"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_GO, EC_WORD_AHAHA, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_LALALA, EC_WORD_NO, EC_WORD_LOSING, EC_WORD_FOR, EC_WORD_ME, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_LALALA, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_HUH_QUES, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Joyce
+ },
+ [212] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("TODD"),
+ .speechBefore = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_LIGHTNINGROD, EC_WORD_FOR, EC_WORD_MY, EC_WORD_POWER},
+ .speechWin = {EC_WORD_THAT_S, EC_WORD_ALL, EC_WORD_YOU, EC_WORD_COULD, EC_MOVE(ABSORB), EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU, EC_MOVE2(REFLECT), EC_WORD_MY, EC_WORD_POWER, EC_WORD_BACK, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Todd
+ },
+ [213] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("GAVIN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(BIDE), EC_WORD_MY, EC_WORD_TIME, 0xFFFF},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_MY, EC_WORD_MISTAKE, EC_WORD_WAS, EC_WORD_TOO, EC_WORD_EXPENSIVE, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Gavin
+ },
+ [214] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("MALORY"),
+ .speechBefore = {EC_WORD_PROMISE, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_ME, EC_WORD_CUTE, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_SO, EC_WORD_MUCH},
+ .speechLose = {EC_WORD_TCH, EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_VERY, EC_WORD_NICE},
+ .monSets = gBattleFrontierTrainerMons_Malory
+ },
+ [215] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("ESTHER"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_A, EC_WORD_NICE, EC_MOVE2(PRESENT), EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_PLEASE, EC_WORD_GET, EC_WORD_ME, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_GAME},
+ .speechLose = {EC_WORD_MESSAGE, EC_WORD_CARDS, EC_WORD_MAKE, EC_WORD_A, EC_WORD_WEAK, EC_MOVE2(PRESENT)},
+ .monSets = gBattleFrontierTrainerMons_Esther
+ },
+ [216] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
+ .trainerName = _("OSCAR"),
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_SEE, EC_WORD_YOUR, EC_WORD_POWER, EC_WORD_IN, EC_WORD_FULL},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_NOT, EC_WORD_YOUR, EC_WORD_FULL, EC_WORD_POWER, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_NOT, EC_WORD_FUNNY, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_TOO_STRONG, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Oscar
+ },
+ [217] = {
+ .facilityClass = FACILITY_CLASS_PKMN_BREEDER_M,
+ .trainerName = _("WILSON"),
+ .speechBefore = {EC_WORD_WORK, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_AN, EC_WORD_EARLY_BIRD},
+ .speechWin = {EC_WORD_ALL, EC_WORD_WORK, EC_WORD_AND, EC_WORD_NO, EC_WORD_PLAY, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_MOVE(ENDURE), EC_WORD_IS, EC_WORD_ALL, EC_WORD_I, EC_WORD_CAN, EC_WORD_DO},
+ .monSets = gBattleFrontierTrainerMons_Wilson
+ },
+ [218] = {
+ .facilityClass = FACILITY_CLASS_POKEMON_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},
+ .speechLose = {EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_TRAINER, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Clare
+ },
+ [219] = {
+ .facilityClass = FACILITY_CLASS_POKEMON_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},
+ .speechLose = {EC_WORD_THEY_RE, EC_WORD_TASTY, EC_WORD_EXCL, EC_WORD_REFRESHING, EC_WORD_TOO, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Tess
+ },
+ [220] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("LEON"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_BETTER, EC_WORD_THAN, EC_WORD_ANY, EC_WORD_OTHER, EC_WORD_TRAINER},
+ .speechWin = {EC_WORD_I, EC_WORD_DID, EC_WORD_IT, EC_MOVE2(JUMP_KICK), EC_WORD_FOR, EC_WORD_JOY},
+ .speechLose = {EC_WORD_BACK, EC_WORD_HOME, EC_WORD_I, EC_WORD_WILL, EC_WORD_GO, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Leon
+ },
+ [221] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("ALONZO"),
+ .speechBefore = {EC_WORD_I_VE, EC_WORD_NOT, EC_WORD_LOST, EC_WORD_ONCE, EC_WORD_YET, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_SAD, EC_WORD_LOOK, EC_WORD_BECOMES, EC_WORD_YOU, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_BELIEVE, EC_WORD_THIS, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Alonzo
+ },
+ [222] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("VINCE"),
+ .speechBefore = {EC_WORD_THE, EC_WORD_TOP, EC_WORD_TRAINER, EC_WORD_THAT_S, EC_WORD_ME, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_THE, EC_WORD_TOP, EC_WORD_RANK, EC_WORD_BELONGS_TO, EC_WORD_ME, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_APPEAL, EC_WORD_THIS, EC_MOVE(OUTRAGE), EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Vince
+ },
+ [223] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("BRYON"),
+ .speechBefore = {EC_WORD_MY, EC_MOVE2(BARRAGE), EC_WORD_WILL, EC_MOVE2(SLAM), EC_WORD_YOU, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YOU, EC_WORD_DIDN_T, EC_WORD_COUNT_ON, EC_WORD_ANY, EC_WORD_LESS, EC_WORD_QUES},
+ .speechLose = {EC_WORD_I, EC_WORD_JUST, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_IT, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Bryon
+ },
+ [224] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("AVA"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_TREASURE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_WORLD},
+ .speechWin = {EC_WORD_MY, EC_WORD_WORLD, EC_WORD_IS, EC_WORD_FULL, EC_WORD_OF, EC_WORD_WONDER},
+ .speechLose = {EC_WORD_WHY, EC_WORD_ARE, EC_WORD_YOU, EC_WORD_SO, EC_WORD_TERRIBLE, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Ava
+ },
+ [225] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("MIRIAM"),
+ .speechBefore = {EC_WORD_OH, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_WITH, EC_WORD_A, EC_MOVE(SCARY_FACE)},
+ .speechWin = {EC_WORD_AHAHA, EC_WORD_YOU, EC_WORD_ONLY, EC_WORD_LOOK, EC_WORD_SCARY, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_AIYEEH, EC_WORD_EXCL, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_ARE, EC_WORD_SCARY},
+ .monSets = gBattleFrontierTrainerMons_Miriam
+ },
+ [226] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("CARRIE"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_SHOW, EC_WORD_YOU, EC_WORD_GUTSY, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_ALL, EC_WORD_ABOUT, EC_WORD_GUTS, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_OH, EC_WORD_NO, EC_WORD_ELLIPSIS, EC_MOVE(SELF_DESTRUCT), EC_WORD_MODE, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Carrie
+ },
+ [227] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("GILLIAN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_SEEK, EC_WORD_A, EC_WORD_TRULY, EC_WORD_GREAT, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_A_LOT, EC_WORD_BETTER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_A_LITTLE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_TAKE},
+ .monSets = gBattleFrontierTrainerMons_Gillian2
+ },
+ [228] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
+ .trainerName = _("TYLER"),
+ .speechBefore = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_LET_S, EC_WORD_GO, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_WON, EC_WORD_YO},
+ .speechLose = {EC_WORD_YO, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_LOST, EC_WORD_YO},
+ .monSets = gBattleFrontierTrainerMons_Tyler
+ },
+ [229] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
+ .trainerName = _("CHAZ"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_HAVE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_POWER},
+ .speechWin = {EC_WORD_THEY, EC_WORD_HAVE, EC_WORD_MORE, EC_WORD_POWER, EC_WORD_NOW, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YEAH, EC_MOVE2(TAKE_DOWN), EC_WORD_THEIR, EC_WORD_POWER, EC_WORD_A_TINY_BIT, EC_WORD_PLEASE},
+ .monSets = gBattleFrontierTrainerMons_Chaz
+ },
+ [230] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_M,
+ .trainerName = _("NELSON"),
+ .speechBefore = {EC_WORD_WELL_THEN, EC_WORD_WILL, EC_WORD_THIS, EC_WORD_POKEMON, EC_WORD_WORK, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_IT, EC_WORD_WAS, EC_WORD_TOO_STRONG},
+ .speechLose = {EC_WORD_IT, EC_WORD_DIDN_T, EC_WORD_MATCH_UP, EC_WORD_WELL, EC_WORD_I, EC_WORD_THINK},
+ .monSets = gBattleFrontierTrainerMons_Nelson
+ },
+ [231] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .trainerName = _("SHANIA"),
+ .speechBefore = {EC_WORD_ALL, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ABSOLUTELY, EC_WORD_ADORE, EC_WORD_ME},
+ .speechWin = {EC_WORD_HAPPINESS, EC_WORD_IS, EC_WORD_A, EC_WORD_POKEMON, EC_WORD_WITH, EC_WORD_CUTE_CHARM},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_SO, EC_WORD_MEAN, EC_WORD_TO, EC_WORD_CUTE, EC_WORD_POKEMON},
+ .monSets = gBattleFrontierTrainerMons_Shania
+ },
+ [232] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .trainerName = _("STELLA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOUR, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_WELL, EC_WORD_AREN_T, EC_WORD_THEY, EC_WORD_BORING, EC_WORD_QUES, EC_WORD_AHAHA},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_SOMETHING, EC_WORD_ELSE, EC_WORD_ALL_RIGHT},
+ .monSets = gBattleFrontierTrainerMons_Stella
+ },
+ [233] = {
+ .facilityClass = FACILITY_CLASS_PKMN_RANGER_F,
+ .trainerName = _("DORINE"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_YOUNG, EC_WORD_AND, EC_WORD_STRONG, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_WORD_AREN_T, EC_WORD_I, EC_WORD_GOOD, EC_WORD_QUES},
+ .speechLose = {EC_WORD_THIS, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_OUT, EC_WORD_AT, EC_WORD_ALL},
+ .monSets = gBattleFrontierTrainerMons_Dorine
+ },
+ [234] = {
+ .facilityClass = FACILITY_CLASS_DRAGON_TAMER,
+ .trainerName = _("MADDOX"),
+ .speechBefore = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_MY, EC_WORD_NO_1, EC_WORD_CHOICE},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_NO, EC_WORD_SECRET, EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_WIN},
+ .speechLose = {EC_WORD_DRAGON, EC_WORD_POKEMON, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_LOSE, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Maddox
+ },
+ [235] = {
+ .facilityClass = FACILITY_CLASS_DRAGON_TAMER,
+ .trainerName = _("DAVIN"),
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_HEAR, EC_WORD_YOU, EC_MOVE2(ROAR), EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_WROOOAAR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_VICTORY, EC_WORD_EXCL_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_WROOOAAR_EXCL, 0xFFFF, 0xFFFF, EC_WORD_WHY, EC_WORD_QUES_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Davin
+ },
+ [236] = {
+ .facilityClass = FACILITY_CLASS_DRAGON_TAMER,
+ .trainerName = _("TREVON"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_LIVING, EC_WORD_ONLY, EC_WORD_WITH, EC_WORD_DRAGON, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_LIVING, EC_WORD_IS, EC_WORD_PERFECT},
+ .speechLose = {EC_WORD_YOU_VE, EC_WORD_DESTROYED, EC_WORD_THE, EC_WORD_WAY, EC_WORD_I_AM, EC_WORD_LIVING},
+ .monSets = gBattleFrontierTrainerMons_Trevon
+ },
+ [237] = {
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .trainerName = _("MATEO"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_OVER, EC_WORD_SOON, EC_WORD_ENOUGH},
+ .speechWin = {EC_WORD_WELL, EC_WORD_THAT, EC_WORD_DIDN_T, EC_WORD_TAKE, EC_WORD_VERY, EC_WORD_MUCH},
+ .speechLose = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_LOSE, EC_WORD_SO, EC_WORD_SOON, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Mateo
+ },
+ [238] = {
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .trainerName = _("BRET"),
+ .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_ROCK_SOLID, EC_WORD_POKEMON, EC_WORD_THE, EC_WORD_BEST},
+ .speechWin = {EC_WORD_TOUGHNESS, EC_WORD_IS, EC_WORD_THE, EC_WORD_WAY, EC_WORD_TO, EC_WORD_GO},
+ .speechLose = {EC_WORD_I, EC_WORD_ALSO, EC_WORD_HAVE, EC_WORD_A, EC_WORD_PLUSH_DOLL, EC_WORD_COLLECTION},
+ .monSets = gBattleFrontierTrainerMons_Bret
+ },
+ [239] = {
+ .facilityClass = FACILITY_CLASS_BLACK_BELT,
+ .trainerName = _("RAUL"),
+ .speechBefore = {EC_WORD_I, EC_WORD_REJECT, EC_WORD_EVERY, EC_WORD_WEAK, EC_WORD_TRAINER, 0xFFFF},
+ .speechWin = {EC_WORD_HUMPH, EC_WORD_EXCL, EC_WORD_ANOTHER, EC_WORD_WEAK, EC_WORD_TRAINER, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NOTHING, EC_WORD_WEAK, EC_WORD_ABOUT, EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Raul
+ },
+ [240] = {
+ .facilityClass = FACILITY_CLASS_BATTLE_GIRL,
+ .trainerName = _("KAY"),
+ .speechBefore = {EC_WORD_AND, EC_WORD_YET, EC_WORD_ANOTHER, EC_WORD_BATTLE, EC_WORD_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_BUT, EC_WORD_I_AM, EC_WORD_TIRED, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_GOOD, EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_AT, EC_WORD_LAST, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Kay
+ },
+ [241] = {
+ .facilityClass = FACILITY_CLASS_BATTLE_GIRL,
+ .trainerName = _("ELENA"),
+ .speechBefore = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_THAT_S, EC_WORD_ME, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_ISN_T, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_AWESOME, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_GIRL, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Elena
+ },
+ [242] = {
+ .facilityClass = FACILITY_CLASS_BATTLE_GIRL,
+ .trainerName = _("ALANA"),
+ .speechBefore = {EC_WORD_EAT, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK, EC_WORD_YOU, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_LEARN, 0xFFFF},
+ .speechLose = {EC_WORD_SO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_MY, EC_WORD_INVINCIBLE, EC_WORD_ATTACK},
+ .monSets = gBattleFrontierTrainerMons_Alana
+ },
+ [243] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("ALEXAS"),
+ .speechBefore = {EC_WORD_GOOD, EC_WORD_TO, EC_WORD_MEET_YOU, EC_WORD_YOUNG, EC_WORD_TRAINER, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, 0xFFFF, EC_WORD_GIVE, EC_WORD_IT, EC_WORD_UP},
+ .speechLose = {EC_WORD_YOU, EC_WORD_ARE, EC_WORD_A, EC_WORD_STRONG, EC_WORD_TRAINER, EC_WORD_KID},
+ .monSets = gBattleFrontierTrainerMons_Alexas
+ },
+ [244] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("WESTON"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_PLAY, EC_WORD_DOWN, EC_WORD_ALL_RIGHT, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_FAR, EC_WORD_TOO, EC_WORD_EASY, EC_WORD_TO, EC_WORD_ATTACK},
+ .speechLose = {EC_WORD_WELL, EC_WORD_WELL, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Weston
+ },
+ [245] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("JASPER"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_OLD, EC_WORD_I_AM, EC_WORD_SKILLED, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_SKILLED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_SHOCKED, EC_WORD_EXCL, EC_WORD_DOWN, EC_WORD_I, EC_WORD_GO},
+ .monSets = gBattleFrontierTrainerMons_Jasper
+ },
+ [246] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("NADIA"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, EC_WORD_DOWN, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_HAH, EC_WORD_EXCL, 0xFFFF, EC_WORD_I, EC_WORD_BEAT, EC_WORD_YOU},
+ .speechLose = {EC_WORD_I_AM, EC_MOVE2(BEAT_UP), EC_WORD_AND, EC_WORD_DOWNCAST, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Nadia
+ },
+ [247] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("MIRANDA"),
+ .speechBefore = {EC_WORD_WELL, EC_WORD_WELL, 0xFFFF, EC_WORD_LET_S, EC_WORD_START, 0xFFFF},
+ .speechWin = {EC_WORD_WHAT, EC_WORD_QUES, EC_WORD_DONE, EC_WORD_SO, EC_WORD_SOON, EC_WORD_QUES},
+ .speechLose = {EC_WORD_WELL, EC_WORD_I, EC_WORD_SEE, EC_WORD_THAT, EC_WORD_I_AM, EC_WORD_TOO_WEAK},
+ .monSets = gBattleFrontierTrainerMons_Miranda
+ },
+ [248] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("EMMA"),
+ .speechBefore = {EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_ABOUT, EC_WORD_YOU, 0xFFFF},
+ .speechWin = {EC_WORD_I, EC_WORD_THINK, EC_WORD_I_VE, EC_WORD_MISHEARD, EC_WORD_THINGS, 0xFFFF},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_I_VE, EC_WORD_BEEN, EC_WORD_HEARING, EC_WORD_IS, EC_WORD_RIGHT},
+ .monSets = gBattleFrontierTrainerMons_Emma
+ },
+ [249] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_M,
+ .trainerName = _("ROLANDO"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_SUPER, EC_WORD_POKEMON, EC_WORD_HERO, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WAS, EC_WORD_THAT, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_YOU, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_BEAT, EC_WORD_A, EC_WORD_HERO},
+ .monSets = gBattleFrontierTrainerMons_Rolando
+ },
+ [250] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_M,
+ .trainerName = _("STANLY"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_AN, EC_WORD_EASY, EC_WORD_MATCH},
+ .speechWin = {EC_WORD_IT, EC_WORD_REALLY, EC_WORD_WAS, EC_WORD_EASY, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_HAPPY, EC_WORD_NOW, EC_WORD_QUES, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Stanly
+ },
+ [251] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_M,
+ .trainerName = _("DARIO"),
+ .speechBefore = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_SAYS, EC_WORD_I, EC_WORD_WILL, EC_WORD_WIN},
+ .speechWin = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_PERFECT, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_SEE, EC_WORD_THIS, EC_MOVE(REVERSAL), EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Dario
+ },
+ [252] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_F,
+ .trainerName = _("KARLEE"),
+ .speechBefore = {EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WILL, EC_WORD_COME, EC_WORD_OF, EC_WORD_THIS},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_FANTASTIC, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_THAT, EC_WORD_SOMETHING, EC_WORD_GOOD, EC_WORD_WENT, EC_WORD_TO, EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Karlee
+ },
+ [253] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_F,
+ .trainerName = _("JAYLIN"),
+ .speechBefore = {EC_WORD_EVERY, EC_WORD_TRAINER, EC_WORD_HAS, EC_WORD_BEEN, EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_MAKING, EC_WORD_ME, EC_MOVE(YAWN), EC_WORD_THAT, EC_WORD_BATTLE},
+ .speechLose = {EC_WORD_I, EC_WORD_SLEPT, EC_WORD_AND, EC_WORD_SO, EC_WORD_I, EC_WORD_LOST},
+ .monSets = gBattleFrontierTrainerMons_Jaylin
+ },
+ [254] = {
+ .facilityClass = FACILITY_CLASS_PSYCHIC_F,
+ .trainerName = _("INGRID"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_A, EC_WORD_VERY, EC_WORD_MEAN, EC_WORD_TRAINER},
+ .speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_A, EC_WORD_GOOD, EC_WORD_MATCH, EC_WORD_QUES},
+ .speechLose = {EC_WORD_I, EC_WORD_LOST, EC_WORD_CAUSE, EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Ingrid
+ },
+ [255] = {
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .trainerName = _("DELILAH"),
+ .speechBefore = {EC_WORD_DON_T, EC_MOVE(GRUDGE), EC_WORD_ME, EC_WORD_IF_I_WIN, EC_WORD_OK_QUES, 0xFFFF},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_TO, EC_WORD_SEE, EC_WORD_YOU, EC_WORD_ANGRY},
+ .speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_A, EC_MOVE(GRUDGE), EC_WORD_WITH, EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Delilah
+ },
+ [256] = {
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .trainerName = _("CARLY"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_SCATTER, EC_WORD_SOME, EC_MOVE2(POISON_POWDER), EC_WORD_ABOUT},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_SCARY, EC_WORD_HOW, EC_WORD_MY, EC_WORD_STRATEGY, EC_WORD_WORKS},
+ .speechLose = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_YOU, EC_WORD_AND, EC_WORD_YOUR, EC_WORD_POKEMON},
+ .monSets = gBattleFrontierTrainerMons_Carly
+ },
+ [257] = {
+ .facilityClass = FACILITY_CLASS_HEX_MANIAC,
+ .trainerName = _("LEXIE"),
+ .speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_SEE, EC_WORD_SCARY, EC_WORD_POKEMON, EC_WORD_QUES},
+ .speechWin = {EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_SCARY, EC_WORD_EH_QUES, 0xFFFF, 0xFFFF},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_MORE, EC_WORD_SCARY, EC_WORD_THAN, EC_WORD_MY, EC_WORD_POKEMON},
+ .monSets = gBattleFrontierTrainerMons_Lexie
+ },
+ [258] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("MILLER"),
+ .speechBefore = {EC_WORD_HELLO, EC_WORD_QUES, 0xFFFF, EC_WORD_HELLO, EC_WORD_QUES_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_HELLO, EC_WORD_MOTHER, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WON, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_MY, EC_WORD_PHONE, EC_WORD_ISN_T, EC_WORD_WORKING, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Miller
+ },
+ [259] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("MARV"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_LOSE, EC_WORD_YOUR, EC_MOVE(SWAGGER), EC_WORD_NOW},
+ .speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_MOVE(SWAGGER), EC_WORD_LEFT, EC_WORD_EH_QUES},
+ .speechLose = {EC_WORD_GO, EC_WORD_ON, EC_MOVE(SWAGGER), EC_WORD_ALL, EC_WORD_YOU, EC_WORD_WANT},
+ .monSets = gBattleFrontierTrainerMons_Marv
+ },
+ [260] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("LAYTON"),
+ .speechBefore = {EC_WORD_I, EC_WORD_KNOW, EC_WORD_I_AM, EC_WORD_TOTALLY, EC_WORD_COOL, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YOU, EC_WORD_CAN, EC_WORD_LOOK, EC_WORD_UP, EC_WORD_TO, EC_WORD_ME},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_COOL, EC_WORD_EXCL, EC_WORD_NO, EC_WORD_REALLY, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Layton
+ },
+ [261] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("BROOKS"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_HIGH, EC_WORD_LEVEL, EC_WORD_BATTLE},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_HIGH, EC_WORD_LEVEL, EC_WORD_AND, EC_WORD_EXCITING, EC_WORD_TOO},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_TOO, EC_WORD_HIGH, EC_WORD_IN, EC_WORD_LEVEL, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Brooks
+ },
+ [262] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("GREGORY"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD, EC_WORD_YET, 0xFFFF},
+ .speechWin = {EC_WORD_WHO, EC_WORD_SAYS, EC_WORD_I_AM, EC_WORD_TOO, EC_WORD_OLD, EC_WORD_QUES},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_I_AM, EC_WORD_REALLY, EC_WORD_NOT, EC_WORD_THAT, EC_WORD_OLD},
+ .monSets = gBattleFrontierTrainerMons_Gregory
+ },
+ [263] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("REESE"),
+ .speechBefore = {EC_WORD_I_VE, EC_WORD_A, EC_WORD_COUPLE, EC_WORD_THINGS, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_DIET, EC_WORD_PLAY, EC_WORD_SPORTS, EC_WORD_INSTEAD, 0xFFFF},
+ .speechLose = {EC_WORD_INSTEAD, EC_WORD_OF, EC_WORD_TELEVISION, EC_WORD_GET, EC_WORD_A, EC_WORD_BOOK},
+ .monSets = gBattleFrontierTrainerMons_Reese
+ },
+ [264] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ .trainerName = _("MASON"),
+ .speechBefore = {EC_WORD_PLEASE, EC_WORD_DON_T, EC_WORD_MAKE, EC_WORD_THIS, EC_WORD_SCARY, 0xFFFF},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_ELLIPSIS, 0xFFFF, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_NOW},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_ELLIPSIS, 0xFFFF, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Mason
+ },
+ [265] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_M,
+ .trainerName = _("TOBY"),
+ .speechBefore = {EC_WORD_LISTEN, EC_WORD_UP, 0xFFFF, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_WIN},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_A, EC_WORD_GENIUS, EC_WORD_OR, EC_WORD_WHAT, EC_WORD_QUES},
+ .speechLose = {EC_WORD_I, EC_WORD_CAN, EC_WORD_BEAT, EC_WORD_YOU, EC_WORD_AT, EC_WORD_SMARTNESS},
+ .monSets = gBattleFrontierTrainerMons_Toby
+ },
+ [266] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ .trainerName = _("DOROTHY"),
+ .speechBefore = {EC_WORD_THE, EC_WORD_SPORTS, EC_WORD_WORLD, EC_WORD_SHOULD, EC_WORD_ACCEPT, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT, EC_WORD_WIN, EC_WORD_WAS, EC_WORD_REFRESHING},
+ .speechLose = {EC_WORD_THANK_YOU, EC_WORD_EXCL, EC_WORD_THAT, EC_WORD_LOSS, EC_WORD_WAS, EC_WORD_REFRESHING},
+ .monSets = gBattleFrontierTrainerMons_Dorothy
+ },
+ [267] = {
+ .facilityClass = FACILITY_CLASS_RUNNING_TRIATHLETE_F,
+ .trainerName = _("PIPER"),
+ .speechBefore = {EC_WORD_COME_ON, EC_WORD_YOU, EC_WORD_NEED, EC_WORD_A, EC_WORD_SPEED_BOOST, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_SHOW, EC_WORD_MORE, EC_WORD_GUTS},
+ .speechLose = {EC_WORD_OH, EC_WORD_YOU, EC_WORD_EXCL, 0xFFFF, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Piper
+ },
+ [268] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("FINN"),
+ .speechBefore = {EC_WORD_NOT, EC_WORD_ANOTHER, EC_WORD_TRAINER, EC_WORD_BATTLE, EC_WORD_ELLIPSIS, 0xFFFF},
+ .speechWin = {EC_WORD_WON_T, EC_WORD_THIS, EC_WORD_EVER, EC_WORD_END, EC_WORD_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_I, EC_WORD_FINALLY, EC_WORD_GET, EC_WORD_TO, EC_MOVE2(REST), EC_WORD_A_LITTLE},
+ .monSets = gBattleFrontierTrainerMons_Finn
+ },
+ [269] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_M,
+ .trainerName = _("SAMIR"),
+ .speechBefore = {EC_WORD_I, EC_MOVE2(DIVE), EC_WORD_BELOW, EC_WORD_THE, EC_MOVE2(SURF), EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YAHOO, EC_WORD_TAKE, EC_WORD_A, EC_MOVE2(DIVE), EC_WORD_YOU, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_SINK, EC_WORD_ELLIPSIS, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Samir
+ },
+ [270] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("FIONA"),
+ .speechBefore = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_LIMBER, EC_WORD_UP, EC_WORD_BEFORE, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_BE, EC_WORD_MORE, EC_WORD_READY},
+ .speechLose = {EC_WORD_BEING, EC_WORD_LIMBER, EC_WORD_DIDN_T, EC_WORD_WORK, EC_WORD_FOR, EC_WORD_ME},
+ .monSets = gBattleFrontierTrainerMons_Fiona
+ },
+ [271] = {
+ .facilityClass = FACILITY_CLASS_SWIMMING_TRIATHLETE_F,
+ .trainerName = _("GLORIA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_ATTACK, EC_WORD_WITH, EC_WORD_SUCTION_CUPS},
+ .speechWin = {EC_WORD_GIGGLE, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_OVER, EC_WORD_FOR, EC_WORD_YOU},
+ .speechLose = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_GET, EC_WORD_HOW, EC_WORD_SUCTION_CUPS, EC_WORD_WORK},
+ .monSets = gBattleFrontierTrainerMons_Gloria
+ },
+ [272] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ .trainerName = _("NICO"),
+ .speechBefore = {EC_WORD_LIKE, EC_WORD_A, EC_MOVE(SONIC_BOOM), EC_WORD_I_VE_ARRIVED, 0xFFFF, 0xFFFF},
+ .speechWin = {EC_WORD_SORRY, EC_WORD_TO, EC_WORD_MAKE, EC_WORD_YOU, EC_WORD_SO, EC_WORD_DOWNCAST},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_WITH, EC_WORD_A, EC_MOVE2(SUPERSONIC), EC_WORD_SPEED_BOOST},
+ .monSets = gBattleFrontierTrainerMons_Nico
+ },
+ [273] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_M,
+ .trainerName = _("JEREMY"),
+ .speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_MASTER, EC_WORD_THAT_S, EC_WORD_MY, EC_WORD_DREAM},
+ .speechWin = {EC_WORD_MY, EC_WORD_DREAM, EC_WORD_ISN_T, EC_WORD_FAR, EC_WORD_OFF, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_I, EC_WORD_DREAM, EC_WORD_ISN_T, EC_WORD_HAPPENING, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Jeremy
+ },
+ [274] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
+ .trainerName = _("CAITLIN"),
+ .speechBefore = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_CUTE, EC_WORD_QUES},
+ .speechWin = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_MORE, EC_WORD_TO_ME, EC_WORD_THAN, EC_WORD_CUTENESS},
+ .speechLose = {EC_WORD_MY, EC_WORD_CUTE_CHARM, EC_WORD_DOESN_T, EC_MOVE2(ATTRACT), EC_WORD_YOU, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Caitlin
+ },
+ [275] = {
+ .facilityClass = FACILITY_CLASS_CYCLING_TRIATHLETE_F,
+ .trainerName = _("REENA"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_ALWAYS, EC_WORD_HAPPY, EC_WORD_HAPPY, EC_WORD_HAPPY, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_OH, EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_YAHOO, EC_WORD_FOR, EC_WORD_ME},
+ .speechLose = {EC_WORD_YAHOO, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_HAPPY, EC_WORD_FOR, EC_WORD_YOU},
+ .monSets = gBattleFrontierTrainerMons_Reena
+ },
+ [276] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("AVERY"),
+ .speechBefore = {EC_WORD_I_VE, EC_WORD_GOT, EC_WORD_A_LOT, EC_WORD_OF, EC_WORD_BUG, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_MY, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ALL, EC_WORD_UNBELIEVABLE},
+ .speechLose = {EC_WORD_MY, EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ALL, EC_WORD_UPSIDE_DOWN},
+ .monSets = gBattleFrontierTrainerMons_Avery
+ },
+ [277] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("LIAM"),
+ .speechBefore = {EC_WORD_WE, EC_WORD_REALLY, EC_WORD_DISLIKE, EC_WORD_FIRE, EC_WORD_AND, EC_WORD_FLYING},
+ .speechWin = {EC_WORD_BUG, EC_WORD_POKEMON, EC_WORD_AREN_T, EC_WORD_BAD, EC_WORD_HEY_QUES, 0xFFFF},
+ .speechLose = {EC_WORD_YOU, EC_WORD_KNOW, EC_WORD_WHAT, EC_WORD_WE, EC_WORD_DISLIKE, EC_WORD_HEY_QUES},
+ .monSets = gBattleFrontierTrainerMons_Liam
+ },
+ [278] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("THEO"),
+ .speechBefore = {EC_WORD_FISHING, EC_WORD_IS, EC_WORD_MY, EC_WORD_CHOICE, EC_WORD_IN, EC_WORD_LIFE},
+ .speechWin = {EC_WORD_WATER, EC_WORD_POKEMON, EC_MOVE2(ATTRACT), EC_WORD_ME, EC_WORD_WITHOUT, EC_WORD_END},
+ .speechLose = {EC_WORD_DON_T, EC_WORD_COUNT_ON, EC_WORD_THAT, EC_WORD_HAPPENING, EC_WORD_ANOTHER, EC_WORD_TIME},
+ .monSets = gBattleFrontierTrainerMons_Theo
+ },
+ [279] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("BAILEY"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_WORD_BATTLE, EC_WORD_EASY},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_MOVE2(SWALLOW), EC_WORD_JOY},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_AN, EC_WORD_ADULT, EC_WORD_I, EC_MOVE2(SWALLOW), EC_MOVE2(FRUSTRATION)},
+ .monSets = gBattleFrontierTrainerMons_Bailey
+ },
+ [280] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("HUGO"),
+ .speechBefore = {EC_WORD_I, EC_WORD_TRY, EC_WORD_THE, EC_WORD_BEST, EC_WORD_I, EC_WORD_CAN},
+ .speechWin = {EC_WORD_I, EC_WORD_CAN_WIN, EC_WORD_IF, EC_WORD_I, EC_WORD_TRY, EC_WORD_ENOUGH},
+ .speechLose = {EC_WORD_I, EC_WORD_DID, EC_WORD_TRY, EC_WORD_DIDN_T, EC_WORD_I, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Hugo
+ },
+ [281] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("BRYCE"),
+ .speechBefore = {EC_WORD_I_WAS, EC_WORD_ON, EC_WORD_VACATION, EC_WORD_UNTIL, EC_WORD_ONLY, EC_WORD_YESTERDAY},
+ .speechWin = {EC_WORD_I, EC_WORD_HAVEN_T, EC_WORD_LOST, EC_WORD_MY, EC_WORD_SKILL, EC_WORD_YET},
+ .speechLose = {EC_WORD_THAT_S, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_NEED, EC_WORD_SLEEP},
+ .monSets = gBattleFrontierTrainerMons_Bryce
+ },
+ [282] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("GIDEON"),
+ .speechBefore = {EC_WORD_WHAT_S_UP_QUES, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_I_AM, EC_WORD_SCARY, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_COOL, EC_WORD_BUT, EC_WORD_NOT, EC_WORD_SCARY, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_FASHION, EC_WORD_SENSE},
+ .monSets = gBattleFrontierTrainerMons_Gideon
+ },
+ [283] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("TRISTON"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WOULD, EC_WORD_RATHER, EC_WORD_LOOK, EC_WORD_AT, EC_WORD_POKEMON},
+ .speechWin = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES_EXCL},
+ .speechLose = {EC_WORD_SEE, EC_WORD_QUES, 0xFFFF, EC_WORD_I, EC_WORD_ALWAYS, EC_WORD_LOSE},
+ .monSets = gBattleFrontierTrainerMons_Triston
+ },
+ [284] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("CHARLES"),
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_HOPELESS, EC_WORD_TO, EC_MOVE2(STRUGGLE), EC_WORD_WITH, EC_WORD_ME},
+ .speechWin = {EC_MOVE(SUBMISSION), EC_WORD_WAS, EC_WORD_YOUR, EC_WORD_ONLY, EC_WORD_CHOICE, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_DOWN, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Charles
+ },
+ [285] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("RAYMOND"),
+ .speechBefore = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_HEAR, EC_WORD_MY, EC_WORD_SONG, EC_WORD_QUES},
+ .speechWin = {EC_WORD_SATISFIED, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_SATISFIED, EC_WORD_IS, EC_WORD_WHAT, EC_WORD_I, EC_WORD_CAN_T, EC_WORD_BE},
+ .monSets = gBattleFrontierTrainerMons_Raymond
+ },
+ [286] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("DIRK"),
+ .speechBefore = {EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_ABOVE, EC_WORD_THE, EC_MOVE2(REST)},
+ .speechWin = {EC_WORD_YOU, EC_WORD_CAN_T_WIN, EC_WORD_EXCL, EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_RULE},
+ .speechLose = {EC_WORD_AREN_T, EC_WORD_THERE, EC_WORD_MORE, EC_WORD_FLYING, EC_WORD_POKEMON, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Dirk
+ },
+ [287] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("HAROLD"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_APPEAL, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES},
+ .speechWin = {EC_WORD_YOU, EC_WORD_DO, EC_WORD_LIKE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_QUES},
+ .speechLose = {EC_WORD_SO, EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Harold
+ },
+ [288] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("OMAR"),
+ .speechBefore = {EC_WORD_LET_ME_WIN, EC_WORD_IN, EC_MOVE(RETURN), EC_WORD_FOR, EC_WORD_A, EC_MOVE2(PRESENT)},
+ .speechWin = {EC_WORD_HERE, EC_WORD_YOU, EC_WORD_ARE, EC_WORD_SOME, EC_MOVE2(TOXIC), EC_WORD_SWEETS},
+ .speechLose = {EC_WORD_YOUR, EC_MOVE2(PRESENT), EC_WORD_QUES, EC_WORD_WHAT, EC_WORD_FOR, EC_WORD_QUES_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Omar
+ },
+ [289] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("PETER"),
+ .speechBefore = {EC_WORD_I, EC_WORD_BRAG, EC_WORD_ABOUT, EC_WORD_MY, EC_WORD_HAPPINESS, EC_WORD_OK_QUES},
+ .speechWin = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_LISTEN, EC_WORD_TO_ME, EC_WORD_BRAG},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_DISAPPOINTED, EC_WORD_YOU, EC_WORD_WON_T, EC_WORD_LISTEN, EC_WORD_TO_ME},
+ .monSets = gBattleFrontierTrainerMons_Peter
+ },
+ [290] = {
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .trainerName = _("DEV"),
+ .speechBefore = {EC_WORD_COME_ON, EC_WORD_LET_S, EC_WORD_GET, EC_WORD_A, EC_WORD_MOVE, EC_WORD_ON},
+ .speechWin = {EC_WORD_I, EC_WORD_GET, EC_WORD_TO, EC_WORD_NAP, EC_WORD_AFTER, EC_WORD_THAT},
+ .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_NAP, EC_WORD_AFTER, EC_WORD_THAT},
+ .monSets = gBattleFrontierTrainerMons_Dev
+ },
+ [291] = {
+ .facilityClass = FACILITY_CLASS_HIKER,
+ .trainerName = _("COREY"),
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_TEACH, EC_WORD_YOU, EC_WORD_HOW, EC_WORD_TOUGH, EC_WORD_I_AM},
+ .speechWin = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_ME, EC_WORD_MAKE, EC_WORD_A, EC_MOVE(BRICK_BREAK)},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(FRUSTRATION), EC_WORD_IS, EC_WORD_CLOSE, EC_WORD_TO, EC_MOVE2(ERUPTION)},
+ .monSets = gBattleFrontierTrainerMons_Corey
+ },
+ [292] = {
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .trainerName = _("ANDRE"),
+ .speechBefore = {EC_WORD_NOW, EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_WORD_PERFECT, EC_WORD_FLAME_BODY},
+ .speechWin = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_FIERY, EC_WORD_DANCE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU, EC_WORD_WANT, EC_WORD_AN, EC_MOVE2(EXPLOSION), EC_WORD_HERE, EC_WORD_QUES},
+ .monSets = gBattleFrontierTrainerMons_Andre
+ },
+ [293] = {
+ .facilityClass = FACILITY_CLASS_KINDLER,
+ .trainerName = _("FERRIS"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_IN, EC_WORD_THE, EC_WORD_OLD, EC_WORD_CLASS},
+ .speechWin = {EC_WORD_NO_1, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_NO_1, EC_WORD_ANY, EC_WORD_MORE, EC_WORD_ELLIPSIS},
+ .monSets = gBattleFrontierTrainerMons_Ferris
+ },
+ [294] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("ALIVIA"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_GIDDY, EC_WORD_SO, EC_WORD_SHOULD, EC_WORD_YOU},
+ .speechWin = {EC_WORD_IT, EC_WORD_WAS, EC_WORD_ALL, EC_WORD_TOGETHER, EC_WORD_TOO, EC_WORD_EASY},
+ .speechLose = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GIDDY, EC_WORD_UP, EC_WORD_AND, EC_WORD_AWAY},
+ .monSets = gBattleFrontierTrainerMons_Alivia
+ },
+ [295] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("PAIGE"),
+ .speechBefore = {EC_WORD_LET_S, EC_WORD_ENJOY, EC_WORD_OUR, EC_WORD_BATTLE, EC_WORD_TOGETHER, 0xFFFF},
+ .speechWin = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_THANK_YOU, EC_WORD_VERY, EC_WORD_MUCH},
+ .speechLose = {EC_WORD_THAT_S_IT_EXCL, 0xFFFF, 0xFFFF, EC_WORD_DO, EC_WORD_GO, EC_WORD_ON},
+ .monSets = gBattleFrontierTrainerMons_Paige
+ },
+ [296] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("ANYA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_OH, EC_WORD_SO, EC_WORD_PRETTY, EC_WORD_FASHION},
+ .speechWin = {EC_WORD_FASHION, EC_WORD_SHOULD, EC_WORD_MATCH, EC_WORD_THE, EC_WORD_PERSON, 0xFFFF},
+ .speechLose = {EC_WORD_PRETTY, EC_WORD_COULD, EC_WORD_BE, EC_WORD_GOOD, 0xFFFF, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Anya
+ },
+ [297] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("DAWN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_GO, EC_WORD_ALL, EC_WORD_OUT, EC_WORD_EXCL, 0xFFFF},
+ .speechWin = {EC_WORD_DON_T, EC_WORD_BE, EC_WORD_A, EC_WORD_BABY, EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_YOU, EC_WORD_WON, EC_WORD_EXCL, EC_WORD_MOVE, EC_WORD_ON, EC_WORD_EXCL},
+ .monSets = gBattleFrontierTrainerMons_Dawn
+ },
+ [298] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("ABBY"),
+ .speechBefore = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_A, EC_WORD_TRAINER, EC_WORD_THAT_S, EC_WORD_REFRESHING},
+ .speechWin = {EC_WORD_VICTORY, EC_WORD_HAS, EC_WORD_A, EC_MOVE(SWEET_SCENT), EC_WORD_EXCL, 0xFFFF},
+ .speechLose = {EC_WORD_WHAT, EC_WORD_AN, EC_WORD_AWFUL, EC_WORD_STENCH, EC_WORD_EXCL, 0xFFFF},
+ .monSets = gBattleFrontierTrainerMons_Abby
+ },
+ [299] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("GRETEL"),
+ .speechBefore = {EC_WORD_I, EC_WORD_CAUSE, EC_MOVE(OUTRAGE), EC_WORD_AS, EC_WORD_A, EC_WORD_TRAINER},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_ONLY, EC_WORD_NATURAL, EC_WORD_SEE_YA, EC_WORD_BYE_BYE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_IT_S, EC_WORD_HARD, EC_WORD_TO, EC_WORD_BELIEVE, EC_WORD_BUT, EC_WORD_CONGRATS},
+ .monSets = gBattleFrontierTrainerMons_Gretel
+ }
+};
diff --git a/src/data/battle_frontier/battle_tent.h b/src/data/battle_frontier/battle_tent.h
new file mode 100644
index 000000000..946ca0187
--- /dev/null
+++ b/src/data/battle_frontier/battle_tent.h
@@ -0,0 +1,3005 @@
+// Slateport Battle Tent.
+const u16 gSlateportBattleTentTrainerMons_Jolie[] =
+{
+ 9,
+ 10,
+ 13,
+ 27,
+ 35,
+ 37,
+ 42,
+ 44,
+ 45,
+ 46,
+ 63,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Malachi[] =
+{
+ 9,
+ 16,
+ 17,
+ 27,
+ 36,
+ 39,
+ 42,
+ 45,
+ 48,
+ 49,
+ 53,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Kelsie[] =
+{
+ 4,
+ 5,
+ 6,
+ 11,
+ 28,
+ 34,
+ 35,
+ 37,
+ 43,
+ 51,
+ 53,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Davon[] =
+{
+ 4,
+ 5,
+ 6,
+ 12,
+ 26,
+ 36,
+ 37,
+ 38,
+ 40,
+ 44,
+ 46,
+ 50,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Glenda[] =
+{
+ 0,
+ 1,
+ 17,
+ 18,
+ 19,
+ 22,
+ 23,
+ 33,
+ 42,
+ 61,
+ 64,
+ 65,
+ 66,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Helena[] =
+{
+ 18,
+ 19,
+ 21,
+ 38,
+ 39,
+ 41,
+ 42,
+ 52,
+ 54,
+ 58,
+ 63,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Rodolfo[] =
+{
+ 0,
+ 1,
+ 4,
+ 5,
+ 7,
+ 8,
+ 18,
+ 20,
+ 21,
+ 37,
+ 38,
+ 40,
+ 62,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Davion[] =
+{
+ 17,
+ 23,
+ 24,
+ 25,
+ 31,
+ 32,
+ 33,
+ 34,
+ 39,
+ 43,
+ 44,
+ 49,
+ 57,
+ 69,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Kendall[] =
+{
+ 4,
+ 7,
+ 8,
+ 9,
+ 11,
+ 12,
+ 13,
+ 27,
+ 38,
+ 40,
+ 45,
+ 46,
+ 47,
+ 63,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Colten[] =
+{
+ 0,
+ 2,
+ 12,
+ 22,
+ 28,
+ 30,
+ 35,
+ 38,
+ 43,
+ 44,
+ 56,
+ 57,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Irvin[] =
+{
+ 0,
+ 1,
+ 2,
+ 3,
+ 14,
+ 15,
+ 24,
+ 25,
+ 32,
+ 34,
+ 39,
+ 59,
+ 60,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Shaun[] =
+{
+ 17,
+ 18,
+ 19,
+ 22,
+ 29,
+ 36,
+ 42,
+ 48,
+ 61,
+ 62,
+ 66,
+ 68,
+ 69,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Kyler[] =
+{
+ 22,
+ 23,
+ 28,
+ 29,
+ 31,
+ 32,
+ 34,
+ 39,
+ 55,
+ 64,
+ 65,
+ 67,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Maggie[] =
+{
+ 10,
+ 13,
+ 17,
+ 27,
+ 45,
+ 46,
+ 53,
+ 56,
+ 61,
+ 62,
+ 63,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Stephon[] =
+{
+ 8,
+ 10,
+ 16,
+ 23,
+ 29,
+ 43,
+ 44,
+ 60,
+ 62,
+ 63,
+ 68,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Rebecca[] =
+{
+ 8,
+ 13,
+ 21,
+ 29,
+ 33,
+ 41,
+ 48,
+ 54,
+ 59,
+ 61,
+ 68,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Reggie[] =
+{
+ 6,
+ 7,
+ 17,
+ 23,
+ 24,
+ 26,
+ 32,
+ 36,
+ 52,
+ 53,
+ 57,
+ 65,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Janae[] =
+{
+ 0,
+ 1,
+ 27,
+ 28,
+ 32,
+ 34,
+ 36,
+ 37,
+ 52,
+ 53,
+ 57,
+ 65,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Caiden[] =
+{
+ 10,
+ 14,
+ 15,
+ 16,
+ 20,
+ 21,
+ 25,
+ 30,
+ 35,
+ 47,
+ 48,
+ 50,
+ 69,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Kirsten[] =
+{
+ 10,
+ 16,
+ 18,
+ 19,
+ 20,
+ 21,
+ 25,
+ 30,
+ 35,
+ 39,
+ 41,
+ 48,
+ 69,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Kurtis[] =
+{
+ 0,
+ 1,
+ 36,
+ 37,
+ 40,
+ 46,
+ 49,
+ 51,
+ 64,
+ 67,
+ 68,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Stefan[] =
+{
+ 4,
+ 5,
+ 21,
+ 33,
+ 37,
+ 38,
+ 40,
+ 51,
+ 52,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Avery[] =
+{
+ 2,
+ 3,
+ 7,
+ 8,
+ 22,
+ 23,
+ 28,
+ 29,
+ 30,
+ 51,
+ 67,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Dwane[] =
+{
+ 14,
+ 15,
+ 30,
+ 43,
+ 44,
+ 45,
+ 46,
+ 55,
+ 58,
+ 59,
+ 63,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Mckenna[] =
+{
+ 27,
+ 29,
+ 30,
+ 32,
+ 36,
+ 48,
+ 51,
+ 52,
+ 53,
+ 57,
+ 67,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Camryn[] =
+{
+ 5,
+ 6,
+ 7,
+ 8,
+ 10,
+ 16,
+ 17,
+ 20,
+ 21,
+ 37,
+ 43,
+ 44,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Natasha[] =
+{
+ 1,
+ 3,
+ 4,
+ 5,
+ 9,
+ 11,
+ 12,
+ 20,
+ 21,
+ 22,
+ 51,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Austyn[] =
+{
+ 25,
+ 31,
+ 35,
+ 37,
+ 38,
+ 39,
+ 50,
+ 51,
+ 52,
+ 58,
+ 68,
+ 69,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Donovan[] =
+{
+ 10,
+ 16,
+ 17,
+ 24,
+ 25,
+ 43,
+ 44,
+ 47,
+ 49,
+ 53,
+ 59,
+ 60,
+ 64,
+ 65,
+ -1
+};
+
+const u16 gSlateportBattleTentTrainerMons_Tamia[] =
+{
+ 2,
+ 6,
+ 9,
+ 13,
+ 17,
+ 19,
+ 20,
+ 24,
+ 27,
+ 29,
+ 30,
+ -1
+};
+
+const struct BattleFrontierTrainer gSlateportBattleTentTrainers[] =
+{
+ [0] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("JOLIE"),
+ .speechBefore = {EC_WORD_WHAT, EC_WORD_WILL, EC_WORD_I, EC_WORD_BE, EC_WORD_TOMORROW, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LIKE, EC_WORD_IT_S, EC_WORD_FRIDAY, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_LIKE, EC_WORD_IT_S, EC_WORD_MONDAY, EC_WORD_ELLIPSIS},
+ .monSets = gSlateportBattleTentTrainerMons_Jolie
+ },
+ [1] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("MALACHI"),
+ .speechBefore = {EC_WORD_BAD, EC_WORD_NEWS, EC_WORD_EXCL, EC_WORD_IT_S, EC_WORD_A, EC_MOVE(SAND_TOMB)},
+ .speechWin = {EC_WORD_YEEHAW_EXCL, -1, -1, EC_WORD_I_VE, EC_WORD_DONE, EC_WORD_IT},
+ .speechLose = {EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_IN, EC_WORD_THIS, EC_MOVE(SAND_TOMB), EC_WORD_ELLIPSIS},
+ .monSets = gSlateportBattleTentTrainerMons_Malachi
+ },
+ [2] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("KELSIE"),
+ .speechBefore = {EC_WORD_GO, EC_WORD_EXCL_EXCL, EC_WORD_MY, EC_WORD_BATH, EC_WORD_POKEMON, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_WORD_YAHOO, EC_WORD_EXCL_EXCL, EC_WORD_MY, EC_WORD_BATH, EC_WORD_POKEMON, EC_WORD_EXCL_EXCL},
+ .speechLose = {EC_WORD_GWAH, EC_WORD_EXCL_EXCL, EC_WORD_MY, EC_WORD_BATH, EC_WORD_POKEMON, EC_WORD_EXCL_EXCL},
+ .monSets = gSlateportBattleTentTrainerMons_Kelsie
+ },
+ [3] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("DAVON"),
+ .speechBefore = {EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL, -1, EC_WORD_GREAT, EC_MOVE(WHIRLPOOL), EC_WORD_ISN_T_IT_QUES},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_LIKE, EC_WORD_A, EC_MOVE(WHIRLPOOL), EC_WORD_YEAH_YEAH, EC_WORD_EXCL_EXCL},
+ .speechLose = {EC_WORD_DON_T, EC_WORD_GET, EC_MOVE2(BEAT_UP), EC_WORD_IN, EC_WORD_THAT, EC_MOVE(WHIRLPOOL)},
+ .monSets = gSlateportBattleTentTrainerMons_Davon
+ },
+ [4] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("GLENDA"),
+ .speechBefore = {EC_WORD_CONVERSATION, EC_WORD_CAN, EC_WORD_WAIT, EC_WORD_UNTIL, EC_WORD_I, EC_WORD_WIN},
+ .speechWin = {EC_WORD_FABULOUS, EC_WORD_EXCL, EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_ROCK},
+ .speechLose = {EC_WORD_NO, EC_WORD_EXCL, -1, EC_WORD_I, EC_WORD_WASN_T, EC_WORD_SERIOUS},
+ .monSets = gSlateportBattleTentTrainerMons_Glenda
+ },
+ [5] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("HELENA"),
+ .speechBefore = {EC_WORD_DOES, EC_WORD_MY, EC_WORD_BEAUTY, EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_SO, EC_WORD_SORRY, EC_WORD_BUT, EC_WORD_YOU_RE, EC_WORD_BORING},
+ .speechLose = {EC_WORD_I, EC_WORD_DO, EC_WORD_SO, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_EXCL},
+ .monSets = gSlateportBattleTentTrainerMons_Helena
+ },
+ [6] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("RODOLFO"),
+ .speechBefore = {EC_WORD_GO, EC_WORD_GET, EC_WORD_A, EC_POKEMON(WHISCASH), EC_WORD_FOR, EC_WORD_ME},
+ .speechWin = {EC_WORD_AWW, EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_HAVE, EC_WORD_A, EC_POKEMON(WHISCASH)},
+ .speechLose = {EC_WORD_PLEASE, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_POKEMON(WHISCASH), EC_WORD_BADLY},
+ .monSets = gSlateportBattleTentTrainerMons_Rodolfo
+ },
+ [7] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("DAVION"),
+ .speechBefore = {EC_WORD_GRAAAH, EC_WORD_GRAAAH, EC_WORD_EXCL_EXCL, EC_WORD_GRAAAH, EC_WORD_GRAAAH, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_MOVE2(ROAR), EC_WORD_EXCL, -1, EC_MOVE2(ROAR), EC_WORD_EXCL_EXCL, -1},
+ .speechLose = {EC_WORD_URGH, EC_WORD_WAAAH, EC_WORD_EXCL_EXCL, -1, -1, -1},
+ .monSets = gSlateportBattleTentTrainerMons_Davion
+ },
+ [8] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("KENDALL"),
+ .speechBefore = {EC_WORD_A_LITTLE, EC_MOVE2(PETAL_DANCE), EC_WORD_TO, EC_WORD_PLEASE, EC_WORD_YOU, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I, EC_WORD_DO, EC_WORD_THIS, EC_WORD_ONLY, EC_WORD_FOR, EC_WORD_WORK},
+ .speechLose = {EC_WORD_HOW, EC_WORD_COULD, EC_WORD_YOU, EC_MOVE2(POUND), EC_WORD_ME, EC_WORD_QUES},
+ .monSets = gSlateportBattleTentTrainerMons_Kendall
+ },
+ [9] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("COLTEN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_RUN, EC_WORD_AROUND},
+ .speechWin = {EC_WORD_YAY, EC_WORD_EXCL, EC_WORD_WANT, EC_WORD_TO, EC_WORD_RUN, EC_WORD_QUES},
+ .speechLose = {EC_WORD_A, EC_WORD_SWIFT_SWIM, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_GOOD, EC_WORD_TOO},
+ .monSets = gSlateportBattleTentTrainerMons_Colten
+ },
+ [10] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("IRVIN"),
+ .speechBefore = {EC_WORD_HAVE, EC_WORD_A, EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_MOVE(CONFUSE_RAY)},
+ .speechWin = {EC_WORD_YAHOO, EC_WORD_MY, EC_MOVE(CONFUSE_RAY), EC_WORD_IS, EC_WORD_THE, EC_WORD_BEST},
+ .speechLose = {EC_WORD_GWAH, EC_WORD_EXCL_EXCL, -1, EC_WORD_I_AM, EC_WORD_SORRY, EC_WORD_EXCL},
+ .monSets = gSlateportBattleTentTrainerMons_Irvin
+ },
+ [11] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("SHAUN"),
+ .speechBefore = {EC_WORD_LISTEN, EC_WORD_ELLIPSIS, EC_WORD_YOU, EC_WORD_AREN_T, EC_WORD_VERY, EC_WORD_GOOD},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SEE, EC_WORD_QUES, EC_WORD_I, EC_WORD_WAS, EC_WORD_RIGHT},
+ .speechLose = {EC_WORD_YES, EC_WORD_YES, EC_WORD_ELLIPSIS, EC_WORD_YOU_RE, EC_WORD_QUITE, EC_WORD_SOMETHING},
+ .monSets = gSlateportBattleTentTrainerMons_Shaun
+ },
+ [12] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("KYLER"),
+ .speechBefore = {EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_QUES},
+ .speechWin = {EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_YAY},
+ .speechLose = {EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_WOW},
+ .monSets = gSlateportBattleTentTrainerMons_Kyler
+ },
+ [13] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("MAGGIE"),
+ .speechBefore = {EC_POKEMON(VULPIX), EC_POKEMON(XATU), EC_POKEMON2(UMBREON), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_POKEMON(NOSEPASS), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_POKEMON(SEVIPER), EC_WORD_EXCL, -1},
+ .speechLose = {EC_POKEMON(NOSEPASS), EC_WORD_ELLIPSIS, EC_WORD_UM, EC_POKEMON2(SNORLAX), EC_WORD_ELLIPSIS, EC_WORD_UH_OH},
+ .monSets = gSlateportBattleTentTrainerMons_Maggie
+ },
+ [14] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("STEPHON"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_ENJOY, EC_WORD_AN, EC_WORD_EGG},
+ .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_WORD_ENJOY, EC_WORD_THIS, EC_WORD_TASTY, EC_WORD_VICTORY},
+ .speechLose = {EC_WORD_AWFUL, EC_WORD_EXCL_EXCL, -1, EC_WORD_JUST, EC_WORD_AWFUL, EC_WORD_EXCL_EXCL},
+ .monSets = gSlateportBattleTentTrainerMons_Stephon
+ },
+ [15] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("REBECCA"),
+ .speechBefore = {EC_WORD_THAT, EC_WORD_EGG, EC_WORD_HAS, EC_WORD_A, EC_WORD_TASTY, EC_WORD_SHINE},
+ .speechWin = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_EXCL, EC_WORD_SMELL, EC_WORD_THAT, EC_WORD_STENCH},
+ .speechLose = {EC_WORD_YOU, EC_WORD_CAN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_STOP, EC_WORD_ELLIPSIS},
+ .monSets = gSlateportBattleTentTrainerMons_Rebecca
+ },
+ [16] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("REGGIE"),
+ .speechBefore = {EC_WORD_POKEMON, EC_WORD_COME, EC_WORD_BEFORE, EC_WORD_MONEY, EC_WORD_OR, EC_WORD_FAMILY},
+ .speechWin = {EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_ME, EC_WORD_STRONG},
+ .speechLose = {EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_I_AM, EC_WORD_SO, EC_WORD_THICK, EC_WORD_ELLIPSIS},
+ .monSets = gSlateportBattleTentTrainerMons_Reggie
+ },
+ [17] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("JANAE"),
+ .speechBefore = {EC_WORD_I, EC_WORD_JUST, EC_WORD_ADORE, EC_WORD_YOUR, EC_WORD_TOUGH, EC_WORD_LOOK},
+ .speechWin = {EC_WORD_I, EC_WORD_LIKE, EC_WORD_HOW, EC_WORD_YOU, EC_MOVE2(STRUGGLE), -1},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_MEAN, EC_WORD_AND, EC_WORD_AWFUL, EC_WORD_TRAINER},
+ .monSets = gSlateportBattleTentTrainerMons_Janae
+ },
+ [18] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("CAIDEN"),
+ .speechBefore = {EC_WORD_MY, EC_MOVE2(CURSE), EC_WORD_WILL, EC_WORD_BREAK, EC_WORD_YOUR, EC_WORD_SPIRIT},
+ .speechWin = {EC_MOVE2(CURSE), EC_WORD_QUES, EC_WORD_IT_S, EC_WORD_A, EC_WORD_LIE, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(CURSE), EC_WORD_WILL, EC_WORD_LAST, EC_WORD_FOREVER, -1},
+ .monSets = gSlateportBattleTentTrainerMons_Caiden
+ },
+ [19] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("KIRSTEN"),
+ .speechBefore = {EC_WORD_HUH_QUES, EC_WORD_A, EC_WORD_BATTLE, EC_WORD_YOU, EC_WORD_SAID, EC_WORD_QUES},
+ .speechWin = {EC_WORD_HUH_QUES, EC_WORD_STRONG, EC_WORD_BUT, EC_WORD_NOT, EC_WORD_STRONG, EC_WORD_ENOUGH},
+ .speechLose = {EC_WORD_HUH_QUES, EC_WORD_I, EC_WORD_SURRENDER, EC_WORD_TO, EC_WORD_YOUR, EC_MOVE(STRENGTH)},
+ .monSets = gSlateportBattleTentTrainerMons_Kirsten
+ },
+ [20] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("KURTIS"),
+ .speechBefore = {EC_WORD_SORRY, EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_GET, EC_MOVE2(BEAT_UP)},
+ .speechWin = {EC_WORD_I, EC_WORD_SAID, EC_WORD_WE, EC_WORD_WOULD, EC_MOVE2(POUND), EC_WORD_YOU},
+ .speechLose = {EC_WORD_HOW, EC_WORD_DID, EC_WORD_I, EC_WORD_GET, EC_MOVE2(BEAT_UP), EC_WORD_QUES},
+ .monSets = gSlateportBattleTentTrainerMons_Kurtis
+ },
+ [21] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("STEFAN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_ONLY, EC_WORD_WANT, EC_WORD_CUTE, EC_WORD_POKEMON, -1},
+ .speechWin = {EC_WORD_WHAT, EC_WORD_IS, EC_WORD_IT, EC_WORD_TO, EC_WORD_YOU, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_KIND, EC_WORD_OF, EC_WORD_AWESOME, EC_WORD_ELLIPSIS, -1},
+ .monSets = gSlateportBattleTentTrainerMons_Stefan
+ },
+ [22] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("AVERY"),
+ .speechBefore = {EC_WORD_TOYS, EC_WORD_EXCL, EC_WORD_I, EC_WORD_NEED, EC_WORD_MORE, EC_WORD_TOYS},
+ .speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_SOME, EC_WORD_EASY, EC_WORD_MONEY, EC_WORD_FAST},
+ .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_WORK, EC_WORD_FOR, EC_WORD_MONEY},
+ .monSets = gSlateportBattleTentTrainerMons_Avery
+ },
+ [23] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("DWANE"),
+ .speechBefore = {EC_WORD_MMM, EC_WORD_TASTY, EC_WORD_ELLIPSIS, EC_WORD_WONDER, EC_WORD_WHAT, EC_WORD_QUES},
+ .speechWin = {EC_WORD_MMM, EC_WORD_MMM, EC_WORD_ELLIPSIS, EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_KNOW},
+ .speechLose = {EC_WORD_MMM, EC_WORD_MMM, EC_WORD_ELLIPSIS, EC_WORD_OH_YEAH, EC_WORD_THIS_IS_IT_EXCL, -1},
+ .monSets = gSlateportBattleTentTrainerMons_Dwane
+ },
+ [24] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("MCKENNA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_SMALL, EC_WORD_TALK, EC_WORD_LET_S, EC_WORD_GO},
+ .speechWin = {EC_WORD_YUP, EC_WORD_THAT_S, EC_WORD_THAT, -1, -1, -1},
+ .speechLose = {EC_WORD_KTHX_BYE, -1, -1, -1, -1, -1},
+ .monSets = gSlateportBattleTentTrainerMons_Mckenna
+ },
+ [25] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("CAMRYN"),
+ .speechBefore = {EC_WORD_MR, EC_WORD_JUDGE, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_OUR, EC_WORD_TRUST},
+ .speechWin = {EC_WORD_YES_SIR_EXCL, EC_WORD_WE_RE, EC_WORD_NO_1, EC_WORD_IN, EC_WORD_THIS, EC_WORD_CONTEST},
+ .speechLose = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_GIVE_UP, EC_WORD_MY, EC_WORD_IDOL, EC_WORD_DREAM},
+ .monSets = gSlateportBattleTentTrainerMons_Camryn
+ },
+ [26] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("NATASHA"),
+ .speechBefore = {EC_WORD_COME_OVER, EC_WORD_TO, EC_WORD_MY, EC_WORD_PLACE, EC_WORD_OK_QUES, -1},
+ .speechWin = {EC_WORD_COME_ON, EC_WORD_OVER, EC_WORD_IT, EC_WORD_WILL, EC_WORD_BE, EC_WORD_GREAT},
+ .speechLose = {EC_WORD_AWW, EC_WORD_WON_T, EC_WORD_YOU, EC_WORD_COME_OVER, EC_WORD_QUES, -1},
+ .monSets = gSlateportBattleTentTrainerMons_Natasha
+ },
+ [27] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("AUSTYN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_CARE, EC_WORD_HOW, EC_WORD_WE, EC_WORD_MATCH_UP},
+ .speechWin = {EC_WORD_HAH, EC_WORD_BACK, EC_WORD_TO, EC_WORD_SCHOOL, EC_WORD_FOR, EC_WORD_YOU},
+ .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_STUDY, EC_WORD_MY, EC_WORD_LESSONS},
+ .monSets = gSlateportBattleTentTrainerMons_Austyn
+ },
+ [28] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("DONOVAN"),
+ .speechBefore = {EC_WORD_OH, EC_WORD_I_AM, EC_WORD_FEELING, EC_WORD_SLIMY, EC_WORD_ALL, EC_WORD_OVER},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_DOWN, EC_WORD_THE, EC_MOVE2(MEGA_DRAIN), EC_WORD_HAHAHA},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_NATURALLY, EC_WORD_SLIMY, EC_WORD_THAT_S, EC_WORD_WHAT, EC_WORD_I_AM},
+ .monSets = gSlateportBattleTentTrainerMons_Donovan
+ },
+ [29] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("TAMIA"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_ANGRY, EC_WORD_WITH, EC_WORD_MY, EC_WORD_FATHER, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_DISLIKE, EC_WORD_MY, EC_WORD_FATHER, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_JUST, EC_WORD_SO, EC_WORD_ADORE, EC_WORD_MY, EC_WORD_FATHER},
+ .monSets = gSlateportBattleTentTrainerMons_Tamia
+ }
+};
+
+const struct FacilityMon gSlateportBattleTentMons[] =
+{
+ [0] = {
+ .species = SPECIES_ZIGZAGOON,
+ .moves = {MOVE_TACKLE, MOVE_CHARM, MOVE_ODOR_SLEUTH, MOVE_PIN_MISSILE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [1] = {
+ .species = SPECIES_ZIGZAGOON,
+ .moves = {MOVE_DIG, MOVE_MUD_SPORT, MOVE_TAIL_WHIP, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [2] = {
+ .species = SPECIES_BEAUTIFLY,
+ .moves = {MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, MOVE_GUST, MOVE_HARDEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [3] = {
+ .species = SPECIES_DUSTOX,
+ .moves = {MOVE_POISON_STING, MOVE_MOONLIGHT, MOVE_PROTECT, MOVE_GUST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_ORAN_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [4] = {
+ .species = SPECIES_WAILMER,
+ .moves = {MOVE_ROLLOUT, MOVE_CURSE, MOVE_GROWL, MOVE_WHIRLPOOL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [5] = {
+ .species = SPECIES_WAILMER,
+ .moves = {MOVE_ROLLOUT, MOVE_GROWL, MOVE_WHIRLPOOL, MOVE_WATER_PULSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [6] = {
+ .species = SPECIES_MARILL,
+ .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_BUBBLE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [7] = {
+ .species = SPECIES_WINGULL,
+ .moves = {MOVE_SUPERSONIC, MOVE_GROWL, MOVE_WING_ATTACK, MOVE_STEEL_WING},
+ .itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAIVE
+ },
+ [8] = {
+ .species = SPECIES_PELIPPER,
+ .moves = {MOVE_TWISTER, MOVE_WATER_SPORT, MOVE_GROWL, MOVE_WING_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [9] = {
+ .species = SPECIES_CACNEA,
+ .moves = {MOVE_SANDSTORM, MOVE_LEER, MOVE_LEECH_SEED, MOVE_PIN_MISSILE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SPEED,
+ .nature = NATURE_JOLLY
+ },
+ [10] = {
+ .species = SPECIES_LOMBRE,
+ .moves = {MOVE_ASTONISH, MOVE_WATER_GUN, MOVE_FAKE_OUT, MOVE_ABSORB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [11] = {
+ .species = SPECIES_LOTAD,
+ .moves = {MOVE_SYNTHESIS, MOVE_NATURE_POWER, MOVE_RAIN_DANCE, MOVE_MEGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_DOCILE
+ },
+ [12] = {
+ .species = SPECIES_SEEDOT,
+ .moves = {MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_LEECH_SEED, MOVE_BIDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_TIMID
+ },
+ [13] = {
+ .species = SPECIES_NUZLEAF,
+ .moves = {MOVE_FAKE_OUT, MOVE_NATURE_POWER, MOVE_HARDEN, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [14] = {
+ .species = SPECIES_NINJASK,
+ .moves = {MOVE_FURY_CUTTER, MOVE_SCREECH, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [15] = {
+ .species = SPECIES_NINJASK,
+ .moves = {MOVE_FURY_CUTTER, MOVE_DOUBLE_TEAM, MOVE_SCREECH, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [16] = {
+ .species = SPECIES_GRAVELER,
+ .moves = {MOVE_MUD_SPORT, MOVE_BLOCK, MOVE_ROCK_TOMB, MOVE_MAGNITUDE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [17] = {
+ .species = SPECIES_BALTOY,
+ .moves = {MOVE_SELF_DESTRUCT, MOVE_ANCIENT_POWER, MOVE_PSYBEAM, MOVE_REFLECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAIVE
+ },
+ [18] = {
+ .species = SPECIES_MIGHTYENA,
+ .moves = {MOVE_BITE, MOVE_ROAR, MOVE_SWAGGER, MOVE_TACKLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [19] = {
+ .species = SPECIES_MIGHTYENA,
+ .moves = {MOVE_ODOR_SLEUTH, MOVE_HOWL, MOVE_SAND_ATTACK, MOVE_POISON_FANG},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [20] = {
+ .species = SPECIES_LINOONE,
+ .moves = {MOVE_HEADBUTT, MOVE_TICKLE, MOVE_TAIL_WHIP, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [21] = {
+ .species = SPECIES_GOLDEEN,
+ .moves = {MOVE_WATER_SPORT, MOVE_HORN_ATTACK, MOVE_WATERFALL, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_CALM
+ },
+ [22] = {
+ .species = SPECIES_ELECTRIKE,
+ .moves = {MOVE_BITE, MOVE_SPARK, MOVE_ROAR, MOVE_FLASH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_MODEST
+ },
+ [23] = {
+ .species = SPECIES_VOLTORB,
+ .moves = {MOVE_SPARK, MOVE_ROLLOUT, MOVE_CHARGE, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .nature = NATURE_MILD
+ },
+ [24] = {
+ .species = SPECIES_ARON,
+ .moves = {MOVE_DIG, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_ENDEAVOR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [25] = {
+ .species = SPECIES_ARON,
+ .moves = {MOVE_MUD_SLAP, MOVE_IRON_TAIL, MOVE_HARDEN, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [26] = {
+ .species = SPECIES_TRAPINCH,
+ .moves = {MOVE_BODY_SLAM, MOVE_FOCUS_ENERGY, MOVE_SAND_TOMB, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [27] = {
+ .species = SPECIES_CACNEA,
+ .moves = {MOVE_INGRAIN, MOVE_SANDSTORM, MOVE_POISON_STING, MOVE_DESTINY_BOND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_TIMID
+ },
+ [28] = {
+ .species = SPECIES_TAILLOW,
+ .moves = {MOVE_GROWL, MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_ENDEAVOR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [29] = {
+ .species = SPECIES_SWELLOW,
+ .moves = {MOVE_SUPERSONIC, MOVE_GROWL, MOVE_FOCUS_ENERGY, MOVE_PECK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [30] = {
+ .species = SPECIES_GOLBAT,
+ .moves = {MOVE_ASTONISH, MOVE_GUST, MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SPELL_TAG,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_TIMID
+ },
+ [31] = {
+ .species = SPECIES_LOUDRED,
+ .moves = {MOVE_ASTONISH, MOVE_SCREECH, MOVE_UPROAR, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [32] = {
+ .species = SPECIES_SPINDA,
+ .moves = {MOVE_DIZZY_PUNCH, MOVE_FAINT_ATTACK, MOVE_HYPNOSIS, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [33] = {
+ .species = SPECIES_MAGNEMITE,
+ .moves = {MOVE_METAL_SOUND, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SPARK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_SERIOUS
+ },
+ [34] = {
+ .species = SPECIES_WHISMUR,
+ .moves = {MOVE_REST, MOVE_SLEEP_TALK, MOVE_HOWL, MOVE_BODY_SLAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [35] = {
+ .species = SPECIES_MAKUHITA,
+ .moves = {MOVE_SAND_ATTACK, MOVE_KNOCK_OFF, MOVE_ARM_THRUST, MOVE_BELLY_DRUM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [36] = {
+ .species = SPECIES_NUMEL,
+ .moves = {MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_GROWL, MOVE_FOCUS_ENERGY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_MODEST
+ },
+ [37] = {
+ .species = SPECIES_BARBOACH,
+ .moves = {MOVE_MAGNITUDE, MOVE_MUD_SPORT, MOVE_WATER_SPORT, MOVE_WATER_GUN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SEA_INCENSE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [38] = {
+ .species = SPECIES_TENTACOOL,
+ .moves = {MOVE_SCREECH, MOVE_BUBBLE_BEAM, MOVE_ACID, MOVE_BARRIER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [39] = {
+ .species = SPECIES_VIGOROTH,
+ .moves = {MOVE_FOCUS_ENERGY, MOVE_FURY_SWIPES, MOVE_ENDURE, MOVE_YAWN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_AGUAV_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [40] = {
+ .species = SPECIES_MAGIKARP,
+ .moves = {MOVE_TACKLE, MOVE_FLAIL, MOVE_SPLASH, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_SCALE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [41] = {
+ .species = SPECIES_SEVIPER,
+ .moves = {MOVE_LICK, MOVE_POISON_FANG, MOVE_GLARE, MOVE_WRAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [42] = {
+ .species = SPECIES_SOLROCK,
+ .moves = {MOVE_ROCK_THROW, MOVE_HARDEN, MOVE_PSYWAVE, MOVE_TACKLE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [43] = {
+ .species = SPECIES_KECLEON,
+ .moves = {MOVE_PSYBEAM, MOVE_SUBSTITUTE, MOVE_THIEF, MOVE_TAIL_WHIP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [44] = {
+ .species = SPECIES_KECLEON,
+ .moves = {MOVE_FAINT_ATTACK, MOVE_ASTONISH, MOVE_LICK, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_IAPAPA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [45] = {
+ .species = SPECIES_SHROOMISH,
+ .moves = {MOVE_STUN_SPORE, MOVE_TACKLE, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [46] = {
+ .species = SPECIES_SHROOMISH,
+ .moves = {MOVE_ABSORB, MOVE_STUN_SPORE, MOVE_SPORE, MOVE_LEECH_SEED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FIGY_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BRAVE
+ },
+ [47] = {
+ .species = SPECIES_LOMBRE,
+ .moves = {MOVE_NATURE_POWER, MOVE_ASTONISH, MOVE_GROWL, MOVE_ABSORB},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_LONELY
+ },
+ [48] = {
+ .species = SPECIES_NUMEL,
+ .moves = {MOVE_EMBER, MOVE_GROWL, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [49] = {
+ .species = SPECIES_TRAPINCH,
+ .moves = {MOVE_FAINT_ATTACK, MOVE_DIG, MOVE_BITE, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [50] = {
+ .species = SPECIES_PELIPPER,
+ .moves = {MOVE_WING_ATTACK, MOVE_SUPERSONIC, MOVE_MIST, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WIKI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [51] = {
+ .species = SPECIES_WINGULL,
+ .moves = {MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_GROWL, MOVE_ICY_WIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [52] = {
+ .species = SPECIES_MARILL,
+ .moves = {MOVE_DOUBLE_EDGE, MOVE_RAIN_DANCE, MOVE_TAIL_WHIP, MOVE_WATER_GUN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_GANLON_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [53] = {
+ .species = SPECIES_SKITTY,
+ .moves = {MOVE_ASSIST, MOVE_ATTRACT, MOVE_SING, MOVE_CHARM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [54] = {
+ .species = SPECIES_SEVIPER,
+ .moves = {MOVE_SWAGGER, MOVE_WRAP, MOVE_POISON_TAIL, MOVE_HAZE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_BRAVE
+ },
+ [55] = {
+ .species = SPECIES_GOLBAT,
+ .moves = {MOVE_BITE, MOVE_TORMENT, MOVE_SCREECH, MOVE_POISON_FANG},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_HARDY
+ },
+ [56] = {
+ .species = SPECIES_RALTS,
+ .moves = {MOVE_HYPNOSIS, MOVE_IMPRISON, MOVE_PSYCHIC, MOVE_DREAM_EATER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGO_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_TIMID
+ },
+ [57] = {
+ .species = SPECIES_SANDSHREW,
+ .moves = {MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_SAND_TOMB, MOVE_DEFENSE_CURL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
+ .evSpread = 0,
+ .nature = NATURE_HARDY
+ },
+ [58] = {
+ .species = SPECIES_SWALOT,
+ .moves = {MOVE_YAWN, MOVE_SLUDGE, MOVE_ENCORE, MOVE_POUND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_IMPISH
+ },
+ [59] = {
+ .species = SPECIES_VOLBEAT,
+ .moves = {MOVE_TACKLE, MOVE_CONFUSE_RAY, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [60] = {
+ .species = SPECIES_ILLUMISE,
+ .moves = {MOVE_CHARM, MOVE_TACKLE, MOVE_ENCORE, MOVE_MOONLIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [61] = {
+ .species = SPECIES_KADABRA,
+ .moves = {MOVE_DISABLE, MOVE_CONFUSION, MOVE_REFLECT, MOVE_RECOVER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [62] = {
+ .species = SPECIES_KIRLIA,
+ .moves = {MOVE_CALM_MIND, MOVE_CONFUSION, MOVE_DOUBLE_TEAM, MOVE_GROWL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [63] = {
+ .species = SPECIES_BRELOOM,
+ .moves = {MOVE_ABSORB, MOVE_TACKLE, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAIVE
+ },
+ [64] = {
+ .species = SPECIES_PLUSLE,
+ .moves = {MOVE_SPARK, MOVE_ENCORE, MOVE_THUNDER_WAVE, MOVE_GROWL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_LONELY
+ },
+ [65] = {
+ .species = SPECIES_PLUSLE,
+ .moves = {MOVE_SPARK, MOVE_FAKE_TEARS, MOVE_SUBSTITUTE, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MILD
+ },
+ [66] = {
+ .species = SPECIES_ELECTRIKE,
+ .moves = {MOVE_SPARK, MOVE_CHARGE, MOVE_ROAR, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_APICOT_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED,
+ .nature = NATURE_TIMID
+ },
+ [67] = {
+ .species = SPECIES_SWABLU,
+ .moves = {MOVE_SING, MOVE_PECK, MOVE_STEEL_WING, MOVE_SAFEGUARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [68] = {
+ .species = SPECIES_MACHOP,
+ .moves = {MOVE_FOCUS_ENERGY, MOVE_VITAL_THROW, MOVE_SEISMIC_TOSS, MOVE_FORESIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [69] = {
+ .species = SPECIES_MACHOKE,
+ .moves = {MOVE_FOCUS_ENERGY, MOVE_LEER, MOVE_KARATE_CHOP, MOVE_FORESIGHT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ }
+};
+
+// Verdanturf Battle Tent.
+const u16 gVerdanturfBattleTentTrainerMons_Brenna[] =
+{
+ 4,
+ 11,
+ 13,
+ 18,
+ 26,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Dilan[] =
+{
+ 30,
+ 37,
+ 13,
+ 29,
+ 42,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Eliana[] =
+{
+ 6,
+ 7,
+ 17,
+ 18,
+ 40,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Markus[] =
+{
+ 6,
+ 7,
+ 18,
+ 24,
+ 38,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Caitlyn[] =
+{
+ 0,
+ 12,
+ 25,
+ 28,
+ 22,
+ 44,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Desiree[] =
+{
+ 8,
+ 12,
+ 21,
+ 22,
+ 31,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Ronald[] =
+{
+ 1,
+ 20,
+ 23,
+ 25,
+ 32,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Ashten[] =
+{
+ 9,
+ 12,
+ 27,
+ 37,
+ 43,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Gerard[] =
+{
+ 36,
+ 7,
+ 34,
+ 6,
+ 40,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Bradly[] =
+{
+ 26,
+ 3,
+ 0,
+ 2,
+ 17,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Dennis[] =
+{
+ 14,
+ 37,
+ 2,
+ 38,
+ 27,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Prestin[] =
+{
+ 31,
+ 28,
+ 22,
+ 25,
+ 44,
+ 43,
+ 41,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Ernesto[] =
+{
+ 33,
+ 32,
+ 25,
+ 35,
+ 34,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Nala[] =
+{
+ 1,
+ 4,
+ 8,
+ 11,
+ 17,
+ 40,
+ 34,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Darnell[] =
+{
+ 0,
+ 29,
+ 35,
+ 37,
+ 39,
+ 43,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Ashlyn[] =
+{
+ 29,
+ 36,
+ 32,
+ 30,
+ 17,
+ 6,
+ 44,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Addison[] =
+{
+ 0,
+ 1,
+ 16,
+ 31,
+ 6,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Justine[] =
+{
+ 0,
+ 1,
+ 16,
+ 36,
+ 18,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Tyson[] =
+{
+ 5,
+ 15,
+ 22,
+ 30,
+ 16,
+ 39,
+ 43,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Laila[] =
+{
+ 5,
+ 15,
+ 19,
+ 24,
+ 41,
+ 43,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Waren[] =
+{
+ 0,
+ 9,
+ 10,
+ 11,
+ 23,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Tobias[] =
+{
+ 6,
+ 7,
+ 24,
+ 38,
+ 40,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Josiah[] =
+{
+ 8,
+ 16,
+ 23,
+ 34,
+ 3,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Dion[] =
+{
+ 14,
+ 2,
+ 11,
+ 39,
+ 21,
+ 38,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Kenzie[] =
+{
+ 18,
+ 10,
+ 16,
+ 26,
+ 25,
+ 27,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Lillian[] =
+{
+ 24,
+ 34,
+ 36,
+ 38,
+ 5,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Lesley[] =
+{
+ 26,
+ 0,
+ 18,
+ 13,
+ 25,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Marquis[] =
+{
+ 24,
+ 34,
+ 5,
+ 15,
+ 7,
+ 42,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Freddy[] =
+{
+ 18,
+ 21,
+ 26,
+ 29,
+ 41,
+ -1
+};
+
+const u16 gVerdanturfBattleTentTrainerMons_Cecilia[] =
+{
+ 23,
+ 26,
+ 27,
+ 28,
+ 31,
+ -1
+};
+
+const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[] =
+{
+ [0] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("BRENNA"),
+ .speechBefore = {EC_WORD_NO, EC_WORD_DAYS, EC_WORD_GO, EC_WORD_WITHOUT, EC_WORD_MY, EC_MOVE(FAKE_TEARS)},
+ .speechWin = {EC_WORD_OH, EC_WORD_THAT_WAS, EC_WORD_SO, EC_WORD_REFRESHING, EC_WORD_EXCL, -1},
+ .speechLose = {EC_WORD_ALL, EC_WORD_I, EC_WORD_EVER, EC_WORD_GET, EC_WORD_IS, EC_MOVE(TORMENT)},
+ .monSets = gVerdanturfBattleTentTrainerMons_Brenna
+ },
+ [1] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("DILAN"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_KNOW, EC_WORD_HOW, EC_WORD_BORED, EC_WORD_I_AM},
+ .speechWin = {EC_WORD_LOSING, EC_WORD_ISN_T, EC_WORD_EXCITING, EC_WORD_AT, EC_WORD_ALL, EC_WORD_ELLIPSIS},
+ .speechLose = {EC_WORD_EXCITING, EC_WORD_EXCL_EXCL, EC_WORD_BYE_BYE, EC_WORD_TO, EC_WORD_BEING, EC_WORD_BORED},
+ .monSets = gVerdanturfBattleTentTrainerMons_Dilan
+ },
+ [2] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("ELIANA"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_ON, EC_WORD_A, EC_WORD_VACATION, EC_WORD_SOON},
+ .speechWin = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_GET, EC_WORD_SOME, EC_WORD_MONEY},
+ .speechLose = {EC_WORD_NO, EC_WORD_SLEEP, EC_WORD_UNTIL, EC_WORD_I, EC_WORD_GET, EC_WORD_HOME},
+ .monSets = gVerdanturfBattleTentTrainerMons_Eliana
+ },
+ [3] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("MARKUS"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_SMART, EC_WORD_EXCL, EC_WORD_IF_I_LOSE, EC_WORD_I, EC_MOVE(SELF_DESTRUCT)},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_A, EC_WORD_NON_STOP, EC_MOVE2(EXPLOSION), EC_WORD_OF, EC_WORD_JOY},
+ .speechLose = {EC_WORD_I_VE, EC_WORD_LOST, EC_WORD_ELLIPSIS, EC_WORD_TIME, EC_WORD_TO, EC_MOVE(SELF_DESTRUCT)},
+ .monSets = gVerdanturfBattleTentTrainerMons_Markus
+ },
+ [4] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("CAITLYN"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_BORED, EC_WORD_OF, EC_WORD_BEING, EC_WORD_AN, EC_WORD_IDOL},
+ .speechWin = {EC_WORD_A, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_BEST, EC_WORD_FOR, EC_WORD_HAPPINESS},
+ .speechLose = {EC_WORD_LOSING, EC_WORD_DOESN_T, EC_WORD_BUG, EC_WORD_ME, EC_WORD_AT, EC_WORD_ALL},
+ .monSets = gVerdanturfBattleTentTrainerMons_Caitlyn
+ },
+ [5] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("DESIREE"),
+ .speechBefore = {EC_WORD_DOESN_T, EC_WORD_MY, EC_WORD_BEAUTY, EC_MOVE(ASTONISH), EC_WORD_YOU, EC_WORD_QUES},
+ .speechWin = {EC_WORD_DID, EC_WORD_I, EC_WORD_INTIMIDATE, EC_WORD_YOU, EC_WORD_QUES, -1},
+ .speechLose = {EC_WORD_MY, EC_WORD_BEAUTY, EC_WORD_DID, EC_WORD_NOTHING, EC_WORD_FOR, EC_WORD_YOU},
+ .monSets = gVerdanturfBattleTentTrainerMons_Desiree
+ },
+ [6] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("RONALD"),
+ .speechBefore = {EC_WORD_COME_ON, EC_WORD_I, EC_WORD_WILL, EC_WORD_BATTLE, EC_WORD_SERIOUSLY, -1},
+ .speechWin = {EC_WORD_GIVE_UP, EC_WORD_QUES, -1, EC_WORD_THAT_S, EC_WORD_REALLY, EC_WORD_WEAK},
+ .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_TO, EC_WORD_DO, EC_WORD_A, EC_MOVE2(BATON_PASS)},
+ .monSets = gVerdanturfBattleTentTrainerMons_Ronald
+ },
+ [7] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("ASHTEN"),
+ .speechBefore = {EC_WORD_OH_YEAH, EC_WORD_ANOTHER, EC_WORD_EXCITING, EC_WORD_BATTLE, EC_WORD_EXCL, -1},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_WIMPY, EC_WORD_AND, EC_WORD_BORING},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_AN, EC_WORD_EXCITING, EC_WORD_LOSS, EC_WORD_WOW, EC_WORD_EXCL},
+ .monSets = gVerdanturfBattleTentTrainerMons_Ashten
+ },
+ [8] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("GERARD"),
+ .speechBefore = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_WORD_SUPER, EC_MOVE2(TEETER_DANCE), EC_WORD_EXCL},
+ .speechWin = {EC_WORD_THAT_WAS, EC_WORD_HARD, EC_WORD_ELLIPSIS, EC_WORD_AM, EC_WORD_I, EC_WORD_OK_QUES},
+ .speechLose = {EC_WORD_I, EC_WORD_WON_T, EC_WORD_FORGIVE, EC_WORD_YOU, EC_WORD_FOR, EC_WORD_THAT},
+ .monSets = gVerdanturfBattleTentTrainerMons_Gerard
+ },
+ [9] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("BRADLY"),
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_LONESOME, EC_WORD_BUT, EC_WORD_I, EC_WORD_VACATION, EC_WORD_ALONE},
+ .speechWin = {EC_WORD_I, EC_WORD_WILL, EC_MOVE(WITHDRAW), EC_WORD_INSIDE, EC_WORD_MY, EC_WORD_SHELL_ARMOR},
+ .speechLose = {EC_WORD_OH, EC_WORD_ELLIPSIS, -1, EC_WORD_ALONE, EC_WORD_AS, EC_WORD_ALWAYS},
+ .monSets = gVerdanturfBattleTentTrainerMons_Bradly
+ },
+ [10] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("DENNIS"),
+ .speechBefore = {EC_WORD_ARE, EC_WORD_YOU, EC_WORD_REALLY, EC_WORD_STRONG, EC_WORD_QUES, -1},
+ .speechWin = {EC_WORD_WAHAHAHA, EC_WORD_EXCL, -1, EC_WORD_WAHAHAHA, EC_WORD_EXCL_EXCL, -1},
+ .speechLose = {EC_WORD_NICE, EC_WORD_GOING, EC_WORD_EXCL, EC_WORD_I, EC_WORD_WAS, EC_WORD_CHILD_S_PLAY},
+ .monSets = gVerdanturfBattleTentTrainerMons_Dennis
+ },
+ [11] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("PRESTIN"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_FOR, EC_WORD_YOU},
+ .speechWin = {EC_WORD_FORGIVE, EC_WORD_ME, EC_WORD_ELLIPSIS, EC_WORD_IT_S, EC_WORD_A, EC_WORD_DREAM},
+ .speechLose = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_WAKE_UP, EC_WORD_FROM, EC_WORD_THIS},
+ .monSets = gVerdanturfBattleTentTrainerMons_Prestin
+ },
+ [12] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("ERNESTO"),
+ .speechBefore = {EC_WORD_THIS, EC_WORD_PARTY, EC_WORD_GOES, EC_WORD_ON, EC_WORD_FOREVER, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_THE, EC_WORD_MUSIC, EC_WORD_PLAYS, EC_WORD_ON, EC_WORD_WITHOUT, EC_WORD_END},
+ .speechLose = {EC_WORD_NO, EC_WORD_EXCL, EC_WORD_THE, EC_WORD_MUSIC, EC_WORD_CAN_T, EC_WORD_STOP},
+ .monSets = gVerdanturfBattleTentTrainerMons_Ernesto
+ },
+ [13] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("NALA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_THE, EC_WORD_WORLD, EC_WORD_MOVIE, EC_WORD_COLLECTION},
+ .speechWin = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_LIKE, EC_WORD_RADIO, EC_WORD_VERY, EC_WORD_MUCH},
+ .speechLose = {EC_WORD_I, EC_WORD_REFUSE, EC_WORD_TO, EC_WORD_BELIEVE, EC_WORD_THIS, EC_WORD_EXCL},
+ .monSets = gVerdanturfBattleTentTrainerMons_Nala
+ },
+ [14] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("DARNELL"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WILL, EC_WORD_GO_EASY, EC_WORD_ON, EC_WORD_YOU, -1},
+ .speechWin = {EC_WORD_YOUR, EC_MOVE2(FRUSTRATION), EC_WORD_SHOULD, EC_WORD_BE, EC_WORD_HIDDEN, EC_WORD_AWAY},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_TO, EC_WORD_TAKE, EC_WORD_ELLIPSIS},
+ .monSets = gVerdanturfBattleTentTrainerMons_Darnell
+ },
+ [15] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("ASHLYN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_LOOK, EC_WORD_TOUGH, EC_WORD_DO, EC_WORD_I, EC_WORD_QUES},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_OVER, EC_WORD_YOUR, EC_MOVE2(TAUNT), EC_WORD_YET},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_MEAN, EC_WORD_EXCL_EXCL, -1, -1, -1},
+ .monSets = gVerdanturfBattleTentTrainerMons_Ashlyn
+ },
+ [16] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("ADDISON"),
+ .speechBefore = {EC_WORD_YES, EC_WORD_EXCL, -1, EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WELL, EC_WORD_WASN_T, EC_WORD_THAT, EC_WORD_EASY, EC_WORD_QUES, -1},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, -1, EC_WORD_BUT, EC_WORD_WHY, EC_WORD_QUES},
+ .monSets = gVerdanturfBattleTentTrainerMons_Addison
+ },
+ [17] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("JUSTINE"),
+ .speechBefore = {EC_WORD_YES, EC_WORD_EXCL, -1, EC_WORD_COME_ON, EC_WORD_I_AM, EC_WORD_READY},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_JUST, EC_WORD_NOT, EC_WORD_GOOD, EC_WORD_ENOUGH, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_WOWEE, EC_WORD_EXCL_EXCL, -1, -1, -1, -1},
+ .monSets = gVerdanturfBattleTentTrainerMons_Justine
+ },
+ [18] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("TYSON"),
+ .speechBefore = {EC_WORD_YOU_RE, EC_WORD_GOING, EC_WORD_TO, EC_WORD_PRESSURE, EC_WORD_ME, EC_WORD_QUES},
+ .speechWin = {EC_WORD_WHAT, EC_WORD_QUES, EC_WORD_YOU_RE, EC_WORD_MUCH, EC_WORD_TOO_WEAK, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_THIS, EC_WORD_DOESN_T, EC_WORD_MAKE, EC_WORD_ME, EC_WORD_HAPPY, EC_WORD_EXCL},
+ .monSets = gVerdanturfBattleTentTrainerMons_Tyson
+ },
+ [19] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("LAILA"),
+ .speechBefore = {EC_WORD_A, EC_MOVE2(STRUGGLE), EC_WORD_ISN_T, EC_WORD_VERY, EC_WORD_COOL, -1},
+ .speechWin = {EC_WORD_NOPE, EC_WORD_NOT_VERY, EC_WORD_COOL, EC_WORD_AT, EC_WORD_ALL, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_NOT, EC_WORD_COOL, EC_WORD_BUT, EC_WORD_YOU, EC_WORD_WON},
+ .monSets = gVerdanturfBattleTentTrainerMons_Laila
+ },
+ [20] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("WAREN"),
+ .speechBefore = {EC_WORD_DANGER, EC_WORD_EXCL, -1, EC_WORD_I, EC_WORD_SENSE, EC_WORD_DANGER},
+ .speechWin = {EC_WORD_DID, EC_WORD_YOU, EC_WORD_BELIEVE, EC_WORD_MY, EC_WORD_LIE, EC_WORD_QUES_EXCL},
+ .speechLose = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_DID, EC_WORD_SENSE, EC_WORD_DANGER, EC_WORD_ELLIPSIS},
+ .monSets = gVerdanturfBattleTentTrainerMons_Waren
+ },
+ [21] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("TOBIAS"),
+ .speechBefore = {EC_MOVE2(BARRIER), EC_WORD_EXCL_EXCL, -1, EC_WORD_NOW, EC_WORD_COME_ON, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_I, EC_WORD_WON, EC_WORD_QUES},
+ .speechLose = {EC_WORD_I, EC_WORD_SHOULD, EC_WORD_KNOW, EC_WORD_THAT, EC_WORD_IT_S, EC_WORD_HOPELESS},
+ .monSets = gVerdanturfBattleTentTrainerMons_Tobias
+ },
+ [22] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("JOSIAH"),
+ .speechBefore = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_MOVE(FLY), EC_WORD_IF_I_LOSE, -1},
+ .speechWin = {EC_WORD_TOO_WEAK, EC_WORD_ELLIPSIS, -1, EC_WORD_YOU, EC_MOVE(FLY), EC_WORD_INSTEAD},
+ .speechLose = {EC_WORD_I, EC_WORD_PROMISE, EC_WORD_TO, EC_MOVE(FLY), EC_WORD_SOMETIME, EC_WORD_SOON},
+ .monSets = gVerdanturfBattleTentTrainerMons_Josiah
+ },
+ [23] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("DION"),
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_TRENDY, EC_WORD_UM, EC_WORD_BATTLE, EC_WORD_SOMETHING, -1},
+ .speechWin = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_BATTLE, EC_WORD_DATE, EC_WORD_QUES},
+ .speechLose = {EC_WORD_WAS, EC_WORD_IT, EC_WORD_ELLIPSIS, EC_WORD_BATTLE, EC_WORD_GOURMET, EC_WORD_QUES},
+ .monSets = gVerdanturfBattleTentTrainerMons_Dion
+ },
+ [24] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("KENZIE"),
+ .speechBefore = {EC_WORD_THE, EC_MOVE(MORNING_SUN), EC_WORD_GIVES, EC_WORD_ME, EC_MOVE(STRENGTH), -1},
+ .speechWin = {EC_WORD_BUT, EC_WORD_I, EC_WORD_LIKE, EC_MOVE2(MOONLIGHT), EC_WORD_TOO, -1},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_LIKE, EC_WORD_A, EC_WORD_TERRIBLE, EC_MOVE(SANDSTORM), EC_WORD_ELLIPSIS},
+ .monSets = gVerdanturfBattleTentTrainerMons_Kenzie
+ },
+ [25] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("LILLIAN"),
+ .speechBefore = {EC_WORD_I, EC_WORD_DO, EC_WORD_THINGS, EC_WORD_AT, EC_WORD_MY, EC_WORD_OWN_TEMPO},
+ .speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_QUES, EC_WORD_WHAT, EC_WORD_A, EC_WORD_SURPRISE},
+ .speechLose = {EC_WORD_AWW, EC_WORD_ELLIPSIS, EC_WORD_I, EC_WORD_NEED, EC_WORD_A, EC_WORD_NAP},
+ .monSets = gVerdanturfBattleTentTrainerMons_Lillian
+ },
+ [26] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("LESLEY"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_BE, EC_WORD_LOLLING, EC_WORD_ABOUT},
+ .speechWin = {EC_WORD_YOU, EC_WORD_SHOULD, EC_WORD_GET, EC_WORD_UP, EC_WORD_EARLIER, -1},
+ .speechLose = {EC_WORD_THIS, EC_WORD_SHOULD, EC_WORD_NOT, EC_WORD_BE, EC_WORD_HAPPENING, EC_WORD_EXCL},
+ .monSets = gVerdanturfBattleTentTrainerMons_Lesley
+ },
+ [27] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("MARQUIS"),
+ .speechBefore = {EC_WORD_NONE, EC_WORD_OF, EC_WORD_THIS, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_SENSE},
+ .speechWin = {EC_WORD_SEE, EC_WORD_QUES, EC_WORD_THIS, EC_WORD_JUST, EC_WORD_ISN_T, EC_WORD_NORMAL},
+ .speechLose = {EC_WORD_SHOULD, EC_WORD_I, EC_WORD_CAUSE, EC_WORD_AN, EC_MOVE(UPROAR), EC_WORD_QUES},
+ .monSets = gVerdanturfBattleTentTrainerMons_Marquis
+ },
+ [28] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("FREDDY"),
+ .speechBefore = {EC_WORD_I, EC_WORD_ADORE, EC_WORD_THIS, EC_WORD_CUTE, EC_WORD_TELEVISION, EC_WORD_IDOL},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_SO, EC_WORD_FUNNY, EC_WORD_WHEN, EC_WORD_YOU_RE, EC_WORD_ANGRY},
+ .speechLose = {EC_WORD_LATE, EC_WORD_NIGHT, EC_WORD_TELEVISION, EC_WORD_IS, EC_WORD_MY, EC_WORD_LIFE},
+ .monSets = gVerdanturfBattleTentTrainerMons_Freddy
+ },
+ [29] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("CECILIA"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_FABULOUS, EC_WORD_CUTENESS, EC_WORD_IS, EC_WORD_IN, EC_WORD_FASHION},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_NO, EC_WORD_MATCH, EC_WORD_FOR, EC_WORD_MY, EC_WORD_CUTE_CHARM},
+ .speechLose = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_FASHION, EC_WORD_SENSE, EC_WORD_QUES},
+ .monSets = gVerdanturfBattleTentTrainerMons_Cecilia
+ }
+};
+
+const struct FacilityMon gVerdanturfBattleTentMons[] =
+{
+ [0] = {
+ .species = SPECIES_POOCHYENA,
+ .moves = {MOVE_ROAR, MOVE_THIEF, MOVE_BITE, MOVE_HOWL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [1] = {
+ .species = SPECIES_ZIGZAGOON,
+ .moves = {MOVE_COVET, MOVE_GROWL, MOVE_PIN_MISSILE, MOVE_MUD_SPORT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [2] = {
+ .species = SPECIES_DUSTOX,
+ .moves = {MOVE_CONFUSION, MOVE_MOONLIGHT, MOVE_PROTECT, MOVE_FLASH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_MODEST
+ },
+ [3] = {
+ .species = SPECIES_TAILLOW,
+ .moves = {MOVE_AGILITY, MOVE_DOUBLE_TEAM, MOVE_WING_ATTACK, MOVE_GROWL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_ORAN_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [4] = {
+ .species = SPECIES_SHROOMISH,
+ .moves = {MOVE_HEADBUTT, MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_FLASH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_RASH
+ },
+ [5] = {
+ .species = SPECIES_MACHOP,
+ .moves = {MOVE_LOW_KICK, MOVE_LEER, MOVE_FOCUS_ENERGY, MOVE_ENCORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_LONELY
+ },
+ [6] = {
+ .species = SPECIES_MAGIKARP,
+ .moves = {MOVE_SPLASH, MOVE_FLAIL, MOVE_TACKLE, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [7] = {
+ .species = SPECIES_BARBOACH,
+ .moves = {MOVE_MUD_SLAP, MOVE_WATER_GUN, MOVE_RAIN_DANCE, MOVE_SPARK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED,
+ .nature = NATURE_HASTY
+ },
+ [8] = {
+ .species = SPECIES_WINGULL,
+ .moves = {MOVE_ATTRACT, MOVE_TWISTER, MOVE_WING_ATTACK, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_IMPISH
+ },
+ [9] = {
+ .species = SPECIES_ARON,
+ .moves = {MOVE_ENDEAVOR, MOVE_METAL_CLAW, MOVE_TACKLE, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HARDY
+ },
+ [10] = {
+ .species = SPECIES_NUMEL,
+ .moves = {MOVE_EMBER, MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_GROWL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_SASSY
+ },
+ [11] = {
+ .species = SPECIES_SWALOT,
+ .moves = {MOVE_YAWN, MOVE_SLUDGE, MOVE_ACID_ARMOR, MOVE_AMNESIA},
+ .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [12] = {
+ .species = SPECIES_KECLEON,
+ .moves = {MOVE_SUBSTITUTE, MOVE_FAINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_BIND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIET
+ },
+ [13] = {
+ .species = SPECIES_BALTOY,
+ .moves = {MOVE_SANDSTORM, MOVE_FLASH, MOVE_SELF_DESTRUCT, MOVE_HARDEN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [14] = {
+ .species = SPECIES_NINJASK,
+ .moves = {MOVE_DIG, MOVE_SCREECH, MOVE_SWORDS_DANCE, MOVE_LEECH_LIFE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [15] = {
+ .species = SPECIES_MAKUHITA,
+ .moves = {MOVE_BULK_UP, MOVE_ARM_THRUST, MOVE_SMELLING_SALT, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [16] = {
+ .species = SPECIES_SWABLU,
+ .moves = {MOVE_REFRESH, MOVE_SAFEGUARD, MOVE_ATTRACT, MOVE_MIRROR_MOVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MILD
+ },
+ [17] = {
+ .species = SPECIES_GOLDEEN,
+ .moves = {MOVE_WATERFALL, MOVE_MUD_SPORT, MOVE_SUPERSONIC, MOVE_DOUBLE_TEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_GENTLE
+ },
+ [18] = {
+ .species = SPECIES_LOTAD,
+ .moves = {MOVE_GROWL, MOVE_WATER_GUN, MOVE_MEGA_DRAIN, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_IAPAPA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [19] = {
+ .species = SPECIES_NUMEL,
+ .moves = {MOVE_MAGNITUDE, MOVE_EMBER, MOVE_GROWL, MOVE_DEFENSE_CURL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_RELAXED
+ },
+ [20] = {
+ .species = SPECIES_LINOONE,
+ .moves = {MOVE_HEADBUTT, MOVE_TICKLE, MOVE_PROTECT, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [21] = {
+ .species = SPECIES_SEVIPER,
+ .moves = {MOVE_WRAP, MOVE_GLARE, MOVE_POISON_FANG, MOVE_SWAGGER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [22] = {
+ .species = SPECIES_SKARMORY,
+ .moves = {MOVE_AIR_CUTTER, MOVE_SANDSTORM, MOVE_LEER, MOVE_AGILITY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MACHO_BRACE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BASHFUL
+ },
+ [23] = {
+ .species = SPECIES_SWELLOW,
+ .moves = {MOVE_AGILITY, MOVE_WING_ATTACK, MOVE_DOUBLE_TEAM, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [24] = {
+ .species = SPECIES_GOLDEEN,
+ .moves = {MOVE_PECK, MOVE_SUPERSONIC, MOVE_PSYBEAM, MOVE_RAIN_DANCE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_GENTLE
+ },
+ [25] = {
+ .species = SPECIES_ELECTRIKE,
+ .moves = {MOVE_SHOCK_WAVE, MOVE_TACKLE, MOVE_CHARGE, MOVE_THUNDER_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_MILD
+ },
+ [26] = {
+ .species = SPECIES_NUZLEAF,
+ .moves = {MOVE_SUNNY_DAY, MOVE_TORMENT, MOVE_FAKE_OUT, MOVE_THIEF},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [27] = {
+ .species = SPECIES_ARON,
+ .moves = {MOVE_TAKE_DOWN, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [28] = {
+ .species = SPECIES_MIGHTYENA,
+ .moves = {MOVE_HOWL, MOVE_TAKE_DOWN, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [29] = {
+ .species = SPECIES_SOLROCK,
+ .moves = {MOVE_HARDEN, MOVE_FIRE_SPIN, MOVE_MIMIC, MOVE_PSYWAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [30] = {
+ .species = SPECIES_GRAVELER,
+ .moves = {MOVE_ROLLOUT, MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_BLOCK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_IMPISH
+ },
+ [31] = {
+ .species = SPECIES_KADABRA,
+ .moves = {MOVE_ENCORE, MOVE_PSYBEAM, MOVE_DISABLE, MOVE_KINESIS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [32] = {
+ .species = SPECIES_VOLTORB,
+ .moves = {MOVE_PROTECT, MOVE_SELF_DESTRUCT, MOVE_SPARK, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_BASHFUL
+ },
+ [33] = {
+ .species = SPECIES_MAGNEMITE,
+ .moves = {MOVE_METAL_SOUND, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_SERIOUS
+ },
+ [34] = {
+ .species = SPECIES_PELIPPER,
+ .moves = {MOVE_WING_ATTACK, MOVE_MIST, MOVE_AGILITY, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FIGY_BERRY,
+ .evSpread = 0,
+ .nature = NATURE_BRAVE
+ },
+ [35] = {
+ .species = SPECIES_LOUDRED,
+ .moves = {MOVE_HOWL, MOVE_UPROAR, MOVE_REST, MOVE_SCREECH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CALM
+ },
+ [36] = {
+ .species = SPECIES_MARILL,
+ .moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_BUBBLE_BEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [37] = {
+ .species = SPECIES_TRAPINCH,
+ .moves = {MOVE_DIG, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_FAINT_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_NAUGHTY
+ },
+ [38] = {
+ .species = SPECIES_TENTACOOL,
+ .moves = {MOVE_SCREECH, MOVE_CONFUSE_RAY, MOVE_WRAP, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [39] = {
+ .species = SPECIES_VIGOROTH,
+ .moves = {MOVE_ENCORE, MOVE_SLACK_OFF, MOVE_YAWN, MOVE_SECRET_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [40] = {
+ .species = SPECIES_WAILMER,
+ .moves = {MOVE_WATER_PULSE, MOVE_ROLLOUT, MOVE_CURSE, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
+ .evSpread = F_EV_SPREAD_HP,
+ .nature = NATURE_RELAXED
+ },
+ [41] = {
+ .species = SPECIES_ILLUMISE,
+ .moves = {MOVE_TACKLE, MOVE_SWEET_SCENT, MOVE_WISH, MOVE_ENCORE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [42] = {
+ .species = SPECIES_MACHOKE,
+ .moves = {MOVE_LEER, MOVE_KARATE_CHOP, MOVE_BULK_UP, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_CALM
+ },
+ [43] = {
+ .species = SPECIES_WHISMUR,
+ .moves = {MOVE_SECRET_POWER, MOVE_SUPERSONIC, MOVE_STOMP, MOVE_ROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_QUIRKY
+ },
+ [44] = {
+ .species = SPECIES_CACNEA,
+ .moves = {MOVE_INGRAIN, MOVE_LEECH_SEED, MOVE_NEEDLE_ARM, MOVE_GROWTH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SERIOUS
+ }
+};
+
+// Fallarbor Battle Tent.
+const u16 gFallarborBattleTentTrainerMons_Amber[] =
+{
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Javier[] =
+{
+ 6,
+ 35,
+ 36,
+ 37,
+ 38,
+ 44,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Natalie[] =
+{
+ 5,
+ 29,
+ 30,
+ 32,
+ 34,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Treve[] =
+{
+ 28,
+ 29,
+ 30,
+ 32,
+ 33,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Arianna[] =
+{
+ 18,
+ 23,
+ 24,
+ 27,
+ 44,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Jadyn[] =
+{
+ 0,
+ 22,
+ 24,
+ 27,
+ 32,
+ 39,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Gerardo[] =
+{
+ 6,
+ 18,
+ 23,
+ 24,
+ 29,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Jonn[] =
+{
+ 16,
+ 17,
+ 21,
+ 22,
+ 37,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Esteban[] =
+{
+ 5,
+ 28,
+ 30,
+ 33,
+ 42,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Jameson[] =
+{
+ 1,
+ 2,
+ 3,
+ 5,
+ 9,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Alanzo[] =
+{
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Howard[] =
+{
+ 18,
+ 23,
+ 31,
+ 38,
+ 43,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Conrad[] =
+{
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Makenna[] =
+{
+ 4,
+ 21,
+ 25,
+ 36,
+ 40,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Brayan[] =
+{
+ 0,
+ 4,
+ 6,
+ 12,
+ 19,
+ 23,
+ 28,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Mariana[] =
+{
+ 0,
+ 4,
+ 13,
+ 19,
+ 28,
+ 30,
+ 37,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Sheldon[] =
+{
+ 2,
+ 3,
+ 21,
+ 31,
+ 39,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Gianna[] =
+{
+ 1,
+ 2,
+ 30,
+ 32,
+ 41,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Yahir[] =
+{
+ 4,
+ 8,
+ 15,
+ 17,
+ 22,
+ 24,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Britney[] =
+{
+ 4,
+ 7,
+ 14,
+ 20,
+ 23,
+ 43,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Hecter[] =
+{
+ 0,
+ 1,
+ 2,
+ 5,
+ 9,
+ 35,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Tannor[] =
+{
+ 5,
+ 30,
+ 31,
+ 33,
+ 34,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Benji[] =
+{
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Rory[] =
+{
+ 9,
+ 11,
+ 14,
+ 15,
+ 27,
+ 39,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Eleanor[] =
+{
+ 23,
+ 28,
+ 31,
+ 36,
+ 38,
+ 42,
+ 44,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Evelyn[] =
+{
+ 29,
+ 31,
+ 32,
+ 33,
+ 34,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Arielle[] =
+{
+ 1,
+ 3,
+ 38,
+ 39,
+ 41,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Connar[] =
+{
+ 7,
+ 8,
+ 28,
+ 29,
+ 31,
+ 32,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Maurice[] =
+{
+ 4,
+ 5,
+ 6,
+ 12,
+ 13,
+ -1
+};
+
+const u16 gFallarborBattleTentTrainerMons_Kianna[] =
+{
+ 22,
+ 24,
+ 26,
+ 27,
+ 34,
+ 37,
+ -1
+};
+
+const struct BattleFrontierTrainer gFallarborBattleTentTrainers[] =
+{
+ [0] = {
+ .facilityClass = FACILITY_CLASS_AROMA_LADY,
+ .trainerName = _("AMBER"),
+ .speechBefore = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_DIET, EC_WORD_EVERY, EC_WORD_DAY},
+ .speechWin = {EC_WORD_A, EC_MOVE(NIGHTMARE), EC_WORD_OF, EC_WORD_SWEETS, EC_WORD_SHOCKED, EC_WORD_ME},
+ .speechLose = {EC_WORD_IF, EC_WORD_YOU, EC_WORD_GIVE_UP, EC_WORD_YOU, EC_WORD_WILL, EC_WORD_LOSE},
+ .monSets = gFallarborBattleTentTrainerMons_Amber
+ },
+ [1] = {
+ .facilityClass = FACILITY_CLASS_RUIN_MANIAC,
+ .trainerName = _("JAVIER"),
+ .speechBefore = {EC_WORD_I, EC_WORD_NEVER, EC_WORD_EVER, EC_WORD_HAVE, EC_WORD_ENOUGH, EC_WORD_MONEY},
+ .speechWin = {EC_WORD_I, EC_WORD_WON, EC_WORD_BUT, EC_WORD_I, EC_WORD_NEED, EC_WORD_MONEY},
+ .speechLose = {EC_WORD_I, EC_WORD_NEED, EC_WORD_MONEY, EC_WORD_FOR, EC_WORD_A, EC_WORD_BIKE},
+ .monSets = gFallarborBattleTentTrainerMons_Javier
+ },
+ [2] = {
+ .facilityClass = FACILITY_CLASS_TUBER_F,
+ .trainerName = _("NATALIE"),
+ .speechBefore = {EC_WORD_THE, EC_WORD_WAY, EC_WORD_I, EC_WORD_BATTLE, EC_WORD_IS, EC_WORD_WEIRD},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_MUCH, EC_WORD_TOO_WEAK, EC_WORD_FOR, EC_WORD_THIS, EC_WORD_PLACE},
+ .speechLose = {EC_WORD_GIVE_ME, EC_WORD_AN, EC_WORD_EASY, EC_WORD_MATCH, EC_WORD_NEXT, EC_WORD_TIME},
+ .monSets = gFallarborBattleTentTrainerMons_Natalie
+ },
+ [3] = {
+ .facilityClass = FACILITY_CLASS_TUBER_M,
+ .trainerName = _("TREVE"),
+ .speechBefore = {EC_WORD_LOOK, EC_WORD_AT, EC_WORD_MY, EC_MOVE2(METRONOME), EC_WORD_AND, EC_WORD_SLEEP},
+ .speechWin = {EC_WORD_YEAH, EC_WORD_EXCL, EC_MOVE(HYPNOSIS), EC_WORD_IS, EC_WORD_TOTALLY, EC_WORD_GREAT},
+ .speechLose = {EC_WORD_MY, EC_MOVE(HYPNOSIS), EC_WORD_DIDN_T, EC_WORD_WORK, EC_WORD_ELLIPSIS, -1},
+ .monSets = gFallarborBattleTentTrainerMons_Treve
+ },
+ [4] = {
+ .facilityClass = FACILITY_CLASS_LADY,
+ .trainerName = _("ARIANNA"),
+ .speechBefore = {EC_WORD_IF_I_WIN, EC_WORD_GIVE_ME, EC_WORD_POKEMON, EC_WORD_FOR, EC_WORD_MY, EC_WORD_COLLECTION},
+ .speechWin = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_TOO_WEAK, EC_WORD_TO, EC_WORD_COLLECT},
+ .speechLose = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_SOMETHING, EC_WORD_ELSE, EC_WORD_ELLIPSIS},
+ .monSets = gFallarborBattleTentTrainerMons_Arianna
+ },
+ [5] = {
+ .facilityClass = FACILITY_CLASS_BEAUTY,
+ .trainerName = _("JADYN"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_NAME, EC_WORD_IS, EC_WORD_REALLY, EC_WORD_A, EC_WORD_MYSTERY},
+ .speechWin = {EC_WORD_MY, EC_WORD_NAME, EC_WORD_GOES, EC_WORD_ON, EC_WORD_A, EC_WORD_MYSTERY},
+ .speechLose = {EC_WORD_MY, EC_WORD_NAME, EC_WORD_QUES, EC_WORD_I_AM, EC_WORD_YOUR, EC_WORD_MOTHER},
+ .monSets = gFallarborBattleTentTrainerMons_Jadyn
+ },
+ [6] = {
+ .facilityClass = FACILITY_CLASS_RICH_BOY,
+ .trainerName = _("GERARDO"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_THE, EC_WORD_BEST, EC_WORD_HERO, EC_WORD_EVER, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_SEE, EC_WORD_WHAT, EC_WORD_I, EC_WORD_MEAN, EC_WORD_QUES, -1},
+ .speechLose = {EC_WORD_HUH_QUES, EC_WORD_YOU, EC_WORD_WERE, EC_WORD_RIGHT, EC_WORD_QUES, -1},
+ .monSets = gFallarborBattleTentTrainerMons_Gerardo
+ },
+ [7] = {
+ .facilityClass = FACILITY_CLASS_POKEMANIAC,
+ .trainerName = _("JONN"),
+ .speechBefore = {EC_WORD_THE, EC_WORD_WORLD, EC_MOVE2(SUPERPOWER), EC_MOVE2(STOMP), EC_WORD_CONTEST, EC_WORD_EXCL_EXCL},
+ .speechWin = {EC_WORD_I_AM, EC_WORD_NO_1, EC_WORD_EXCL_EXCL, EC_WORD_HEAR, EC_WORD_ME, EC_MOVE2(ROAR)},
+ .speechLose = {EC_WORD_I, EC_WORD_GIVE_UP, EC_WORD_EXCL, EC_WORD_YOU_RE, EC_WORD_NO_1, EC_WORD_EXCL},
+ .monSets = gFallarborBattleTentTrainerMons_Jonn
+ },
+ [8] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_M,
+ .trainerName = _("ESTEBAN"),
+ .speechBefore = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_GOOD, EC_WORD_TRAINER, EC_WORD_QUES, EC_WORD_UNBELIEVABLE},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_SOME, EC_WORD_PUSHOVER, EC_WORD_OF, EC_WORD_A, EC_WORD_TRAINER},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_MUCH, EC_WORD_TOO, EC_WORD_MUCH, EC_WORD_FOR, EC_WORD_ME},
+ .monSets = gFallarborBattleTentTrainerMons_Esteban
+ },
+ [9] = {
+ .facilityClass = FACILITY_CLASS_CAMPER,
+ .trainerName = _("JAMESON"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_SILKY, EC_WORD_SMOOTH, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_MY, EC_WORD_SILKY, EC_WORD_SMOOTH, EC_WORD_POKEMON, EC_WORD_RULE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_MY, EC_WORD_POKEMON, EC_MOVE2(STRUGGLE), EC_WORD_IN, EC_WORD_YOUR, EC_WORD_STICKY_HOLD},
+ .monSets = gFallarborBattleTentTrainerMons_Jameson
+ },
+ [10] = {
+ .facilityClass = FACILITY_CLASS_BUG_MANIAC,
+ .trainerName = _("ALANZO"),
+ .speechBefore = {EC_MOVE2(FORESIGHT), EC_WORD_IS, EC_WORD_A, EC_WORD_POWER, EC_WORD_I, EC_WORD_HAVE},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_OBLIVIOUS, EC_WORD_ABOUT, EC_MOVE2(FORESIGHT), EC_WORD_EXCL, -1},
+ .speechLose = {EC_WORD_MY, EC_MOVE2(FORESIGHT), EC_WORD_IS, EC_WORD_ALWAYS, EC_WORD_RIGHT, EC_WORD_EXCL},
+ .monSets = gFallarborBattleTentTrainerMons_Alanzo
+ },
+ [11] = {
+ .facilityClass = FACILITY_CLASS_GENTLEMAN,
+ .trainerName = _("HOWARD"),
+ .speechBefore = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_CAN_T, EC_WORD_BEAT, EC_WORD_ME, -1},
+ .speechWin = {EC_WORD_YOU, EC_WORD_COULDN_T, EC_WORD_WIN, EC_WORD_COULD, EC_WORD_YOU, EC_WORD_QUES},
+ .speechLose = {EC_WORD_YOU, EC_WORD_WOULD, EC_WORD_GO, EC_WORD_ALL, EC_WORD_OUT, EC_WORD_ELLIPSIS},
+ .monSets = gFallarborBattleTentTrainerMons_Howard
+ },
+ [12] = {
+ .facilityClass = FACILITY_CLASS_GUITARIST,
+ .trainerName = _("CONRAD"),
+ .speechBefore = {EC_WORD_YOUR, EC_WORD_POKEMON, EC_WORD_ARE, EC_WORD_PRETTY, EC_WORD_WILD, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_WHOAH, EC_WORD_EXCL_EXCL, -1, EC_WORD_LET_S, EC_WORD_DANCE, EC_WORD_EXCL},
+ .speechLose = {EC_WORD_MY, EC_WORD_MUSIC, EC_WORD_WILL, EC_WORD_PLAY, EC_WORD_ON, EC_WORD_ELLIPSIS},
+ .monSets = gFallarborBattleTentTrainerMons_Conrad
+ },
+ [13] = {
+ .facilityClass = FACILITY_CLASS_SCHOOL_KID_F,
+ .trainerName = _("MAKENNA"),
+ .speechBefore = {EC_WORD_SHOW, EC_WORD_ME, EC_WORD_THAT, EC_WORD_YOU, EC_WORD_MEAN, EC_WORD_IT},
+ .speechWin = {EC_WORD_THAT_S, EC_WORD_WHY, EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY},
+ .speechLose = {EC_WORD_AWW, EC_WORD_I, EC_WORD_STUDY, EC_WORD_EVERY, EC_WORD_DAY, EC_WORD_TOO},
+ .monSets = gFallarborBattleTentTrainerMons_Makenna
+ },
+ [14] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_M,
+ .trainerName = _("BRAYAN"),
+ .speechBefore = {EC_WORD_CAN, EC_WORD_YOU, EC_WORD_SEE, EC_WORD_MY, EC_WORD_POWER, EC_WORD_QUES},
+ .speechWin = {EC_WORD_HOW, EC_WORD_BORING, EC_WORD_ELLIPSIS, EC_WORD_THIS, EC_WORD_IS, EC_WORD_GOOD_BYE},
+ .speechLose = {EC_WORD_AM, EC_WORD_I, EC_WORD_THE, EC_WORD_WEAK, EC_WORD_TRAINER, EC_WORD_QUES},
+ .monSets = gFallarborBattleTentTrainerMons_Brayan
+ },
+ [15] = {
+ .facilityClass = FACILITY_CLASS_COOLTRAINER_F,
+ .trainerName = _("MARIANA"),
+ .speechBefore = {EC_WORD_A, EC_WORD_LIE, EC_WORD_CAN, EC_WORD_BE, EC_WORD_KIND, EC_WORD_ELLIPSIS},
+ .speechWin = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_LIKE, EC_WORD_THE, EC_WORD_SUNDAY, EC_WORD_COMICS},
+ .speechLose = {EC_WORD_THIS, EC_WORD_IS, EC_WORD_LIKE, EC_WORD_FROM, EC_WORD_A, EC_WORD_MOVIE},
+ .monSets = gFallarborBattleTentTrainerMons_Mariana
+ },
+ [16] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_M,
+ .trainerName = _("SHELDON"),
+ .speechBefore = {EC_WORD_A, EC_WORD_POKEMON, EC_WORD_TEACHER, EC_WORD_GETS, EC_WORD_NO, EC_MOVE2(REST)},
+ .speechWin = {EC_WORD_MY, EC_WORD_SMARTNESS, EC_WORD_GETS, EC_WORD_ME, EC_WORD_EASY, EC_WORD_WINS},
+ .speechLose = {EC_WORD_I, EC_WORD_HAVE, EC_WORD_TO, EC_WORD_GO, EC_WORD_WORK, EC_WORD_BYE_BYE},
+ .monSets = gFallarborBattleTentTrainerMons_Sheldon
+ },
+ [17] = {
+ .facilityClass = FACILITY_CLASS_POKEFAN_F,
+ .trainerName = _("GIANNA"),
+ .speechBefore = {EC_WORD_AHAHA, EC_WORD_YES, EC_WORD_EXCL, EC_WORD_LOVEY_DOVEY, EC_WORD_POKEMON, EC_WORD_WORLD},
+ .speechWin = {EC_WORD_MY, EC_WORD_SHINE, EC_WORD_IS, EC_WORD_MAKING, EC_WORD_THINGS, EC_WORD_BETTER},
+ .speechLose = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_DISLIKE, EC_WORD_POKEMON, EC_WORD_QUES, -1},
+ .monSets = gFallarborBattleTentTrainerMons_Gianna
+ },
+ [18] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_M,
+ .trainerName = _("YAHIR"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS, EC_WORD_COME_ON, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YOU, EC_WORD_NEED, EC_WORD_TO, EC_WORD_TRAIN, EC_WORD_A_LOT, EC_WORD_MORE},
+ .speechLose = {EC_WORD_NOT, EC_WORD_ENOUGH, EC_WORD_ELLIPSIS, EC_WORD_JUST, EC_WORD_NOT, EC_WORD_ENOUGH},
+ .monSets = gFallarborBattleTentTrainerMons_Yahir
+ },
+ [19] = {
+ .facilityClass = FACILITY_CLASS_EXPERT_F,
+ .trainerName = _("BRITNEY"),
+ .speechBefore = {EC_WORD_IT, EC_WORD_SEEMS, EC_WORD_THAT, EC_WORD_YOU_RE, EC_WORD_QUITE, EC_WORD_GOOD},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_LUKEWARM, EC_WORD_TALENT, EC_WORD_AT, EC_WORD_BEST},
+ .speechLose = {EC_WORD_YOU_RE, EC_WORD_A, EC_WORD_COOL, EC_WORD_HERO, EC_WORD_AT, EC_WORD_THIS},
+ .monSets = gFallarborBattleTentTrainerMons_Britney
+ },
+ [20] = {
+ .facilityClass = FACILITY_CLASS_YOUNGSTER,
+ .trainerName = _("HECTER"),
+ .speechBefore = {EC_WORD_MY, EC_MOVE2(HIDDEN_POWER), EC_WORD_IS, EC_WORD_EXCITING, EC_WORD_ME, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_YEEHAW_EXCL, EC_WORD_LET_S, EC_WORD_HAVE, EC_WORD_A, EC_MOVE2(HIDDEN_POWER), EC_WORD_PARTY},
+ .speechLose = {EC_WORD_WAAAH, EC_WORD_EXCL, EC_WORD_DON_T, EC_WORD_YOU, EC_MOVE2(MIMIC), EC_WORD_ME},
+ .monSets = gFallarborBattleTentTrainerMons_Hecter
+ },
+ [21] = {
+ .facilityClass = FACILITY_CLASS_FISHERMAN,
+ .trainerName = _("TANNOR"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_HAVE, EC_WORD_GOT, EC_WORD_TO, EC_WORD_BE, EC_WORD_JOKING},
+ .speechWin = {EC_WORD_YOU_RE, EC_WORD_THE, EC_WORD_BEST, EC_WORD_AT, EC_WORD_BEING, EC_WORD_FUNNY},
+ .speechLose = {EC_WORD_YOU, EC_WORD_WEREN_T, EC_WORD_BEING, EC_WORD_FUNNY, EC_WORD_AT, EC_WORD_ALL},
+ .monSets = gFallarborBattleTentTrainerMons_Tannor
+ },
+ [22] = {
+ .facilityClass = FACILITY_CLASS_BIRD_KEEPER,
+ .trainerName = _("BENJI"),
+ .speechBefore = {EC_WORD_YOU, EC_WORD_DON_T, EC_WORD_THINK, EC_WORD_VERY, EC_WORD_FAST, EC_WORD_HUH_QUES},
+ .speechWin = {EC_WORD_SORRY, EC_WORD_EXCL, EC_WORD_I, EC_WORD_DIDN_T, EC_WORD_MEAN, EC_WORD_YOU},
+ .speechLose = {EC_WORD_YOU, EC_WORD_LEFT, EC_WORD_ME, EC_WORD_FEELING, EC_WORD_SAD, EC_WORD_ELLIPSIS},
+ .monSets = gFallarborBattleTentTrainerMons_Benji
+ },
+ [23] = {
+ .facilityClass = FACILITY_CLASS_NINJA_BOY,
+ .trainerName = _("RORY"),
+ .speechBefore = {EC_WORD_DON_T, EC_WORD_CAUSE, EC_WORD_AN, EC_MOVE(UPROAR), EC_WORD_YOU, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_I, EC_WORD_DON_T, EC_WORD_NEED, EC_WORD_AN, EC_MOVE(UPROAR), EC_WORD_EXCL},
+ .speechLose = {EC_WORD_I_AM, EC_WORD_GOING, EC_WORD_TO, EC_WORD_CAUSE, EC_WORD_AN, EC_MOVE(UPROAR)},
+ .monSets = gFallarborBattleTentTrainerMons_Rory
+ },
+ [24] = {
+ .facilityClass = FACILITY_CLASS_PARASOL_LADY,
+ .trainerName = _("ELEANOR"),
+ .speechBefore = {EC_WORD_I, EC_WORD_REALLY, EC_WORD_WANT, EC_WORD_TO, EC_WORD_PARTY, -1},
+ .speechWin = {EC_WORD_A, EC_WORD_TRENDY, EC_WORD_PARTY, EC_WORD_WOULD, EC_WORD_BE, EC_WORD_REFRESHING},
+ .speechLose = {EC_WORD_DON_T, EC_WORD_YOU, EC_WORD_LIKE, EC_WORD_TO, EC_WORD_PARTY, EC_WORD_QUES},
+ .monSets = gFallarborBattleTentTrainerMons_Eleanor
+ },
+ [25] = {
+ .facilityClass = FACILITY_CLASS_SWIMMER_F,
+ .trainerName = _("EVELYN"),
+ .speechBefore = {EC_WORD_MY, EC_WORD_PC, EC_WORD_IS, EC_WORD_MY, EC_WORD_SECRET_BASE, EC_WORD_EXCL},
+ .speechWin = {EC_WORD_IT_S, EC_WORD_ALL, EC_WORD_SECRET, EC_WORD_ON, EC_WORD_MY, EC_WORD_PC},
+ .speechLose = {EC_WORD_NO, EC_WORD_EXCL, -1, EC_WORD_I, EC_WORD_REJECT, EC_WORD_THIS},
+ .monSets = gFallarborBattleTentTrainerMons_Evelyn
+ },
+ [26] = {
+ .facilityClass = FACILITY_CLASS_PICNICKER,
+ .trainerName = _("ARIELLE"),
+ .speechBefore = {EC_WORD_IT_S, EC_WORD_NOT_VERY, EC_WORD_PRETTY, EC_WORD_BUT, EC_WORD_I, EC_WORD_TRY},
+ .speechWin = {EC_WORD_WE_RE, EC_WORD_NOT_VERY, EC_WORD_PRETTY, EC_WORD_BUT, EC_WORD_WE_RE, EC_WORD_GREAT},
+ .speechLose = {EC_WORD_THAT_WAS, EC_WORD_PRETTY, EC_WORD_MEAN, EC_WORD_OF, EC_WORD_YOU, EC_WORD_EXCL},
+ .monSets = gFallarborBattleTentTrainerMons_Arielle
+ },
+ [27] = {
+ .facilityClass = FACILITY_CLASS_SAILOR,
+ .trainerName = _("CONNAR"),
+ .speechBefore = {EC_WORD_I_AM, EC_WORD_NOT, EC_WORD_STRONG, EC_WORD_ENOUGH, EC_WORD_FOR, EC_WORD_THIS},
+ .speechWin = {EC_WORD_DO, EC_WORD_YOU, EC_WORD_THINK, EC_WORD_YOU_RE, EC_WORD_OK_QUES, -1},
+ .speechLose = {EC_WORD_GOOD_BYE, EC_WORD_AND, EC_WORD_THANK_YOU, -1, -1, -1},
+ .monSets = gFallarborBattleTentTrainerMons_Connar
+ },
+ [28] = {
+ .facilityClass = FACILITY_CLASS_COLLECTOR,
+ .trainerName = _("MAURICE"),
+ .speechBefore = {EC_WORD_THERE, EC_WORD_IS, EC_WORD_NO, EC_WORD_RADIO, EC_WORD_OR, EC_WORD_TELEVISION},
+ .speechWin = {EC_WORD_BUT, EC_WORD_THERE, EC_WORD_IS, EC_WORD_A_LOT, EC_WORD_OF, EC_WORD_POKEMON},
+ .speechLose = {EC_WORD_I, EC_WORD_CAN_T, EC_WORD_ENJOY, EC_WORD_MYSELF, EC_WORD_WITHOUT, EC_WORD_MONEY},
+ .monSets = gFallarborBattleTentTrainerMons_Maurice
+ },
+ [29] = {
+ .facilityClass = FACILITY_CLASS_LASS,
+ .trainerName = _("KIANNA"),
+ .speechBefore = {EC_WORD_I, EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_DEPT_STORE, EC_WORD_SHOPPING},
+ .speechWin = {EC_WORD_I, EC_WORD_DISLIKE, EC_WORD_SHOPPING, EC_WORD_ALONE, -1, -1},
+ .speechLose = {EC_WORD_WANT, EC_WORD_TO, EC_WORD_GO, EC_WORD_SHOPPING, EC_WORD_TOGETHER, EC_WORD_QUES},
+ .monSets = gFallarborBattleTentTrainerMons_Kianna
+ }
+};
+
+const struct FacilityMon gFallarborBattleTentMons[] =
+{
+ [0] = {
+ .species = SPECIES_NUMEL,
+ .moves = {MOVE_GROWL, MOVE_FLAMETHROWER, MOVE_TACKLE, MOVE_SUNNY_DAY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [1] = {
+ .species = SPECIES_LINOONE,
+ .moves = {MOVE_ODOR_SLEUTH, MOVE_COVET, MOVE_ROCK_SMASH, MOVE_CHARM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_SASSY
+ },
+ [2] = {
+ .species = SPECIES_PLUSLE,
+ .moves = {MOVE_SPARK, MOVE_GROWL, MOVE_QUICK_ATTACK, MOVE_FAKE_TEARS},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [3] = {
+ .species = SPECIES_POOCHYENA,
+ .moves = {MOVE_YAWN, MOVE_ODOR_SLEUTH, MOVE_HOWL, MOVE_FRUSTRATION},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAUGHTY
+ },
+ [4] = {
+ .species = SPECIES_KECLEON,
+ .moves = {MOVE_LICK, MOVE_SLASH, MOVE_FAINT_ATTACK, MOVE_PSYBEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_WIKI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_MODEST
+ },
+ [5] = {
+ .species = SPECIES_MAGIKARP,
+ .moves = {MOVE_SPLASH, MOVE_TACKLE, MOVE_FLAIL, MOVE_NONE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_SCALE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [6] = {
+ .species = SPECIES_SOLROCK,
+ .moves = {MOVE_ROCK_THROW, MOVE_FLASH, MOVE_SANDSTORM, MOVE_PSYWAVE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_SASSY
+ },
+ [7] = {
+ .species = SPECIES_MAKUHITA,
+ .moves = {MOVE_DETECT, MOVE_ARM_THRUST, MOVE_FAKE_OUT, MOVE_SMELLING_SALT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [8] = {
+ .species = SPECIES_MACHOKE,
+ .moves = {MOVE_COUNTER, MOVE_REVENGE, MOVE_BULK_UP, MOVE_FOCUS_ENERGY},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_NAIVE
+ },
+ [9] = {
+ .species = SPECIES_NINCADA,
+ .moves = {MOVE_FURY_SWIPES, MOVE_ENDURE, MOVE_MUD_SLAP, MOVE_DIG},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_SERIOUS
+ },
+ [10] = {
+ .species = SPECIES_BEAUTIFLY,
+ .moves = {MOVE_FLASH, MOVE_MORNING_SUN, MOVE_HARDEN, MOVE_MEGA_DRAIN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIRKY
+ },
+ [11] = {
+ .species = SPECIES_DUSTOX,
+ .moves = {MOVE_MOONLIGHT, MOVE_HARDEN, MOVE_POISON_STING, MOVE_PSYBEAM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .nature = NATURE_DOCILE
+ },
+ [12] = {
+ .species = SPECIES_ILLUMISE,
+ .moves = {MOVE_METRONOME, MOVE_FLATTER, MOVE_WISH, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
+ .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [13] = {
+ .species = SPECIES_VOLBEAT,
+ .moves = {MOVE_TACKLE, MOVE_MOONLIGHT, MOVE_SIGNAL_BEAM, MOVE_TAIL_GLOW},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [14] = {
+ .species = SPECIES_NINJASK,
+ .moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_DIG, MOVE_SAND_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_TIMID
+ },
+ [15] = {
+ .species = SPECIES_NINJASK,
+ .moves = {MOVE_SWORDS_DANCE, MOVE_CUT, MOVE_FURY_CUTTER, MOVE_LEECH_LIFE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [16] = {
+ .species = SPECIES_ARON,
+ .moves = {MOVE_METAL_CLAW, MOVE_PROTECT, MOVE_SHOCK_WAVE, MOVE_METAL_SOUND},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_LONELY
+ },
+ [17] = {
+ .species = SPECIES_ARON,
+ .moves = {MOVE_SECRET_POWER, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_MUD_SLAP},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_GENTLE
+ },
+ [18] = {
+ .species = SPECIES_ELECTRIKE,
+ .moves = {MOVE_CRUNCH, MOVE_THUNDER_WAVE, MOVE_HOWL, MOVE_QUICK_ATTACK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SEA_INCENSE,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HASTY
+ },
+ [19] = {
+ .species = SPECIES_MAGNEMITE,
+ .moves = {MOVE_THUNDER_WAVE, MOVE_SUPERSONIC, MOVE_ENDURE, MOVE_SPARK},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIET
+ },
+ [20] = {
+ .species = SPECIES_VOLTORB,
+ .moves = {MOVE_CHARGE, MOVE_SPARK, MOVE_SCREECH, MOVE_SONIC_BOOM},
+ .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [21] = {
+ .species = SPECIES_WHISMUR,
+ .moves = {MOVE_REST, MOVE_SLEEP_TALK, MOVE_HYPER_VOICE, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [22] = {
+ .species = SPECIES_LOUDRED,
+ .moves = {MOVE_STOMP, MOVE_REST, MOVE_SCREECH, MOVE_UPROAR},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [23] = {
+ .species = SPECIES_LINOONE,
+ .moves = {MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_SHOCK_WAVE, MOVE_GROWL},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [24] = {
+ .species = SPECIES_MIGHTYENA,
+ .moves = {MOVE_SAND_ATTACK, MOVE_HOWL, MOVE_SWAGGER, MOVE_SECRET_POWER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_JOLLY
+ },
+ [25] = {
+ .species = SPECIES_SWABLU,
+ .moves = {MOVE_TAKE_DOWN, MOVE_SING, MOVE_GROWL, MOVE_SAFEGUARD},
+ .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_QUIRKY
+ },
+ [26] = {
+ .species = SPECIES_SKARMORY,
+ .moves = {MOVE_AGILITY, MOVE_STEEL_WING, MOVE_SAND_ATTACK, MOVE_TORMENT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [27] = {
+ .species = SPECIES_GOLBAT,
+ .moves = {MOVE_CONFUSE_RAY, MOVE_BITE, MOVE_DOUBLE_TEAM, MOVE_SUBSTITUTE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BOLD
+ },
+ [28] = {
+ .species = SPECIES_WINGULL,
+ .moves = {MOVE_WING_ATTACK, MOVE_HAIL, MOVE_DOUBLE_TEAM, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .nature = NATURE_MODEST
+ },
+ [29] = {
+ .species = SPECIES_PELIPPER,
+ .moves = {MOVE_TWISTER, MOVE_ICY_WIND, MOVE_DOUBLE_TEAM, MOVE_WATER_GUN},
+ .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [30] = {
+ .species = SPECIES_BARBOACH,
+ .moves = {MOVE_SPARK, MOVE_WATER_GUN, MOVE_EARTHQUAKE, MOVE_WATER_SPORT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_MODEST
+ },
+ [31] = {
+ .species = SPECIES_WAILMER,
+ .moves = {MOVE_WATER_PULSE, MOVE_RAIN_DANCE, MOVE_SPLASH, MOVE_CURSE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_QUIET
+ },
+ [32] = {
+ .species = SPECIES_MARILL,
+ .moves = {MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_ATTRACT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [33] = {
+ .species = SPECIES_GOLDEEN,
+ .moves = {MOVE_WATERFALL, MOVE_RAIN_DANCE, MOVE_FLAIL, MOVE_PROTECT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_GANLON_BERRY,
+ .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_HASTY
+ },
+ [34] = {
+ .species = SPECIES_GOLDEEN,
+ .moves = {MOVE_SLEEP_TALK, MOVE_HORN_DRILL, MOVE_REST, MOVE_SUPERSONIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_CAREFUL
+ },
+ [35] = {
+ .species = SPECIES_TRAPINCH,
+ .moves = {MOVE_RETURN, MOVE_SAND_ATTACK, MOVE_ATTRACT, MOVE_STRENGTH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_MAGO_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [36] = {
+ .species = SPECIES_BALTOY,
+ .moves = {MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_RAPID_SPIN, MOVE_MIMIC},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [37] = {
+ .species = SPECIES_GRAVELER,
+ .moves = {MOVE_ROCK_BLAST, MOVE_DEFENSE_CURL, MOVE_MAGNITUDE, MOVE_MUD_SPORT},
+ .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ },
+ [38] = {
+ .species = SPECIES_SANDSHREW,
+ .moves = {MOVE_SAND_TOMB, MOVE_SANDSTORM, MOVE_DOUBLE_TEAM, MOVE_FOCUS_PUNCH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_JOLLY
+ },
+ [39] = {
+ .species = SPECIES_SWALOT,
+ .moves = {MOVE_YAWN, MOVE_ENCORE, MOVE_BULLET_SEED, MOVE_SLUDGE},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
+ .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .nature = NATURE_BRAVE
+ },
+ [40] = {
+ .species = SPECIES_SHROOMISH,
+ .moves = {MOVE_HEADBUTT, MOVE_SPORE, MOVE_SWAGGER, MOVE_LEECH_SEED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_IMPISH
+ },
+ [41] = {
+ .species = SPECIES_KIRLIA,
+ .moves = {MOVE_HYPNOSIS, MOVE_GROWL, MOVE_ATTRACT, MOVE_DREAM_EATER},
+ .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [42] = {
+ .species = SPECIES_LOMBRE,
+ .moves = {MOVE_NATURE_POWER, MOVE_WATER_GUN, MOVE_RAIN_DANCE, MOVE_FLASH},
+ .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_BASHFUL
+ },
+ [43] = {
+ .species = SPECIES_NUZLEAF,
+ .moves = {MOVE_NATURE_POWER, MOVE_TORMENT, MOVE_SWAGGER, MOVE_REST},
+ .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
+ .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .nature = NATURE_ADAMANT
+ },
+ [44] = {
+ .species = SPECIES_CACNEA,
+ .moves = {MOVE_SANDSTORM, MOVE_NEEDLE_ARM, MOVE_TEETER_DANCE, MOVE_LEECH_SEED},
+ .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
+ .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .nature = NATURE_ADAMANT
+ }
+};
diff --git a/src/data/graphics/berry_fix.h b/src/data/graphics/berry_fix.h
index aede748a4..07e2cbf51 100644
--- a/src/data/graphics/berry_fix.h
+++ b/src/data/graphics/berry_fix.h
@@ -20,4 +20,4 @@ const u32 gBerryFixGbaTransferError_Tilemap[] = INCBIN_U32("graphics/berry_fix/g
const u16 gBerryFixWindow_Pal[] = INCBIN_U16("graphics/berry_fix/window.gbapal");
const u32 gBerryFixWindow_Gfx[] = INCBIN_U32("graphics/berry_fix/window.4bpp.lz");
-const u32 gBerryFixWindow_Tilemap[] = INCBIN_U32("graphics/berry_fix/window.bin.lz"); \ No newline at end of file
+const u32 gBerryFixWindow_Tilemap[] = INCBIN_U32("graphics/berry_fix/window.bin.lz");
diff --git a/src/data/pokemon_graphics/front_anims.h b/src/data/pokemon_graphics/front_anims.h
index 0e7b75bde..8a42eb5c9 100644
--- a/src/data/pokemon_graphics/front_anims.h
+++ b/src/data/pokemon_graphics/front_anims.h
@@ -1,4 +1,4 @@
-
+
const union AnimCmd gAnimCmd_NONE_1[] =
{
ANIMCMD_FRAME(0, 30),
@@ -6946,446 +6946,449 @@ const union AnimCmd *const gAnims_UNOWN_QMARK[] ={
gAnimCmd_UNOWN_QMARK_1,
};
+#define ANIM_CMD(name) [SPECIES_##name] = gAnims_##name
+#define ANIM_CMD_FULL(name, anims) [SPECIES_##name] = anims
+
const union AnimCmd* const * const gMonAnimationsSpriteAnimsPtrTable[] =
{
- gAnims_NONE,
- gAnims_BULBASAUR,
- gAnims_IVYSAUR,
- gAnims_VENUSAUR,
- gAnims_CHARMANDER,
- gAnims_CHARMELEON,
- gAnims_CHARIZARD,
- gAnims_SQUIRTLE,
- gAnims_WARTORTLE,
- gAnims_BLASTOISE,
- gAnims_CATERPIE,
- gAnims_METAPOD,
- gAnims_BUTTERFREE,
- gAnims_WEEDLE,
- gAnims_KAKUNA,
- gAnims_BEEDRILL,
- gAnims_PIDGEY,
- gAnims_PIDGEOTTO,
- gAnims_PIDGEOT,
- gAnims_RATTATA,
- gAnims_RATICATE,
- gAnims_SPEAROW,
- gAnims_FEAROW,
- gAnims_EKANS,
- gAnims_ARBOK,
- gAnims_PIKACHU,
- gAnims_RAICHU,
- gAnims_SANDSHREW,
- gAnims_SANDSLASH,
- gAnims_NIDORAN_F,
- gAnims_NIDORINA,
- gAnims_NIDOQUEEN,
- gAnims_NIDORAN_M,
- gAnims_NIDORINO,
- gAnims_NIDOKING,
- gAnims_CLEFAIRY,
- gAnims_CLEFABLE,
- gAnims_VULPIX,
- gAnims_NINETALES,
- gAnims_JIGGLYPUFF,
- gAnims_WIGGLYTUFF,
- gAnims_ZUBAT,
- gAnims_GOLBAT,
- gAnims_ODDISH,
- gAnims_GLOOM,
- gAnims_VILEPLUME,
- gAnims_PARAS,
- gAnims_PARASECT,
- gAnims_VENONAT,
- gAnims_VENOMOTH,
- gAnims_DIGLETT,
- gAnims_DUGTRIO,
- gAnims_MEOWTH,
- gAnims_PERSIAN,
- gAnims_PSYDUCK,
- gAnims_GOLDUCK,
- gAnims_MANKEY,
- gAnims_PRIMEAPE,
- gAnims_GROWLITHE,
- gAnims_ARCANINE,
- gAnims_POLIWAG,
- gAnims_POLIWHIRL,
- gAnims_POLIWRATH,
- gAnims_ABRA,
- gAnims_KADABRA,
- gAnims_ALAKAZAM,
- gAnims_MACHOP,
- gAnims_MACHOKE,
- gAnims_MACHAMP,
- gAnims_BELLSPROUT,
- gAnims_WEEPINBELL,
- gAnims_VICTREEBEL,
- gAnims_TENTACOOL,
- gAnims_TENTACRUEL,
- gAnims_GEODUDE,
- gAnims_GRAVELER,
- gAnims_GOLEM,
- gAnims_PONYTA,
- gAnims_RAPIDASH,
- gAnims_SLOWPOKE,
- gAnims_SLOWBRO,
- gAnims_MAGNEMITE,
- gAnims_MAGNETON,
- gAnims_FARFETCHD,
- gAnims_DODUO,
- gAnims_DODRIO,
- gAnims_SEEL,
- gAnims_DEWGONG,
- gAnims_GRIMER,
- gAnims_MUK,
- gAnims_SHELLDER,
- gAnims_CLOYSTER,
- gAnims_GASTLY,
- gAnims_HAUNTER,
- gAnims_GENGAR,
- gAnims_ONIX,
- gAnims_DROWZEE,
- gAnims_HYPNO,
- gAnims_KRABBY,
- gAnims_KINGLER,
- gAnims_VOLTORB,
- gAnims_ELECTRODE,
- gAnims_EXEGGCUTE,
- gAnims_EXEGGUTOR,
- gAnims_CUBONE,
- gAnims_MAROWAK,
- gAnims_HITMONLEE,
- gAnims_HITMONCHAN,
- gAnims_LICKITUNG,
- gAnims_KOFFING,
- gAnims_WEEZING,
- gAnims_RHYHORN,
- gAnims_RHYDON,
- gAnims_CHANSEY,
- gAnims_TANGELA,
- gAnims_KANGASKHAN,
- gAnims_HORSEA,
- gAnims_SEADRA,
- gAnims_GOLDEEN,
- gAnims_SEAKING,
- gAnims_STARYU,
- gAnims_STARMIE,
- gAnims_MR_MIME,
- gAnims_SCYTHER,
- gAnims_JYNX,
- gAnims_ELECTABUZZ,
- gAnims_MAGMAR,
- gAnims_PINSIR,
- gAnims_TAUROS,
- gAnims_MAGIKARP,
- gAnims_GYARADOS,
- gAnims_LAPRAS,
- gAnims_DITTO,
- gAnims_EEVEE,
- gAnims_VAPOREON,
- gAnims_JOLTEON,
- gAnims_FLAREON,
- gAnims_PORYGON,
- gAnims_OMANYTE,
- gAnims_OMASTAR,
- gAnims_KABUTO,
- gAnims_KABUTOPS,
- gAnims_AERODACTYL,
- gAnims_SNORLAX,
- gAnims_ARTICUNO,
- gAnims_ZAPDOS,
- gAnims_MOLTRES,
- gAnims_DRATINI,
- gAnims_DRAGONAIR,
- gAnims_DRAGONITE,
- gAnims_MEWTWO,
- gAnims_MEW,
- gAnims_CHIKORITA,
- gAnims_BAYLEEF,
- gAnims_MEGANIUM,
- gAnims_CYNDAQUIL,
- gAnims_QUILAVA,
- gAnims_TYPHLOSION,
- gAnims_TOTODILE,
- gAnims_CROCONAW,
- gAnims_FERALIGATR,
- gAnims_SENTRET,
- gAnims_FURRET,
- gAnims_HOOTHOOT,
- gAnims_NOCTOWL,
- gAnims_LEDYBA,
- gAnims_LEDIAN,
- gAnims_SPINARAK,
- gAnims_ARIADOS,
- gAnims_CROBAT,
- gAnims_CHINCHOU,
- gAnims_LANTURN,
- gAnims_PICHU,
- gAnims_CLEFFA,
- gAnims_IGGLYBUFF,
- gAnims_TOGEPI,
- gAnims_TOGETIC,
- gAnims_NATU,
- gAnims_XATU,
- gAnims_MAREEP,
- gAnims_FLAAFFY,
- gAnims_AMPHAROS,
- gAnims_BELLOSSOM,
- gAnims_MARILL,
- gAnims_AZUMARILL,
- gAnims_SUDOWOODO,
- gAnims_POLITOED,
- gAnims_HOPPIP,
- gAnims_SKIPLOOM,
- gAnims_JUMPLUFF,
- gAnims_AIPOM,
- gAnims_SUNKERN,
- gAnims_SUNFLORA,
- gAnims_YANMA,
- gAnims_WOOPER,
- gAnims_QUAGSIRE,
- gAnims_ESPEON,
- gAnims_UMBREON,
- gAnims_MURKROW,
- gAnims_SLOWKING,
- gAnims_MISDREAVUS,
- gAnims_UNOWN,
- gAnims_WOBBUFFET,
- gAnims_GIRAFARIG,
- gAnims_PINECO,
- gAnims_FORRETRESS,
- gAnims_DUNSPARCE,
- gAnims_GLIGAR,
- gAnims_STEELIX,
- gAnims_SNUBBULL,
- gAnims_GRANBULL,
- gAnims_QWILFISH,
- gAnims_SCIZOR,
- gAnims_SHUCKLE,
- gAnims_HERACROSS,
- gAnims_SNEASEL,
- gAnims_TEDDIURSA,
- gAnims_URSARING,
- gAnims_SLUGMA,
- gAnims_MAGCARGO,
- gAnims_SWINUB,
- gAnims_PILOSWINE,
- gAnims_CORSOLA,
- gAnims_REMORAID,
- gAnims_OCTILLERY,
- gAnims_DELIBIRD,
- gAnims_MANTINE,
- gAnims_SKARMORY,
- gAnims_HOUNDOUR,
- gAnims_HOUNDOOM,
- gAnims_KINGDRA,
- gAnims_PHANPY,
- gAnims_DONPHAN,
- gAnims_PORYGON2,
- gAnims_STANTLER,
- gAnims_SMEARGLE,
- gAnims_TYROGUE,
- gAnims_HITMONTOP,
- gAnims_SMOOCHUM,
- gAnims_ELEKID,
- gAnims_MAGBY,
- gAnims_MILTANK,
- gAnims_BLISSEY,
- gAnims_RAIKOU,
- gAnims_ENTEI,
- gAnims_SUICUNE,
- gAnims_LARVITAR,
- gAnims_PUPITAR,
- gAnims_TYRANITAR,
- gAnims_LUGIA,
- gAnims_HO_OH,
- gAnims_CELEBI,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_OLD_UNOWN_B,
- gAnims_TREECKO,
- gAnims_GROVYLE,
- gAnims_SCEPTILE,
- gAnims_TORCHIC,
- gAnims_COMBUSKEN,
- gAnims_BLAZIKEN,
- gAnims_MUDKIP,
- gAnims_MARSHTOMP,
- gAnims_SWAMPERT,
- gAnims_POOCHYENA,
- gAnims_MIGHTYENA,
- gAnims_ZIGZAGOON,
- gAnims_LINOONE,
- gAnims_WURMPLE,
- gAnims_SILCOON,
- gAnims_BEAUTIFLY,
- gAnims_CASCOON,
- gAnims_DUSTOX,
- gAnims_LOTAD,
- gAnims_LOMBRE,
- gAnims_LUDICOLO,
- gAnims_SEEDOT,
- gAnims_NUZLEAF,
- gAnims_SHIFTRY,
- gAnims_NINCADA,
- gAnims_NINJASK,
- gAnims_SHEDINJA,
- gAnims_TAILLOW,
- gAnims_SWELLOW,
- gAnims_SHROOMISH,
- gAnims_BRELOOM,
- gAnims_SPINDA,
- gAnims_WINGULL,
- gAnims_PELIPPER,
- gAnims_SURSKIT,
- gAnims_MASQUERAIN,
- gAnims_WAILMER,
- gAnims_WAILORD,
- gAnims_SKITTY,
- gAnims_DELCATTY,
- gAnims_KECLEON,
- gAnims_BALTOY,
- gAnims_CLAYDOL,
- gAnims_NOSEPASS,
- gAnims_TORKOAL,
- gAnims_SABLEYE,
- gAnims_BARBOACH,
- gAnims_WHISCASH,
- gAnims_LUVDISC,
- gAnims_CORPHISH,
- gAnims_CRAWDAUNT,
- gAnims_FEEBAS,
- gAnims_MILOTIC,
- gAnims_CARVANHA,
- gAnims_SHARPEDO,
- gAnims_TRAPINCH,
- gAnims_VIBRAVA,
- gAnims_FLYGON,
- gAnims_MAKUHITA,
- gAnims_HARIYAMA,
- gAnims_ELECTRIKE,
- gAnims_MANECTRIC,
- gAnims_NUMEL,
- gAnims_CAMERUPT,
- gAnims_SPHEAL,
- gAnims_SEALEO,
- gAnims_WALREIN,
- gAnims_CACNEA,
- gAnims_CACTURNE,
- gAnims_SNORUNT,
- gAnims_GLALIE,
- gAnims_LUNATONE,
- gAnims_SOLROCK,
- gAnims_AZURILL,
- gAnims_SPOINK,
- gAnims_GRUMPIG,
- gAnims_PLUSLE,
- gAnims_MINUN,
- gAnims_MAWILE,
- gAnims_MEDITITE,
- gAnims_MEDICHAM,
- gAnims_SWABLU,
- gAnims_ALTARIA,
- gAnims_WYNAUT,
- gAnims_DUSKULL,
- gAnims_DUSCLOPS,
- gAnims_ROSELIA,
- gAnims_SLAKOTH,
- gAnims_VIGOROTH,
- gAnims_SLAKING,
- gAnims_GULPIN,
- gAnims_SWALOT,
- gAnims_TROPIUS,
- gAnims_WHISMUR,
- gAnims_LOUDRED,
- gAnims_EXPLOUD,
- gAnims_CLAMPERL,
- gAnims_HUNTAIL,
- gAnims_GOREBYSS,
- gAnims_ABSOL,
- gAnims_SHUPPET,
- gAnims_BANETTE,
- gAnims_SEVIPER,
- gAnims_ZANGOOSE,
- gAnims_RELICANTH,
- gAnims_ARON,
- gAnims_LAIRON,
- gAnims_AGGRON,
- gAnims_CASTFORM,
- gAnims_VOLBEAT,
- gAnims_ILLUMISE,
- gAnims_LILEEP,
- gAnims_CRADILY,
- gAnims_ANORITH,
- gAnims_ARMALDO,
- gAnims_RALTS,
- gAnims_KIRLIA,
- gAnims_GARDEVOIR,
- gAnims_BAGON,
- gAnims_SHELGON,
- gAnims_SALAMENCE,
- gAnims_BELDUM,
- gAnims_METANG,
- gAnims_METAGROSS,
- gAnims_REGIROCK,
- gAnims_REGICE,
- gAnims_REGISTEEL,
- gAnims_KYOGRE,
- gAnims_GROUDON,
- gAnims_RAYQUAZA,
- gAnims_LATIAS,
- gAnims_LATIOS,
- gAnims_JIRACHI,
- gAnims_DEOXYS,
- gAnims_CHIMECHO,
- gAnims_EGG,
- gAnims_UNOWN_B,
- gAnims_UNOWN_C,
- gAnims_UNOWN_D,
- gAnims_UNOWN_E,
- gAnims_UNOWN_F,
- gAnims_UNOWN_G,
- gAnims_UNOWN_H,
- gAnims_UNOWN_I,
- gAnims_UNOWN_J,
- gAnims_UNOWN_K,
- gAnims_UNOWN_L,
- gAnims_UNOWN_M,
- gAnims_UNOWN_N,
- gAnims_UNOWN_O,
- gAnims_UNOWN_P,
- gAnims_UNOWN_Q,
- gAnims_UNOWN_R,
- gAnims_UNOWN_S,
- gAnims_UNOWN_T,
- gAnims_UNOWN_U,
- gAnims_UNOWN_V,
- gAnims_UNOWN_W,
- gAnims_UNOWN_X,
- gAnims_UNOWN_Y,
- gAnims_UNOWN_Z,
- gAnims_UNOWN_EMARK,
- gAnims_UNOWN_QMARK,
+ ANIM_CMD(NONE),
+ ANIM_CMD(BULBASAUR),
+ ANIM_CMD(IVYSAUR),
+ ANIM_CMD(VENUSAUR),
+ ANIM_CMD(CHARMANDER),
+ ANIM_CMD(CHARMELEON),
+ ANIM_CMD(CHARIZARD),
+ ANIM_CMD(SQUIRTLE),
+ ANIM_CMD(WARTORTLE),
+ ANIM_CMD(BLASTOISE),
+ ANIM_CMD(CATERPIE),
+ ANIM_CMD(METAPOD),
+ ANIM_CMD(BUTTERFREE),
+ ANIM_CMD(WEEDLE),
+ ANIM_CMD(KAKUNA),
+ ANIM_CMD(BEEDRILL),
+ ANIM_CMD(PIDGEY),
+ ANIM_CMD(PIDGEOTTO),
+ ANIM_CMD(PIDGEOT),
+ ANIM_CMD(RATTATA),
+ ANIM_CMD(RATICATE),
+ ANIM_CMD(SPEAROW),
+ ANIM_CMD(FEAROW),
+ ANIM_CMD(EKANS),
+ ANIM_CMD(ARBOK),
+ ANIM_CMD(PIKACHU),
+ ANIM_CMD(RAICHU),
+ ANIM_CMD(SANDSHREW),
+ ANIM_CMD(SANDSLASH),
+ ANIM_CMD(NIDORAN_F),
+ ANIM_CMD(NIDORINA),
+ ANIM_CMD(NIDOQUEEN),
+ ANIM_CMD(NIDORAN_M),
+ ANIM_CMD(NIDORINO),
+ ANIM_CMD(NIDOKING),
+ ANIM_CMD(CLEFAIRY),
+ ANIM_CMD(CLEFABLE),
+ ANIM_CMD(VULPIX),
+ ANIM_CMD(NINETALES),
+ ANIM_CMD(JIGGLYPUFF),
+ ANIM_CMD(WIGGLYTUFF),
+ ANIM_CMD(ZUBAT),
+ ANIM_CMD(GOLBAT),
+ ANIM_CMD(ODDISH),
+ ANIM_CMD(GLOOM),
+ ANIM_CMD(VILEPLUME),
+ ANIM_CMD(PARAS),
+ ANIM_CMD(PARASECT),
+ ANIM_CMD(VENONAT),
+ ANIM_CMD(VENOMOTH),
+ ANIM_CMD(DIGLETT),
+ ANIM_CMD(DUGTRIO),
+ ANIM_CMD(MEOWTH),
+ ANIM_CMD(PERSIAN),
+ ANIM_CMD(PSYDUCK),
+ ANIM_CMD(GOLDUCK),
+ ANIM_CMD(MANKEY),
+ ANIM_CMD(PRIMEAPE),
+ ANIM_CMD(GROWLITHE),
+ ANIM_CMD(ARCANINE),
+ ANIM_CMD(POLIWAG),
+ ANIM_CMD(POLIWHIRL),
+ ANIM_CMD(POLIWRATH),
+ ANIM_CMD(ABRA),
+ ANIM_CMD(KADABRA),
+ ANIM_CMD(ALAKAZAM),
+ ANIM_CMD(MACHOP),
+ ANIM_CMD(MACHOKE),
+ ANIM_CMD(MACHAMP),
+ ANIM_CMD(BELLSPROUT),
+ ANIM_CMD(WEEPINBELL),
+ ANIM_CMD(VICTREEBEL),
+ ANIM_CMD(TENTACOOL),
+ ANIM_CMD(TENTACRUEL),
+ ANIM_CMD(GEODUDE),
+ ANIM_CMD(GRAVELER),
+ ANIM_CMD(GOLEM),
+ ANIM_CMD(PONYTA),
+ ANIM_CMD(RAPIDASH),
+ ANIM_CMD(SLOWPOKE),
+ ANIM_CMD(SLOWBRO),
+ ANIM_CMD(MAGNEMITE),
+ ANIM_CMD(MAGNETON),
+ ANIM_CMD(FARFETCHD),
+ ANIM_CMD(DODUO),
+ ANIM_CMD(DODRIO),
+ ANIM_CMD(SEEL),
+ ANIM_CMD(DEWGONG),
+ ANIM_CMD(GRIMER),
+ ANIM_CMD(MUK),
+ ANIM_CMD(SHELLDER),
+ ANIM_CMD(CLOYSTER),
+ ANIM_CMD(GASTLY),
+ ANIM_CMD(HAUNTER),
+ ANIM_CMD(GENGAR),
+ ANIM_CMD(ONIX),
+ ANIM_CMD(DROWZEE),
+ ANIM_CMD(HYPNO),
+ ANIM_CMD(KRABBY),
+ ANIM_CMD(KINGLER),
+ ANIM_CMD(VOLTORB),
+ ANIM_CMD(ELECTRODE),
+ ANIM_CMD(EXEGGCUTE),
+ ANIM_CMD(EXEGGUTOR),
+ ANIM_CMD(CUBONE),
+ ANIM_CMD(MAROWAK),
+ ANIM_CMD(HITMONLEE),
+ ANIM_CMD(HITMONCHAN),
+ ANIM_CMD(LICKITUNG),
+ ANIM_CMD(KOFFING),
+ ANIM_CMD(WEEZING),
+ ANIM_CMD(RHYHORN),
+ ANIM_CMD(RHYDON),
+ ANIM_CMD(CHANSEY),
+ ANIM_CMD(TANGELA),
+ ANIM_CMD(KANGASKHAN),
+ ANIM_CMD(HORSEA),
+ ANIM_CMD(SEADRA),
+ ANIM_CMD(GOLDEEN),
+ ANIM_CMD(SEAKING),
+ ANIM_CMD(STARYU),
+ ANIM_CMD(STARMIE),
+ ANIM_CMD(MR_MIME),
+ ANIM_CMD(SCYTHER),
+ ANIM_CMD(JYNX),
+ ANIM_CMD(ELECTABUZZ),
+ ANIM_CMD(MAGMAR),
+ ANIM_CMD(PINSIR),
+ ANIM_CMD(TAUROS),
+ ANIM_CMD(MAGIKARP),
+ ANIM_CMD(GYARADOS),
+ ANIM_CMD(LAPRAS),
+ ANIM_CMD(DITTO),
+ ANIM_CMD(EEVEE),
+ ANIM_CMD(VAPOREON),
+ ANIM_CMD(JOLTEON),
+ ANIM_CMD(FLAREON),
+ ANIM_CMD(PORYGON),
+ ANIM_CMD(OMANYTE),
+ ANIM_CMD(OMASTAR),
+ ANIM_CMD(KABUTO),
+ ANIM_CMD(KABUTOPS),
+ ANIM_CMD(AERODACTYL),
+ ANIM_CMD(SNORLAX),
+ ANIM_CMD(ARTICUNO),
+ ANIM_CMD(ZAPDOS),
+ ANIM_CMD(MOLTRES),
+ ANIM_CMD(DRATINI),
+ ANIM_CMD(DRAGONAIR),
+ ANIM_CMD(DRAGONITE),
+ ANIM_CMD(MEWTWO),
+ ANIM_CMD(MEW),
+ ANIM_CMD(CHIKORITA),
+ ANIM_CMD(BAYLEEF),
+ ANIM_CMD(MEGANIUM),
+ ANIM_CMD(CYNDAQUIL),
+ ANIM_CMD(QUILAVA),
+ ANIM_CMD(TYPHLOSION),
+ ANIM_CMD(TOTODILE),
+ ANIM_CMD(CROCONAW),
+ ANIM_CMD(FERALIGATR),
+ ANIM_CMD(SENTRET),
+ ANIM_CMD(FURRET),
+ ANIM_CMD(HOOTHOOT),
+ ANIM_CMD(NOCTOWL),
+ ANIM_CMD(LEDYBA),
+ ANIM_CMD(LEDIAN),
+ ANIM_CMD(SPINARAK),
+ ANIM_CMD(ARIADOS),
+ ANIM_CMD(CROBAT),
+ ANIM_CMD(CHINCHOU),
+ ANIM_CMD(LANTURN),
+ ANIM_CMD(PICHU),
+ ANIM_CMD(CLEFFA),
+ ANIM_CMD(IGGLYBUFF),
+ ANIM_CMD(TOGEPI),
+ ANIM_CMD(TOGETIC),
+ ANIM_CMD(NATU),
+ ANIM_CMD(XATU),
+ ANIM_CMD(MAREEP),
+ ANIM_CMD(FLAAFFY),
+ ANIM_CMD(AMPHAROS),
+ ANIM_CMD(BELLOSSOM),
+ ANIM_CMD(MARILL),
+ ANIM_CMD(AZUMARILL),
+ ANIM_CMD(SUDOWOODO),
+ ANIM_CMD(POLITOED),
+ ANIM_CMD(HOPPIP),
+ ANIM_CMD(SKIPLOOM),
+ ANIM_CMD(JUMPLUFF),
+ ANIM_CMD(AIPOM),
+ ANIM_CMD(SUNKERN),
+ ANIM_CMD(SUNFLORA),
+ ANIM_CMD(YANMA),
+ ANIM_CMD(WOOPER),
+ ANIM_CMD(QUAGSIRE),
+ ANIM_CMD(ESPEON),
+ ANIM_CMD(UMBREON),
+ ANIM_CMD(MURKROW),
+ ANIM_CMD(SLOWKING),
+ ANIM_CMD(MISDREAVUS),
+ ANIM_CMD(UNOWN),
+ ANIM_CMD(WOBBUFFET),
+ ANIM_CMD(GIRAFARIG),
+ ANIM_CMD(PINECO),
+ ANIM_CMD(FORRETRESS),
+ ANIM_CMD(DUNSPARCE),
+ ANIM_CMD(GLIGAR),
+ ANIM_CMD(STEELIX),
+ ANIM_CMD(SNUBBULL),
+ ANIM_CMD(GRANBULL),
+ ANIM_CMD(QWILFISH),
+ ANIM_CMD(SCIZOR),
+ ANIM_CMD(SHUCKLE),
+ ANIM_CMD(HERACROSS),
+ ANIM_CMD(SNEASEL),
+ ANIM_CMD(TEDDIURSA),
+ ANIM_CMD(URSARING),
+ ANIM_CMD(SLUGMA),
+ ANIM_CMD(MAGCARGO),
+ ANIM_CMD(SWINUB),
+ ANIM_CMD(PILOSWINE),
+ ANIM_CMD(CORSOLA),
+ ANIM_CMD(REMORAID),
+ ANIM_CMD(OCTILLERY),
+ ANIM_CMD(DELIBIRD),
+ ANIM_CMD(MANTINE),
+ ANIM_CMD(SKARMORY),
+ ANIM_CMD(HOUNDOUR),
+ ANIM_CMD(HOUNDOOM),
+ ANIM_CMD(KINGDRA),
+ ANIM_CMD(PHANPY),
+ ANIM_CMD(DONPHAN),
+ ANIM_CMD(PORYGON2),
+ ANIM_CMD(STANTLER),
+ ANIM_CMD(SMEARGLE),
+ ANIM_CMD(TYROGUE),
+ ANIM_CMD(HITMONTOP),
+ ANIM_CMD(SMOOCHUM),
+ ANIM_CMD(ELEKID),
+ ANIM_CMD(MAGBY),
+ ANIM_CMD(MILTANK),
+ ANIM_CMD(BLISSEY),
+ ANIM_CMD(RAIKOU),
+ ANIM_CMD(ENTEI),
+ ANIM_CMD(SUICUNE),
+ ANIM_CMD(LARVITAR),
+ ANIM_CMD(PUPITAR),
+ ANIM_CMD(TYRANITAR),
+ ANIM_CMD(LUGIA),
+ ANIM_CMD(HO_OH),
+ ANIM_CMD(CELEBI),
+ ANIM_CMD(OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_C, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_D, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_E, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_F, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_G, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_H, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_I, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_J, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_K, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_L, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_M, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_N, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_O, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_P, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_Q, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_R, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_S, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_T, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_U, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_V, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_W, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_X, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_Y, gAnims_OLD_UNOWN_B),
+ ANIM_CMD_FULL(OLD_UNOWN_Z, gAnims_OLD_UNOWN_B),
+ ANIM_CMD(TREECKO),
+ ANIM_CMD(GROVYLE),
+ ANIM_CMD(SCEPTILE),
+ ANIM_CMD(TORCHIC),
+ ANIM_CMD(COMBUSKEN),
+ ANIM_CMD(BLAZIKEN),
+ ANIM_CMD(MUDKIP),
+ ANIM_CMD(MARSHTOMP),
+ ANIM_CMD(SWAMPERT),
+ ANIM_CMD(POOCHYENA),
+ ANIM_CMD(MIGHTYENA),
+ ANIM_CMD(ZIGZAGOON),
+ ANIM_CMD(LINOONE),
+ ANIM_CMD(WURMPLE),
+ ANIM_CMD(SILCOON),
+ ANIM_CMD(BEAUTIFLY),
+ ANIM_CMD(CASCOON),
+ ANIM_CMD(DUSTOX),
+ ANIM_CMD(LOTAD),
+ ANIM_CMD(LOMBRE),
+ ANIM_CMD(LUDICOLO),
+ ANIM_CMD(SEEDOT),
+ ANIM_CMD(NUZLEAF),
+ ANIM_CMD(SHIFTRY),
+ ANIM_CMD(NINCADA),
+ ANIM_CMD(NINJASK),
+ ANIM_CMD(SHEDINJA),
+ ANIM_CMD(TAILLOW),
+ ANIM_CMD(SWELLOW),
+ ANIM_CMD(SHROOMISH),
+ ANIM_CMD(BRELOOM),
+ ANIM_CMD(SPINDA),
+ ANIM_CMD(WINGULL),
+ ANIM_CMD(PELIPPER),
+ ANIM_CMD(SURSKIT),
+ ANIM_CMD(MASQUERAIN),
+ ANIM_CMD(WAILMER),
+ ANIM_CMD(WAILORD),
+ ANIM_CMD(SKITTY),
+ ANIM_CMD(DELCATTY),
+ ANIM_CMD(KECLEON),
+ ANIM_CMD(BALTOY),
+ ANIM_CMD(CLAYDOL),
+ ANIM_CMD(NOSEPASS),
+ ANIM_CMD(TORKOAL),
+ ANIM_CMD(SABLEYE),
+ ANIM_CMD(BARBOACH),
+ ANIM_CMD(WHISCASH),
+ ANIM_CMD(LUVDISC),
+ ANIM_CMD(CORPHISH),
+ ANIM_CMD(CRAWDAUNT),
+ ANIM_CMD(FEEBAS),
+ ANIM_CMD(MILOTIC),
+ ANIM_CMD(CARVANHA),
+ ANIM_CMD(SHARPEDO),
+ ANIM_CMD(TRAPINCH),
+ ANIM_CMD(VIBRAVA),
+ ANIM_CMD(FLYGON),
+ ANIM_CMD(MAKUHITA),
+ ANIM_CMD(HARIYAMA),
+ ANIM_CMD(ELECTRIKE),
+ ANIM_CMD(MANECTRIC),
+ ANIM_CMD(NUMEL),
+ ANIM_CMD(CAMERUPT),
+ ANIM_CMD(SPHEAL),
+ ANIM_CMD(SEALEO),
+ ANIM_CMD(WALREIN),
+ ANIM_CMD(CACNEA),
+ ANIM_CMD(CACTURNE),
+ ANIM_CMD(SNORUNT),
+ ANIM_CMD(GLALIE),
+ ANIM_CMD(LUNATONE),
+ ANIM_CMD(SOLROCK),
+ ANIM_CMD(AZURILL),
+ ANIM_CMD(SPOINK),
+ ANIM_CMD(GRUMPIG),
+ ANIM_CMD(PLUSLE),
+ ANIM_CMD(MINUN),
+ ANIM_CMD(MAWILE),
+ ANIM_CMD(MEDITITE),
+ ANIM_CMD(MEDICHAM),
+ ANIM_CMD(SWABLU),
+ ANIM_CMD(ALTARIA),
+ ANIM_CMD(WYNAUT),
+ ANIM_CMD(DUSKULL),
+ ANIM_CMD(DUSCLOPS),
+ ANIM_CMD(ROSELIA),
+ ANIM_CMD(SLAKOTH),
+ ANIM_CMD(VIGOROTH),
+ ANIM_CMD(SLAKING),
+ ANIM_CMD(GULPIN),
+ ANIM_CMD(SWALOT),
+ ANIM_CMD(TROPIUS),
+ ANIM_CMD(WHISMUR),
+ ANIM_CMD(LOUDRED),
+ ANIM_CMD(EXPLOUD),
+ ANIM_CMD(CLAMPERL),
+ ANIM_CMD(HUNTAIL),
+ ANIM_CMD(GOREBYSS),
+ ANIM_CMD(ABSOL),
+ ANIM_CMD(SHUPPET),
+ ANIM_CMD(BANETTE),
+ ANIM_CMD(SEVIPER),
+ ANIM_CMD(ZANGOOSE),
+ ANIM_CMD(RELICANTH),
+ ANIM_CMD(ARON),
+ ANIM_CMD(LAIRON),
+ ANIM_CMD(AGGRON),
+ ANIM_CMD(CASTFORM),
+ ANIM_CMD(VOLBEAT),
+ ANIM_CMD(ILLUMISE),
+ ANIM_CMD(LILEEP),
+ ANIM_CMD(CRADILY),
+ ANIM_CMD(ANORITH),
+ ANIM_CMD(ARMALDO),
+ ANIM_CMD(RALTS),
+ ANIM_CMD(KIRLIA),
+ ANIM_CMD(GARDEVOIR),
+ ANIM_CMD(BAGON),
+ ANIM_CMD(SHELGON),
+ ANIM_CMD(SALAMENCE),
+ ANIM_CMD(BELDUM),
+ ANIM_CMD(METANG),
+ ANIM_CMD(METAGROSS),
+ ANIM_CMD(REGIROCK),
+ ANIM_CMD(REGICE),
+ ANIM_CMD(REGISTEEL),
+ ANIM_CMD(KYOGRE),
+ ANIM_CMD(GROUDON),
+ ANIM_CMD(RAYQUAZA),
+ ANIM_CMD(LATIAS),
+ ANIM_CMD(LATIOS),
+ ANIM_CMD(JIRACHI),
+ ANIM_CMD(DEOXYS),
+ ANIM_CMD(CHIMECHO),
+ ANIM_CMD(EGG),
+ ANIM_CMD(UNOWN_B),
+ ANIM_CMD(UNOWN_C),
+ ANIM_CMD(UNOWN_D),
+ ANIM_CMD(UNOWN_E),
+ ANIM_CMD(UNOWN_F),
+ ANIM_CMD(UNOWN_G),
+ ANIM_CMD(UNOWN_H),
+ ANIM_CMD(UNOWN_I),
+ ANIM_CMD(UNOWN_J),
+ ANIM_CMD(UNOWN_K),
+ ANIM_CMD(UNOWN_L),
+ ANIM_CMD(UNOWN_M),
+ ANIM_CMD(UNOWN_N),
+ ANIM_CMD(UNOWN_O),
+ ANIM_CMD(UNOWN_P),
+ ANIM_CMD(UNOWN_Q),
+ ANIM_CMD(UNOWN_R),
+ ANIM_CMD(UNOWN_S),
+ ANIM_CMD(UNOWN_T),
+ ANIM_CMD(UNOWN_U),
+ ANIM_CMD(UNOWN_V),
+ ANIM_CMD(UNOWN_W),
+ ANIM_CMD(UNOWN_X),
+ ANIM_CMD(UNOWN_Y),
+ ANIM_CMD(UNOWN_Z),
+ ANIM_CMD(UNOWN_EMARK),
+ ANIM_CMD(UNOWN_QMARK),
};
diff --git a/src/data/pokemon_graphics/still_front_pic_table.h b/src/data/pokemon_graphics/still_front_pic_table.h
index a345a3d43..308a872b4 100644
--- a/src/data/pokemon_graphics/still_front_pic_table.h
+++ b/src/data/pokemon_graphics/still_front_pic_table.h
@@ -1,446 +1,448 @@
+#define STILL_FRONT_PIC(species, frontpic) [SPECIES_##species] = {frontpic, 0x800, SPECIES_##species}
+
const struct CompressedSpriteSheet gMonStillFrontPicTable[] =
-{ //.data .size .tag
- gMonStillFrontPic_CircledQuestionMark, 0x800, 0,
- gMonStillFrontPic_Bulbasaur, 0x800, 1,
- gMonStillFrontPic_Ivysaur, 0x800, 2,
- gMonStillFrontPic_Venusaur, 0x800, 3,
- gMonStillFrontPic_Charmander, 0x800, 4,
- gMonStillFrontPic_Charmeleon, 0x800, 5,
- gMonStillFrontPic_Charizard, 0x800, 6,
- gMonStillFrontPic_Squirtle, 0x800, 7,
- gMonStillFrontPic_Wartortle, 0x800, 8,
- gMonStillFrontPic_Blastoise, 0x800, 9,
- gMonStillFrontPic_Caterpie, 0x800, 10,
- gMonStillFrontPic_Metapod, 0x800, 11,
- gMonStillFrontPic_Butterfree, 0x800, 12,
- gMonStillFrontPic_Weedle, 0x800, 13,
- gMonStillFrontPic_Kakuna, 0x800, 14,
- gMonStillFrontPic_Beedrill, 0x800, 15,
- gMonStillFrontPic_Pidgey, 0x800, 16,
- gMonStillFrontPic_Pidgeotto, 0x800, 17,
- gMonStillFrontPic_Pidgeot, 0x800, 18,
- gMonStillFrontPic_Rattata, 0x800, 19,
- gMonStillFrontPic_Raticate, 0x800, 20,
- gMonStillFrontPic_Spearow, 0x800, 21,
- gMonStillFrontPic_Fearow, 0x800, 22,
- gMonStillFrontPic_Ekans, 0x800, 23,
- gMonStillFrontPic_Arbok, 0x800, 24,
- gMonStillFrontPic_Pikachu, 0x800, 25,
- gMonStillFrontPic_Raichu, 0x800, 26,
- gMonStillFrontPic_Sandshrew, 0x800, 27,
- gMonStillFrontPic_Sandslash, 0x800, 28,
- gMonStillFrontPic_NidoranF, 0x800, 29,
- gMonStillFrontPic_Nidorina, 0x800, 30,
- gMonStillFrontPic_Nidoqueen, 0x800, 31,
- gMonStillFrontPic_NidoranM, 0x800, 32,
- gMonStillFrontPic_Nidorino, 0x800, 33,
- gMonStillFrontPic_Nidoking, 0x800, 34,
- gMonStillFrontPic_Clefairy, 0x800, 35,
- gMonStillFrontPic_Clefable, 0x800, 36,
- gMonStillFrontPic_Vulpix, 0x800, 37,
- gMonStillFrontPic_Ninetales, 0x800, 38,
- gMonStillFrontPic_Jigglypuff, 0x800, 39,
- gMonStillFrontPic_Wigglytuff, 0x800, 40,
- gMonStillFrontPic_Zubat, 0x800, 41,
- gMonStillFrontPic_Golbat, 0x800, 42,
- gMonStillFrontPic_Oddish, 0x800, 43,
- gMonStillFrontPic_Gloom, 0x800, 44,
- gMonStillFrontPic_Vileplume, 0x800, 45,
- gMonStillFrontPic_Paras, 0x800, 46,
- gMonStillFrontPic_Parasect, 0x800, 47,
- gMonStillFrontPic_Venonat, 0x800, 48,
- gMonStillFrontPic_Venomoth, 0x800, 49,
- gMonStillFrontPic_Diglett, 0x800, 50,
- gMonStillFrontPic_Dugtrio, 0x800, 51,
- gMonStillFrontPic_Meowth, 0x800, 52,
- gMonStillFrontPic_Persian, 0x800, 53,
- gMonStillFrontPic_Psyduck, 0x800, 54,
- gMonStillFrontPic_Golduck, 0x800, 55,
- gMonStillFrontPic_Mankey, 0x800, 56,
- gMonStillFrontPic_Primeape, 0x800, 57,
- gMonStillFrontPic_Growlithe, 0x800, 58,
- gMonStillFrontPic_Arcanine, 0x800, 59,
- gMonStillFrontPic_Poliwag, 0x800, 60,
- gMonStillFrontPic_Poliwhirl, 0x800, 61,
- gMonStillFrontPic_Poliwrath, 0x800, 62,
- gMonStillFrontPic_Abra, 0x800, 63,
- gMonStillFrontPic_Kadabra, 0x800, 64,
- gMonStillFrontPic_Alakazam, 0x800, 65,
- gMonStillFrontPic_Machop, 0x800, 66,
- gMonStillFrontPic_Machoke, 0x800, 67,
- gMonStillFrontPic_Machamp, 0x800, 68,
- gMonStillFrontPic_Bellsprout, 0x800, 69,
- gMonStillFrontPic_Weepinbell, 0x800, 70,
- gMonStillFrontPic_Victreebel, 0x800, 71,
- gMonStillFrontPic_Tentacool, 0x800, 72,
- gMonStillFrontPic_Tentacruel, 0x800, 73,
- gMonStillFrontPic_Geodude, 0x800, 74,
- gMonStillFrontPic_Graveler, 0x800, 75,
- gMonStillFrontPic_Golem, 0x800, 76,
- gMonStillFrontPic_Ponyta, 0x800, 77,
- gMonStillFrontPic_Rapidash, 0x800, 78,
- gMonStillFrontPic_Slowpoke, 0x800, 79,
- gMonStillFrontPic_Slowbro, 0x800, 80,
- gMonStillFrontPic_Magnemite, 0x800, 81,
- gMonStillFrontPic_Magneton, 0x800, 82,
- gMonStillFrontPic_Farfetchd, 0x800, 83,
- gMonStillFrontPic_Doduo, 0x800, 84,
- gMonStillFrontPic_Dodrio, 0x800, 85,
- gMonStillFrontPic_Seel, 0x800, 86,
- gMonStillFrontPic_Dewgong, 0x800, 87,
- gMonStillFrontPic_Grimer, 0x800, 88,
- gMonStillFrontPic_Muk, 0x800, 89,
- gMonStillFrontPic_Shellder, 0x800, 90,
- gMonStillFrontPic_Cloyster, 0x800, 91,
- gMonStillFrontPic_Gastly, 0x800, 92,
- gMonStillFrontPic_Haunter, 0x800, 93,
- gMonStillFrontPic_Gengar, 0x800, 94,
- gMonStillFrontPic_Onix, 0x800, 95,
- gMonStillFrontPic_Drowzee, 0x800, 96,
- gMonStillFrontPic_Hypno, 0x800, 97,
- gMonStillFrontPic_Krabby, 0x800, 98,
- gMonStillFrontPic_Kingler, 0x800, 99,
- gMonStillFrontPic_Voltorb, 0x800, 100,
- gMonStillFrontPic_Electrode, 0x800, 101,
- gMonStillFrontPic_Exeggcute, 0x800, 102,
- gMonStillFrontPic_Exeggutor, 0x800, 103,
- gMonStillFrontPic_Cubone, 0x800, 104,
- gMonStillFrontPic_Marowak, 0x800, 105,
- gMonStillFrontPic_Hitmonlee, 0x800, 106,
- gMonStillFrontPic_Hitmonchan, 0x800, 107,
- gMonStillFrontPic_Lickitung, 0x800, 108,
- gMonStillFrontPic_Koffing, 0x800, 109,
- gMonStillFrontPic_Weezing, 0x800, 110,
- gMonStillFrontPic_Rhyhorn, 0x800, 111,
- gMonStillFrontPic_Rhydon, 0x800, 112,
- gMonStillFrontPic_Chansey, 0x800, 113,
- gMonStillFrontPic_Tangela, 0x800, 114,
- gMonStillFrontPic_Kangaskhan, 0x800, 115,
- gMonStillFrontPic_Horsea, 0x800, 116,
- gMonStillFrontPic_Seadra, 0x800, 117,
- gMonStillFrontPic_Goldeen, 0x800, 118,
- gMonStillFrontPic_Seaking, 0x800, 119,
- gMonStillFrontPic_Staryu, 0x800, 120,
- gMonStillFrontPic_Starmie, 0x800, 121,
- gMonStillFrontPic_Mrmime, 0x800, 122,
- gMonStillFrontPic_Scyther, 0x800, 123,
- gMonStillFrontPic_Jynx, 0x800, 124,
- gMonStillFrontPic_Electabuzz, 0x800, 125,
- gMonStillFrontPic_Magmar, 0x800, 126,
- gMonStillFrontPic_Pinsir, 0x800, 127,
- gMonStillFrontPic_Tauros, 0x800, 128,
- gMonStillFrontPic_Magikarp, 0x800, 129,
- gMonStillFrontPic_Gyarados, 0x800, 130,
- gMonStillFrontPic_Lapras, 0x800, 131,
- gMonStillFrontPic_Ditto, 0x800, 132,
- gMonStillFrontPic_Eevee, 0x800, 133,
- gMonStillFrontPic_Vaporeon, 0x800, 134,
- gMonStillFrontPic_Jolteon, 0x800, 135,
- gMonStillFrontPic_Flareon, 0x800, 136,
- gMonStillFrontPic_Porygon, 0x800, 137,
- gMonStillFrontPic_Omanyte, 0x800, 138,
- gMonStillFrontPic_Omastar, 0x800, 139,
- gMonStillFrontPic_Kabuto, 0x800, 140,
- gMonStillFrontPic_Kabutops, 0x800, 141,
- gMonStillFrontPic_Aerodactyl, 0x800, 142,
- gMonStillFrontPic_Snorlax, 0x800, 143,
- gMonStillFrontPic_Articuno, 0x800, 144,
- gMonStillFrontPic_Zapdos, 0x800, 145,
- gMonStillFrontPic_Moltres, 0x800, 146,
- gMonStillFrontPic_Dratini, 0x800, 147,
- gMonStillFrontPic_Dragonair, 0x800, 148,
- gMonStillFrontPic_Dragonite, 0x800, 149,
- gMonStillFrontPic_Mewtwo, 0x800, 150,
- gMonStillFrontPic_Mew, 0x800, 151,
+{
+ STILL_FRONT_PIC(NONE, gMonStillFrontPic_CircledQuestionMark),
+ STILL_FRONT_PIC(BULBASAUR, gMonStillFrontPic_Bulbasaur),
+ STILL_FRONT_PIC(IVYSAUR, gMonStillFrontPic_Ivysaur),
+ STILL_FRONT_PIC(VENUSAUR, gMonStillFrontPic_Venusaur),
+ STILL_FRONT_PIC(CHARMANDER, gMonStillFrontPic_Charmander),
+ STILL_FRONT_PIC(CHARMELEON, gMonStillFrontPic_Charmeleon),
+ STILL_FRONT_PIC(CHARIZARD, gMonStillFrontPic_Charizard),
+ STILL_FRONT_PIC(SQUIRTLE, gMonStillFrontPic_Squirtle),
+ STILL_FRONT_PIC(WARTORTLE, gMonStillFrontPic_Wartortle),
+ STILL_FRONT_PIC(BLASTOISE, gMonStillFrontPic_Blastoise),
+ STILL_FRONT_PIC(CATERPIE, gMonStillFrontPic_Caterpie),
+ STILL_FRONT_PIC(METAPOD, gMonStillFrontPic_Metapod),
+ STILL_FRONT_PIC(BUTTERFREE, gMonStillFrontPic_Butterfree),
+ STILL_FRONT_PIC(WEEDLE, gMonStillFrontPic_Weedle),
+ STILL_FRONT_PIC(KAKUNA, gMonStillFrontPic_Kakuna),
+ STILL_FRONT_PIC(BEEDRILL, gMonStillFrontPic_Beedrill),
+ STILL_FRONT_PIC(PIDGEY, gMonStillFrontPic_Pidgey),
+ STILL_FRONT_PIC(PIDGEOTTO, gMonStillFrontPic_Pidgeotto),
+ STILL_FRONT_PIC(PIDGEOT, gMonStillFrontPic_Pidgeot),
+ STILL_FRONT_PIC(RATTATA, gMonStillFrontPic_Rattata),
+ STILL_FRONT_PIC(RATICATE, gMonStillFrontPic_Raticate),
+ STILL_FRONT_PIC(SPEAROW, gMonStillFrontPic_Spearow),
+ STILL_FRONT_PIC(FEAROW, gMonStillFrontPic_Fearow),
+ STILL_FRONT_PIC(EKANS, gMonStillFrontPic_Ekans),
+ STILL_FRONT_PIC(ARBOK, gMonStillFrontPic_Arbok),
+ STILL_FRONT_PIC(PIKACHU, gMonStillFrontPic_Pikachu),
+ STILL_FRONT_PIC(RAICHU, gMonStillFrontPic_Raichu),
+ STILL_FRONT_PIC(SANDSHREW, gMonStillFrontPic_Sandshrew),
+ STILL_FRONT_PIC(SANDSLASH, gMonStillFrontPic_Sandslash),
+ STILL_FRONT_PIC(NIDORAN_F, gMonStillFrontPic_NidoranF),
+ STILL_FRONT_PIC(NIDORINA, gMonStillFrontPic_Nidorina),
+ STILL_FRONT_PIC(NIDOQUEEN, gMonStillFrontPic_Nidoqueen),
+ STILL_FRONT_PIC(NIDORAN_M, gMonStillFrontPic_NidoranM),
+ STILL_FRONT_PIC(NIDORINO, gMonStillFrontPic_Nidorino),
+ STILL_FRONT_PIC(NIDOKING, gMonStillFrontPic_Nidoking),
+ STILL_FRONT_PIC(CLEFAIRY, gMonStillFrontPic_Clefairy),
+ STILL_FRONT_PIC(CLEFABLE, gMonStillFrontPic_Clefable),
+ STILL_FRONT_PIC(VULPIX, gMonStillFrontPic_Vulpix),
+ STILL_FRONT_PIC(NINETALES, gMonStillFrontPic_Ninetales),
+ STILL_FRONT_PIC(JIGGLYPUFF, gMonStillFrontPic_Jigglypuff),
+ STILL_FRONT_PIC(WIGGLYTUFF, gMonStillFrontPic_Wigglytuff),
+ STILL_FRONT_PIC(ZUBAT, gMonStillFrontPic_Zubat),
+ STILL_FRONT_PIC(GOLBAT, gMonStillFrontPic_Golbat),
+ STILL_FRONT_PIC(ODDISH, gMonStillFrontPic_Oddish),
+ STILL_FRONT_PIC(GLOOM, gMonStillFrontPic_Gloom),
+ STILL_FRONT_PIC(VILEPLUME, gMonStillFrontPic_Vileplume),
+ STILL_FRONT_PIC(PARAS, gMonStillFrontPic_Paras),
+ STILL_FRONT_PIC(PARASECT, gMonStillFrontPic_Parasect),
+ STILL_FRONT_PIC(VENONAT, gMonStillFrontPic_Venonat),
+ STILL_FRONT_PIC(VENOMOTH, gMonStillFrontPic_Venomoth),
+ STILL_FRONT_PIC(DIGLETT, gMonStillFrontPic_Diglett),
+ STILL_FRONT_PIC(DUGTRIO, gMonStillFrontPic_Dugtrio),
+ STILL_FRONT_PIC(MEOWTH, gMonStillFrontPic_Meowth),
+ STILL_FRONT_PIC(PERSIAN, gMonStillFrontPic_Persian),
+ STILL_FRONT_PIC(PSYDUCK, gMonStillFrontPic_Psyduck),
+ STILL_FRONT_PIC(GOLDUCK, gMonStillFrontPic_Golduck),
+ STILL_FRONT_PIC(MANKEY, gMonStillFrontPic_Mankey),
+ STILL_FRONT_PIC(PRIMEAPE, gMonStillFrontPic_Primeape),
+ STILL_FRONT_PIC(GROWLITHE, gMonStillFrontPic_Growlithe),
+ STILL_FRONT_PIC(ARCANINE, gMonStillFrontPic_Arcanine),
+ STILL_FRONT_PIC(POLIWAG, gMonStillFrontPic_Poliwag),
+ STILL_FRONT_PIC(POLIWHIRL, gMonStillFrontPic_Poliwhirl),
+ STILL_FRONT_PIC(POLIWRATH, gMonStillFrontPic_Poliwrath),
+ STILL_FRONT_PIC(ABRA, gMonStillFrontPic_Abra),
+ STILL_FRONT_PIC(KADABRA, gMonStillFrontPic_Kadabra),
+ STILL_FRONT_PIC(ALAKAZAM, gMonStillFrontPic_Alakazam),
+ STILL_FRONT_PIC(MACHOP, gMonStillFrontPic_Machop),
+ STILL_FRONT_PIC(MACHOKE, gMonStillFrontPic_Machoke),
+ STILL_FRONT_PIC(MACHAMP, gMonStillFrontPic_Machamp),
+ STILL_FRONT_PIC(BELLSPROUT, gMonStillFrontPic_Bellsprout),
+ STILL_FRONT_PIC(WEEPINBELL, gMonStillFrontPic_Weepinbell),
+ STILL_FRONT_PIC(VICTREEBEL, gMonStillFrontPic_Victreebel),
+ STILL_FRONT_PIC(TENTACOOL, gMonStillFrontPic_Tentacool),
+ STILL_FRONT_PIC(TENTACRUEL, gMonStillFrontPic_Tentacruel),
+ STILL_FRONT_PIC(GEODUDE, gMonStillFrontPic_Geodude),
+ STILL_FRONT_PIC(GRAVELER, gMonStillFrontPic_Graveler),
+ STILL_FRONT_PIC(GOLEM, gMonStillFrontPic_Golem),
+ STILL_FRONT_PIC(PONYTA, gMonStillFrontPic_Ponyta),
+ STILL_FRONT_PIC(RAPIDASH, gMonStillFrontPic_Rapidash),
+ STILL_FRONT_PIC(SLOWPOKE, gMonStillFrontPic_Slowpoke),
+ STILL_FRONT_PIC(SLOWBRO, gMonStillFrontPic_Slowbro),
+ STILL_FRONT_PIC(MAGNEMITE, gMonStillFrontPic_Magnemite),
+ STILL_FRONT_PIC(MAGNETON, gMonStillFrontPic_Magneton),
+ STILL_FRONT_PIC(FARFETCHD, gMonStillFrontPic_Farfetchd),
+ STILL_FRONT_PIC(DODUO, gMonStillFrontPic_Doduo),
+ STILL_FRONT_PIC(DODRIO, gMonStillFrontPic_Dodrio),
+ STILL_FRONT_PIC(SEEL, gMonStillFrontPic_Seel),
+ STILL_FRONT_PIC(DEWGONG, gMonStillFrontPic_Dewgong),
+ STILL_FRONT_PIC(GRIMER, gMonStillFrontPic_Grimer),
+ STILL_FRONT_PIC(MUK, gMonStillFrontPic_Muk),
+ STILL_FRONT_PIC(SHELLDER, gMonStillFrontPic_Shellder),
+ STILL_FRONT_PIC(CLOYSTER, gMonStillFrontPic_Cloyster),
+ STILL_FRONT_PIC(GASTLY, gMonStillFrontPic_Gastly),
+ STILL_FRONT_PIC(HAUNTER, gMonStillFrontPic_Haunter),
+ STILL_FRONT_PIC(GENGAR, gMonStillFrontPic_Gengar),
+ STILL_FRONT_PIC(ONIX, gMonStillFrontPic_Onix),
+ STILL_FRONT_PIC(DROWZEE, gMonStillFrontPic_Drowzee),
+ STILL_FRONT_PIC(HYPNO, gMonStillFrontPic_Hypno),
+ STILL_FRONT_PIC(KRABBY, gMonStillFrontPic_Krabby),
+ STILL_FRONT_PIC(KINGLER, gMonStillFrontPic_Kingler),
+ STILL_FRONT_PIC(VOLTORB, gMonStillFrontPic_Voltorb),
+ STILL_FRONT_PIC(ELECTRODE, gMonStillFrontPic_Electrode),
+ STILL_FRONT_PIC(EXEGGCUTE, gMonStillFrontPic_Exeggcute),
+ STILL_FRONT_PIC(EXEGGUTOR, gMonStillFrontPic_Exeggutor),
+ STILL_FRONT_PIC(CUBONE, gMonStillFrontPic_Cubone),
+ STILL_FRONT_PIC(MAROWAK, gMonStillFrontPic_Marowak),
+ STILL_FRONT_PIC(HITMONLEE, gMonStillFrontPic_Hitmonlee),
+ STILL_FRONT_PIC(HITMONCHAN, gMonStillFrontPic_Hitmonchan),
+ STILL_FRONT_PIC(LICKITUNG, gMonStillFrontPic_Lickitung),
+ STILL_FRONT_PIC(KOFFING, gMonStillFrontPic_Koffing),
+ STILL_FRONT_PIC(WEEZING, gMonStillFrontPic_Weezing),
+ STILL_FRONT_PIC(RHYHORN, gMonStillFrontPic_Rhyhorn),
+ STILL_FRONT_PIC(RHYDON, gMonStillFrontPic_Rhydon),
+ STILL_FRONT_PIC(CHANSEY, gMonStillFrontPic_Chansey),
+ STILL_FRONT_PIC(TANGELA, gMonStillFrontPic_Tangela),
+ STILL_FRONT_PIC(KANGASKHAN, gMonStillFrontPic_Kangaskhan),
+ STILL_FRONT_PIC(HORSEA, gMonStillFrontPic_Horsea),
+ STILL_FRONT_PIC(SEADRA, gMonStillFrontPic_Seadra),
+ STILL_FRONT_PIC(GOLDEEN, gMonStillFrontPic_Goldeen),
+ STILL_FRONT_PIC(SEAKING, gMonStillFrontPic_Seaking),
+ STILL_FRONT_PIC(STARYU, gMonStillFrontPic_Staryu),
+ STILL_FRONT_PIC(STARMIE, gMonStillFrontPic_Starmie),
+ STILL_FRONT_PIC(MR_MIME, gMonStillFrontPic_Mrmime),
+ STILL_FRONT_PIC(SCYTHER, gMonStillFrontPic_Scyther),
+ STILL_FRONT_PIC(JYNX, gMonStillFrontPic_Jynx),
+ STILL_FRONT_PIC(ELECTABUZZ, gMonStillFrontPic_Electabuzz),
+ STILL_FRONT_PIC(MAGMAR, gMonStillFrontPic_Magmar),
+ STILL_FRONT_PIC(PINSIR, gMonStillFrontPic_Pinsir),
+ STILL_FRONT_PIC(TAUROS, gMonStillFrontPic_Tauros),
+ STILL_FRONT_PIC(MAGIKARP, gMonStillFrontPic_Magikarp),
+ STILL_FRONT_PIC(GYARADOS, gMonStillFrontPic_Gyarados),
+ STILL_FRONT_PIC(LAPRAS, gMonStillFrontPic_Lapras),
+ STILL_FRONT_PIC(DITTO, gMonStillFrontPic_Ditto),
+ STILL_FRONT_PIC(EEVEE, gMonStillFrontPic_Eevee),
+ STILL_FRONT_PIC(VAPOREON, gMonStillFrontPic_Vaporeon),
+ STILL_FRONT_PIC(JOLTEON, gMonStillFrontPic_Jolteon),
+ STILL_FRONT_PIC(FLAREON, gMonStillFrontPic_Flareon),
+ STILL_FRONT_PIC(PORYGON, gMonStillFrontPic_Porygon),
+ STILL_FRONT_PIC(OMANYTE, gMonStillFrontPic_Omanyte),
+ STILL_FRONT_PIC(OMASTAR, gMonStillFrontPic_Omastar),
+ STILL_FRONT_PIC(KABUTO, gMonStillFrontPic_Kabuto),
+ STILL_FRONT_PIC(KABUTOPS, gMonStillFrontPic_Kabutops),
+ STILL_FRONT_PIC(AERODACTYL, gMonStillFrontPic_Aerodactyl),
+ STILL_FRONT_PIC(SNORLAX, gMonStillFrontPic_Snorlax),
+ STILL_FRONT_PIC(ARTICUNO, gMonStillFrontPic_Articuno),
+ STILL_FRONT_PIC(ZAPDOS, gMonStillFrontPic_Zapdos),
+ STILL_FRONT_PIC(MOLTRES, gMonStillFrontPic_Moltres),
+ STILL_FRONT_PIC(DRATINI, gMonStillFrontPic_Dratini),
+ STILL_FRONT_PIC(DRAGONAIR, gMonStillFrontPic_Dragonair),
+ STILL_FRONT_PIC(DRAGONITE, gMonStillFrontPic_Dragonite),
+ STILL_FRONT_PIC(MEWTWO, gMonStillFrontPic_Mewtwo),
+ STILL_FRONT_PIC(MEW, gMonStillFrontPic_Mew),
// Gen II
- gMonStillFrontPic_Chikorita, 0x800, 152,
- gMonStillFrontPic_Bayleef, 0x800, 153,
- gMonStillFrontPic_Meganium, 0x800, 154,
- gMonStillFrontPic_Cyndaquil, 0x800, 155,
- gMonStillFrontPic_Quilava, 0x800, 156,
- gMonStillFrontPic_Typhlosion, 0x800, 157,
- gMonStillFrontPic_Totodile, 0x800, 158,
- gMonStillFrontPic_Croconaw, 0x800, 159,
- gMonStillFrontPic_Feraligatr, 0x800, 160,
- gMonStillFrontPic_Sentret, 0x800, 161,
- gMonStillFrontPic_Furret, 0x800, 162,
- gMonStillFrontPic_Hoothoot, 0x800, 163,
- gMonStillFrontPic_Noctowl, 0x800, 164,
- gMonStillFrontPic_Ledyba, 0x800, 165,
- gMonStillFrontPic_Ledian, 0x800, 166,
- gMonStillFrontPic_Spinarak, 0x800, 167,
- gMonStillFrontPic_Ariados, 0x800, 168,
- gMonStillFrontPic_Crobat, 0x800, 169,
- gMonStillFrontPic_Chinchou, 0x800, 170,
- gMonStillFrontPic_Lanturn, 0x800, 171,
- gMonStillFrontPic_Pichu, 0x800, 172,
- gMonStillFrontPic_Cleffa, 0x800, 173,
- gMonStillFrontPic_Igglybuff, 0x800, 174,
- gMonStillFrontPic_Togepi, 0x800, 175,
- gMonStillFrontPic_Togetic, 0x800, 176,
- gMonStillFrontPic_Natu, 0x800, 177,
- gMonStillFrontPic_Xatu, 0x800, 178,
- gMonStillFrontPic_Mareep, 0x800, 179,
- gMonStillFrontPic_Flaaffy, 0x800, 180,
- gMonStillFrontPic_Ampharos, 0x800, 181,
- gMonStillFrontPic_Bellossom, 0x800, 182,
- gMonStillFrontPic_Marill, 0x800, 183,
- gMonStillFrontPic_Azumarill, 0x800, 184,
- gMonStillFrontPic_Sudowoodo, 0x800, 185,
- gMonStillFrontPic_Politoed, 0x800, 186,
- gMonStillFrontPic_Hoppip, 0x800, 187,
- gMonStillFrontPic_Skiploom, 0x800, 188,
- gMonStillFrontPic_Jumpluff, 0x800, 189,
- gMonStillFrontPic_Aipom, 0x800, 190,
- gMonStillFrontPic_Sunkern, 0x800, 191,
- gMonStillFrontPic_Sunflora, 0x800, 192,
- gMonStillFrontPic_Yanma, 0x800, 193,
- gMonStillFrontPic_Wooper, 0x800, 194,
- gMonStillFrontPic_Quagsire, 0x800, 195,
- gMonStillFrontPic_Espeon, 0x800, 196,
- gMonStillFrontPic_Umbreon, 0x800, 197,
- gMonStillFrontPic_Murkrow, 0x800, 198,
- gMonStillFrontPic_Slowking, 0x800, 199,
- gMonStillFrontPic_Misdreavus, 0x800, 200,
- gMonStillFrontPic_UnownA, 0x800, 201,
- gMonStillFrontPic_Wobbuffet, 0x800, 202,
- gMonStillFrontPic_Girafarig, 0x800, 203,
- gMonStillFrontPic_Pineco, 0x800, 204,
- gMonStillFrontPic_Forretress, 0x800, 205,
- gMonStillFrontPic_Dunsparce, 0x800, 206,
- gMonStillFrontPic_Gligar, 0x800, 207,
- gMonStillFrontPic_Steelix, 0x800, 208,
- gMonStillFrontPic_Snubbull, 0x800, 209,
- gMonStillFrontPic_Granbull, 0x800, 210,
- gMonStillFrontPic_Qwilfish, 0x800, 211,
- gMonStillFrontPic_Scizor, 0x800, 212,
- gMonStillFrontPic_Shuckle, 0x800, 213,
- gMonStillFrontPic_Heracross, 0x800, 214,
- gMonStillFrontPic_Sneasel, 0x800, 215,
- gMonStillFrontPic_Teddiursa, 0x800, 216,
- gMonStillFrontPic_Ursaring, 0x800, 217,
- gMonStillFrontPic_Slugma, 0x800, 218,
- gMonStillFrontPic_Magcargo, 0x800, 219,
- gMonStillFrontPic_Swinub, 0x800, 220,
- gMonStillFrontPic_Piloswine, 0x800, 221,
- gMonStillFrontPic_Corsola, 0x800, 222,
- gMonStillFrontPic_Remoraid, 0x800, 223,
- gMonStillFrontPic_Octillery, 0x800, 224,
- gMonStillFrontPic_Delibird, 0x800, 225,
- gMonStillFrontPic_Mantine, 0x800, 226,
- gMonStillFrontPic_Skarmory, 0x800, 227,
- gMonStillFrontPic_Houndour, 0x800, 228,
- gMonStillFrontPic_Houndoom, 0x800, 229,
- gMonStillFrontPic_Kingdra, 0x800, 230,
- gMonStillFrontPic_Phanpy, 0x800, 231,
- gMonStillFrontPic_Donphan, 0x800, 232,
- gMonStillFrontPic_Porygon2, 0x800, 233,
- gMonStillFrontPic_Stantler, 0x800, 234,
- gMonStillFrontPic_Smeargle, 0x800, 235,
- gMonStillFrontPic_Tyrogue, 0x800, 236,
- gMonStillFrontPic_Hitmontop, 0x800, 237,
- gMonStillFrontPic_Smoochum, 0x800, 238,
- gMonStillFrontPic_Elekid, 0x800, 239,
- gMonStillFrontPic_Magby, 0x800, 240,
- gMonStillFrontPic_Miltank, 0x800, 241,
- gMonStillFrontPic_Blissey, 0x800, 242,
- gMonStillFrontPic_Raikou, 0x800, 243,
- gMonStillFrontPic_Entei, 0x800, 244,
- gMonStillFrontPic_Suicune, 0x800, 245,
- gMonStillFrontPic_Larvitar, 0x800, 246,
- gMonStillFrontPic_Pupitar, 0x800, 247,
- gMonStillFrontPic_Tyranitar, 0x800, 248,
- gMonStillFrontPic_Lugia, 0x800, 249,
- gMonStillFrontPic_HoOh, 0x800, 250,
- gMonStillFrontPic_Celebi, 0x800, 251,
+ STILL_FRONT_PIC(CHIKORITA, gMonStillFrontPic_Chikorita),
+ STILL_FRONT_PIC(BAYLEEF, gMonStillFrontPic_Bayleef),
+ STILL_FRONT_PIC(MEGANIUM, gMonStillFrontPic_Meganium),
+ STILL_FRONT_PIC(CYNDAQUIL, gMonStillFrontPic_Cyndaquil),
+ STILL_FRONT_PIC(QUILAVA, gMonStillFrontPic_Quilava),
+ STILL_FRONT_PIC(TYPHLOSION, gMonStillFrontPic_Typhlosion),
+ STILL_FRONT_PIC(TOTODILE, gMonStillFrontPic_Totodile),
+ STILL_FRONT_PIC(CROCONAW, gMonStillFrontPic_Croconaw),
+ STILL_FRONT_PIC(FERALIGATR, gMonStillFrontPic_Feraligatr),
+ STILL_FRONT_PIC(SENTRET, gMonStillFrontPic_Sentret),
+ STILL_FRONT_PIC(FURRET, gMonStillFrontPic_Furret),
+ STILL_FRONT_PIC(HOOTHOOT, gMonStillFrontPic_Hoothoot),
+ STILL_FRONT_PIC(NOCTOWL, gMonStillFrontPic_Noctowl),
+ STILL_FRONT_PIC(LEDYBA, gMonStillFrontPic_Ledyba),
+ STILL_FRONT_PIC(LEDIAN, gMonStillFrontPic_Ledian),
+ STILL_FRONT_PIC(SPINARAK, gMonStillFrontPic_Spinarak),
+ STILL_FRONT_PIC(ARIADOS, gMonStillFrontPic_Ariados),
+ STILL_FRONT_PIC(CROBAT, gMonStillFrontPic_Crobat),
+ STILL_FRONT_PIC(CHINCHOU, gMonStillFrontPic_Chinchou),
+ STILL_FRONT_PIC(LANTURN, gMonStillFrontPic_Lanturn),
+ STILL_FRONT_PIC(PICHU, gMonStillFrontPic_Pichu),
+ STILL_FRONT_PIC(CLEFFA, gMonStillFrontPic_Cleffa),
+ STILL_FRONT_PIC(IGGLYBUFF, gMonStillFrontPic_Igglybuff),
+ STILL_FRONT_PIC(TOGEPI, gMonStillFrontPic_Togepi),
+ STILL_FRONT_PIC(TOGETIC, gMonStillFrontPic_Togetic),
+ STILL_FRONT_PIC(NATU, gMonStillFrontPic_Natu),
+ STILL_FRONT_PIC(XATU, gMonStillFrontPic_Xatu),
+ STILL_FRONT_PIC(MAREEP, gMonStillFrontPic_Mareep),
+ STILL_FRONT_PIC(FLAAFFY, gMonStillFrontPic_Flaaffy),
+ STILL_FRONT_PIC(AMPHAROS, gMonStillFrontPic_Ampharos),
+ STILL_FRONT_PIC(BELLOSSOM, gMonStillFrontPic_Bellossom),
+ STILL_FRONT_PIC(MARILL, gMonStillFrontPic_Marill),
+ STILL_FRONT_PIC(AZUMARILL, gMonStillFrontPic_Azumarill),
+ STILL_FRONT_PIC(SUDOWOODO, gMonStillFrontPic_Sudowoodo),
+ STILL_FRONT_PIC(POLITOED, gMonStillFrontPic_Politoed),
+ STILL_FRONT_PIC(HOPPIP, gMonStillFrontPic_Hoppip),
+ STILL_FRONT_PIC(SKIPLOOM, gMonStillFrontPic_Skiploom),
+ STILL_FRONT_PIC(JUMPLUFF, gMonStillFrontPic_Jumpluff),
+ STILL_FRONT_PIC(AIPOM, gMonStillFrontPic_Aipom),
+ STILL_FRONT_PIC(SUNKERN, gMonStillFrontPic_Sunkern),
+ STILL_FRONT_PIC(SUNFLORA, gMonStillFrontPic_Sunflora),
+ STILL_FRONT_PIC(YANMA, gMonStillFrontPic_Yanma),
+ STILL_FRONT_PIC(WOOPER, gMonStillFrontPic_Wooper),
+ STILL_FRONT_PIC(QUAGSIRE, gMonStillFrontPic_Quagsire),
+ STILL_FRONT_PIC(ESPEON, gMonStillFrontPic_Espeon),
+ STILL_FRONT_PIC(UMBREON, gMonStillFrontPic_Umbreon),
+ STILL_FRONT_PIC(MURKROW, gMonStillFrontPic_Murkrow),
+ STILL_FRONT_PIC(SLOWKING, gMonStillFrontPic_Slowking),
+ STILL_FRONT_PIC(MISDREAVUS, gMonStillFrontPic_Misdreavus),
+ STILL_FRONT_PIC(UNOWN, gMonStillFrontPic_UnownA),
+ STILL_FRONT_PIC(WOBBUFFET, gMonStillFrontPic_Wobbuffet),
+ STILL_FRONT_PIC(GIRAFARIG, gMonStillFrontPic_Girafarig),
+ STILL_FRONT_PIC(PINECO, gMonStillFrontPic_Pineco),
+ STILL_FRONT_PIC(FORRETRESS, gMonStillFrontPic_Forretress),
+ STILL_FRONT_PIC(DUNSPARCE, gMonStillFrontPic_Dunsparce),
+ STILL_FRONT_PIC(GLIGAR, gMonStillFrontPic_Gligar),
+ STILL_FRONT_PIC(STEELIX, gMonStillFrontPic_Steelix),
+ STILL_FRONT_PIC(SNUBBULL, gMonStillFrontPic_Snubbull),
+ STILL_FRONT_PIC(GRANBULL, gMonStillFrontPic_Granbull),
+ STILL_FRONT_PIC(QWILFISH, gMonStillFrontPic_Qwilfish),
+ STILL_FRONT_PIC(SCIZOR, gMonStillFrontPic_Scizor),
+ STILL_FRONT_PIC(SHUCKLE, gMonStillFrontPic_Shuckle),
+ STILL_FRONT_PIC(HERACROSS, gMonStillFrontPic_Heracross),
+ STILL_FRONT_PIC(SNEASEL, gMonStillFrontPic_Sneasel),
+ STILL_FRONT_PIC(TEDDIURSA, gMonStillFrontPic_Teddiursa),
+ STILL_FRONT_PIC(URSARING, gMonStillFrontPic_Ursaring),
+ STILL_FRONT_PIC(SLUGMA, gMonStillFrontPic_Slugma),
+ STILL_FRONT_PIC(MAGCARGO, gMonStillFrontPic_Magcargo),
+ STILL_FRONT_PIC(SWINUB, gMonStillFrontPic_Swinub),
+ STILL_FRONT_PIC(PILOSWINE, gMonStillFrontPic_Piloswine),
+ STILL_FRONT_PIC(CORSOLA, gMonStillFrontPic_Corsola),
+ STILL_FRONT_PIC(REMORAID, gMonStillFrontPic_Remoraid),
+ STILL_FRONT_PIC(OCTILLERY, gMonStillFrontPic_Octillery),
+ STILL_FRONT_PIC(DELIBIRD, gMonStillFrontPic_Delibird),
+ STILL_FRONT_PIC(MANTINE, gMonStillFrontPic_Mantine),
+ STILL_FRONT_PIC(SKARMORY, gMonStillFrontPic_Skarmory),
+ STILL_FRONT_PIC(HOUNDOUR, gMonStillFrontPic_Houndour),
+ STILL_FRONT_PIC(HOUNDOOM, gMonStillFrontPic_Houndoom),
+ STILL_FRONT_PIC(KINGDRA, gMonStillFrontPic_Kingdra),
+ STILL_FRONT_PIC(PHANPY, gMonStillFrontPic_Phanpy),
+ STILL_FRONT_PIC(DONPHAN, gMonStillFrontPic_Donphan),
+ STILL_FRONT_PIC(PORYGON2, gMonStillFrontPic_Porygon2),
+ STILL_FRONT_PIC(STANTLER, gMonStillFrontPic_Stantler),
+ STILL_FRONT_PIC(SMEARGLE, gMonStillFrontPic_Smeargle),
+ STILL_FRONT_PIC(TYROGUE, gMonStillFrontPic_Tyrogue),
+ STILL_FRONT_PIC(HITMONTOP, gMonStillFrontPic_Hitmontop),
+ STILL_FRONT_PIC(SMOOCHUM, gMonStillFrontPic_Smoochum),
+ STILL_FRONT_PIC(ELEKID, gMonStillFrontPic_Elekid),
+ STILL_FRONT_PIC(MAGBY, gMonStillFrontPic_Magby),
+ STILL_FRONT_PIC(MILTANK, gMonStillFrontPic_Miltank),
+ STILL_FRONT_PIC(BLISSEY, gMonStillFrontPic_Blissey),
+ STILL_FRONT_PIC(RAIKOU, gMonStillFrontPic_Raikou),
+ STILL_FRONT_PIC(ENTEI, gMonStillFrontPic_Entei),
+ STILL_FRONT_PIC(SUICUNE, gMonStillFrontPic_Suicune),
+ STILL_FRONT_PIC(LARVITAR, gMonStillFrontPic_Larvitar),
+ STILL_FRONT_PIC(PUPITAR, gMonStillFrontPic_Pupitar),
+ STILL_FRONT_PIC(TYRANITAR, gMonStillFrontPic_Tyranitar),
+ STILL_FRONT_PIC(LUGIA, gMonStillFrontPic_Lugia),
+ STILL_FRONT_PIC(HO_OH, gMonStillFrontPic_HoOh),
+ STILL_FRONT_PIC(CELEBI, gMonStillFrontPic_Celebi),
// Empty slots
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 252,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 253,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 254,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 255,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 256,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 257,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 258,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 259,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 260,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 261,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 262,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 263,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 264,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 265,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 266,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 267,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 268,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 269,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 270,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 271,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 272,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 273,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 274,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 275,
- gMonStillFrontPic_DoubleQuestionMark, 0x800, 276,
+ STILL_FRONT_PIC(OLD_UNOWN_B, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_C, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_D, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_E, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_F, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_G, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_H, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_I, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_J, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_K, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_L, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_M, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_N, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_O, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_P, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_Q, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_R, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_S, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_T, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_U, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_V, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_W, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_X, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_Y, gMonStillFrontPic_DoubleQuestionMark),
+ STILL_FRONT_PIC(OLD_UNOWN_Z, gMonStillFrontPic_DoubleQuestionMark),
// Gen III
- gMonStillFrontPic_Treecko, 0x800, 277,
- gMonStillFrontPic_Grovyle, 0x800, 278,
- gMonStillFrontPic_Sceptile, 0x800, 279,
- gMonStillFrontPic_Torchic, 0x800, 280,
- gMonStillFrontPic_Combusken, 0x800, 281,
- gMonStillFrontPic_Blaziken, 0x800, 282,
- gMonStillFrontPic_Mudkip, 0x800, 283,
- gMonStillFrontPic_Marshtomp, 0x800, 284,
- gMonStillFrontPic_Swampert, 0x800, 285,
- gMonStillFrontPic_Poochyena, 0x800, 286,
- gMonStillFrontPic_Mightyena, 0x800, 287,
- gMonStillFrontPic_Zigzagoon, 0x800, 288,
- gMonStillFrontPic_Linoone, 0x800, 289,
- gMonStillFrontPic_Wurmple, 0x800, 290,
- gMonStillFrontPic_Silcoon, 0x800, 291,
- gMonStillFrontPic_Beautifly, 0x800, 292,
- gMonStillFrontPic_Cascoon, 0x800, 293,
- gMonStillFrontPic_Dustox, 0x800, 294,
- gMonStillFrontPic_Lotad, 0x800, 295,
- gMonStillFrontPic_Lombre, 0x800, 296,
- gMonStillFrontPic_Ludicolo, 0x800, 297,
- gMonStillFrontPic_Seedot, 0x800, 298,
- gMonStillFrontPic_Nuzleaf, 0x800, 299,
- gMonStillFrontPic_Shiftry, 0x800, 300,
- gMonStillFrontPic_Nincada, 0x800, 301,
- gMonStillFrontPic_Ninjask, 0x800, 302,
- gMonStillFrontPic_Shedinja, 0x800, 303,
- gMonStillFrontPic_Taillow, 0x800, 304,
- gMonStillFrontPic_Swellow, 0x800, 305,
- gMonStillFrontPic_Shroomish, 0x800, 306,
- gMonStillFrontPic_Breloom, 0x800, 307,
- gMonStillFrontPic_Spinda, 0x800, 308,
- gMonStillFrontPic_Wingull, 0x800, 309,
- gMonStillFrontPic_Pelipper, 0x800, 310,
- gMonStillFrontPic_Surskit, 0x800, 311,
- gMonStillFrontPic_Masquerain, 0x800, 312,
- gMonStillFrontPic_Wailmer, 0x800, 313,
- gMonStillFrontPic_Wailord, 0x800, 314,
- gMonStillFrontPic_Skitty, 0x800, 315,
- gMonStillFrontPic_Delcatty, 0x800, 316,
- gMonStillFrontPic_Kecleon, 0x800, 317,
- gMonStillFrontPic_Baltoy, 0x800, 318,
- gMonStillFrontPic_Claydol, 0x800, 319,
- gMonStillFrontPic_Nosepass, 0x800, 320,
- gMonStillFrontPic_Torkoal, 0x800, 321,
- gMonStillFrontPic_Sableye, 0x800, 322,
- gMonStillFrontPic_Barboach, 0x800, 323,
- gMonStillFrontPic_Whiscash, 0x800, 324,
- gMonStillFrontPic_Luvdisc, 0x800, 325,
- gMonStillFrontPic_Corphish, 0x800, 326,
- gMonStillFrontPic_Crawdaunt, 0x800, 327,
- gMonStillFrontPic_Feebas, 0x800, 328,
- gMonStillFrontPic_Milotic, 0x800, 329,
- gMonStillFrontPic_Carvanha, 0x800, 330,
- gMonStillFrontPic_Sharpedo, 0x800, 331,
- gMonStillFrontPic_Trapinch, 0x800, 332,
- gMonStillFrontPic_Vibrava, 0x800, 333,
- gMonStillFrontPic_Flygon, 0x800, 334,
- gMonStillFrontPic_Makuhita, 0x800, 335,
- gMonStillFrontPic_Hariyama, 0x800, 336,
- gMonStillFrontPic_Electrike, 0x800, 337,
- gMonStillFrontPic_Manectric, 0x800, 338,
- gMonStillFrontPic_Numel, 0x800, 339,
- gMonStillFrontPic_Camerupt, 0x800, 340,
- gMonStillFrontPic_Spheal, 0x800, 341,
- gMonStillFrontPic_Sealeo, 0x800, 342,
- gMonStillFrontPic_Walrein, 0x800, 343,
- gMonStillFrontPic_Cacnea, 0x800, 344,
- gMonStillFrontPic_Cacturne, 0x800, 345,
- gMonStillFrontPic_Snorunt, 0x800, 346,
- gMonStillFrontPic_Glalie, 0x800, 347,
- gMonStillFrontPic_Lunatone, 0x800, 348,
- gMonStillFrontPic_Solrock, 0x800, 349,
- gMonStillFrontPic_Azurill, 0x800, 350,
- gMonStillFrontPic_Spoink, 0x800, 351,
- gMonStillFrontPic_Grumpig, 0x800, 352,
- gMonStillFrontPic_Plusle, 0x800, 353,
- gMonStillFrontPic_Minun, 0x800, 354,
- gMonStillFrontPic_Mawile, 0x800, 355,
- gMonStillFrontPic_Meditite, 0x800, 356,
- gMonStillFrontPic_Medicham, 0x800, 357,
- gMonStillFrontPic_Swablu, 0x800, 358,
- gMonStillFrontPic_Altaria, 0x800, 359,
- gMonStillFrontPic_Wynaut, 0x800, 360,
- gMonStillFrontPic_Duskull, 0x800, 361,
- gMonStillFrontPic_Dusclops, 0x800, 362,
- gMonStillFrontPic_Roselia, 0x800, 363,
- gMonStillFrontPic_Slakoth, 0x800, 364,
- gMonStillFrontPic_Vigoroth, 0x800, 365,
- gMonStillFrontPic_Slaking, 0x800, 366,
- gMonStillFrontPic_Gulpin, 0x800, 367,
- gMonStillFrontPic_Swalot, 0x800, 368,
- gMonStillFrontPic_Tropius, 0x800, 369,
- gMonStillFrontPic_Whismur, 0x800, 370,
- gMonStillFrontPic_Loudred, 0x800, 371,
- gMonStillFrontPic_Exploud, 0x800, 372,
- gMonStillFrontPic_Clamperl, 0x800, 373,
- gMonStillFrontPic_Huntail, 0x800, 374,
- gMonStillFrontPic_Gorebyss, 0x800, 375,
- gMonStillFrontPic_Absol, 0x800, 376,
- gMonStillFrontPic_Shuppet, 0x800, 377,
- gMonStillFrontPic_Banette, 0x800, 378,
- gMonStillFrontPic_Seviper, 0x800, 379,
- gMonStillFrontPic_Zangoose, 0x800, 380,
- gMonStillFrontPic_Relicanth, 0x800, 381,
- gMonStillFrontPic_Aron, 0x800, 382,
- gMonStillFrontPic_Lairon, 0x800, 383,
- gMonStillFrontPic_Aggron, 0x800, 384,
- gMonStillFrontPic_Castform, 0x800, 385,
- gMonStillFrontPic_Volbeat, 0x800, 386,
- gMonStillFrontPic_Illumise, 0x800, 387,
- gMonStillFrontPic_Lileep, 0x800, 388,
- gMonStillFrontPic_Cradily, 0x800, 389,
- gMonStillFrontPic_Anorith, 0x800, 390,
- gMonStillFrontPic_Armaldo, 0x800, 391,
- gMonStillFrontPic_Ralts, 0x800, 392,
- gMonStillFrontPic_Kirlia, 0x800, 393,
- gMonStillFrontPic_Gardevoir, 0x800, 394,
- gMonStillFrontPic_Bagon, 0x800, 395,
- gMonStillFrontPic_Shelgon, 0x800, 396,
- gMonStillFrontPic_Salamence, 0x800, 397,
- gMonStillFrontPic_Beldum, 0x800, 398,
- gMonStillFrontPic_Metang, 0x800, 399,
- gMonStillFrontPic_Metagross, 0x800, 400,
- gMonStillFrontPic_Regirock, 0x800, 401,
- gMonStillFrontPic_Regice, 0x800, 402,
- gMonStillFrontPic_Registeel, 0x800, 403,
- gMonStillFrontPic_Kyogre, 0x800, 404,
- gMonStillFrontPic_Groudon, 0x800, 405,
- gMonStillFrontPic_Rayquaza, 0x800, 406,
- gMonStillFrontPic_Latias, 0x800, 407,
- gMonStillFrontPic_Latios, 0x800, 408,
- gMonStillFrontPic_Jirachi, 0x800, 409,
- gMonStillFrontPic_Deoxys, 0x800, 410,
- gMonStillFrontPic_Chimecho, 0x800, 411,
- gMonStillFrontPic_Egg, 0x800, 412,
- gMonStillFrontPic_UnownB, 0x800, 413,
- gMonStillFrontPic_UnownC, 0x800, 414,
- gMonStillFrontPic_UnownD, 0x800, 415,
- gMonStillFrontPic_UnownE, 0x800, 416,
- gMonStillFrontPic_UnownF, 0x800, 417,
- gMonStillFrontPic_UnownG, 0x800, 418,
- gMonStillFrontPic_UnownH, 0x800, 419,
- gMonStillFrontPic_UnownI, 0x800, 420,
- gMonStillFrontPic_UnownJ, 0x800, 421,
- gMonStillFrontPic_UnownK, 0x800, 422,
- gMonStillFrontPic_UnownL, 0x800, 423,
- gMonStillFrontPic_UnownM, 0x800, 424,
- gMonStillFrontPic_UnownN, 0x800, 425,
- gMonStillFrontPic_UnownO, 0x800, 426,
- gMonStillFrontPic_UnownP, 0x800, 427,
- gMonStillFrontPic_UnownQ, 0x800, 428,
- gMonStillFrontPic_UnownR, 0x800, 429,
- gMonStillFrontPic_UnownS, 0x800, 430,
- gMonStillFrontPic_UnownT, 0x800, 431,
- gMonStillFrontPic_UnownU, 0x800, 432,
- gMonStillFrontPic_UnownV, 0x800, 433,
- gMonStillFrontPic_UnownW, 0x800, 434,
- gMonStillFrontPic_UnownX, 0x800, 435,
- gMonStillFrontPic_UnownY, 0x800, 436,
- gMonStillFrontPic_UnownZ, 0x800, 437,
- gMonStillFrontPic_UnownExclamationMark, 0x800, 438,
- gMonStillFrontPic_UnownQuestionMark, 0x800, 439,
+ STILL_FRONT_PIC(TREECKO, gMonStillFrontPic_Treecko),
+ STILL_FRONT_PIC(GROVYLE, gMonStillFrontPic_Grovyle),
+ STILL_FRONT_PIC(SCEPTILE, gMonStillFrontPic_Sceptile),
+ STILL_FRONT_PIC(TORCHIC, gMonStillFrontPic_Torchic),
+ STILL_FRONT_PIC(COMBUSKEN, gMonStillFrontPic_Combusken),
+ STILL_FRONT_PIC(BLAZIKEN, gMonStillFrontPic_Blaziken),
+ STILL_FRONT_PIC(MUDKIP, gMonStillFrontPic_Mudkip),
+ STILL_FRONT_PIC(MARSHTOMP, gMonStillFrontPic_Marshtomp),
+ STILL_FRONT_PIC(SWAMPERT, gMonStillFrontPic_Swampert),
+ STILL_FRONT_PIC(POOCHYENA, gMonStillFrontPic_Poochyena),
+ STILL_FRONT_PIC(MIGHTYENA, gMonStillFrontPic_Mightyena),
+ STILL_FRONT_PIC(ZIGZAGOON, gMonStillFrontPic_Zigzagoon),
+ STILL_FRONT_PIC(LINOONE, gMonStillFrontPic_Linoone),
+ STILL_FRONT_PIC(WURMPLE, gMonStillFrontPic_Wurmple),
+ STILL_FRONT_PIC(SILCOON, gMonStillFrontPic_Silcoon),
+ STILL_FRONT_PIC(BEAUTIFLY, gMonStillFrontPic_Beautifly),
+ STILL_FRONT_PIC(CASCOON, gMonStillFrontPic_Cascoon),
+ STILL_FRONT_PIC(DUSTOX, gMonStillFrontPic_Dustox),
+ STILL_FRONT_PIC(LOTAD, gMonStillFrontPic_Lotad),
+ STILL_FRONT_PIC(LOMBRE, gMonStillFrontPic_Lombre),
+ STILL_FRONT_PIC(LUDICOLO, gMonStillFrontPic_Ludicolo),
+ STILL_FRONT_PIC(SEEDOT, gMonStillFrontPic_Seedot),
+ STILL_FRONT_PIC(NUZLEAF, gMonStillFrontPic_Nuzleaf),
+ STILL_FRONT_PIC(SHIFTRY, gMonStillFrontPic_Shiftry),
+ STILL_FRONT_PIC(NINCADA, gMonStillFrontPic_Nincada),
+ STILL_FRONT_PIC(NINJASK, gMonStillFrontPic_Ninjask),
+ STILL_FRONT_PIC(SHEDINJA, gMonStillFrontPic_Shedinja),
+ STILL_FRONT_PIC(TAILLOW, gMonStillFrontPic_Taillow),
+ STILL_FRONT_PIC(SWELLOW, gMonStillFrontPic_Swellow),
+ STILL_FRONT_PIC(SHROOMISH, gMonStillFrontPic_Shroomish),
+ STILL_FRONT_PIC(BRELOOM, gMonStillFrontPic_Breloom),
+ STILL_FRONT_PIC(SPINDA, gMonStillFrontPic_Spinda),
+ STILL_FRONT_PIC(WINGULL, gMonStillFrontPic_Wingull),
+ STILL_FRONT_PIC(PELIPPER, gMonStillFrontPic_Pelipper),
+ STILL_FRONT_PIC(SURSKIT, gMonStillFrontPic_Surskit),
+ STILL_FRONT_PIC(MASQUERAIN, gMonStillFrontPic_Masquerain),
+ STILL_FRONT_PIC(WAILMER, gMonStillFrontPic_Wailmer),
+ STILL_FRONT_PIC(WAILORD, gMonStillFrontPic_Wailord),
+ STILL_FRONT_PIC(SKITTY, gMonStillFrontPic_Skitty),
+ STILL_FRONT_PIC(DELCATTY, gMonStillFrontPic_Delcatty),
+ STILL_FRONT_PIC(KECLEON, gMonStillFrontPic_Kecleon),
+ STILL_FRONT_PIC(BALTOY, gMonStillFrontPic_Baltoy),
+ STILL_FRONT_PIC(CLAYDOL, gMonStillFrontPic_Claydol),
+ STILL_FRONT_PIC(NOSEPASS, gMonStillFrontPic_Nosepass),
+ STILL_FRONT_PIC(TORKOAL, gMonStillFrontPic_Torkoal),
+ STILL_FRONT_PIC(SABLEYE, gMonStillFrontPic_Sableye),
+ STILL_FRONT_PIC(BARBOACH, gMonStillFrontPic_Barboach),
+ STILL_FRONT_PIC(WHISCASH, gMonStillFrontPic_Whiscash),
+ STILL_FRONT_PIC(LUVDISC, gMonStillFrontPic_Luvdisc),
+ STILL_FRONT_PIC(CORPHISH, gMonStillFrontPic_Corphish),
+ STILL_FRONT_PIC(CRAWDAUNT, gMonStillFrontPic_Crawdaunt),
+ STILL_FRONT_PIC(FEEBAS, gMonStillFrontPic_Feebas),
+ STILL_FRONT_PIC(MILOTIC, gMonStillFrontPic_Milotic),
+ STILL_FRONT_PIC(CARVANHA, gMonStillFrontPic_Carvanha),
+ STILL_FRONT_PIC(SHARPEDO, gMonStillFrontPic_Sharpedo),
+ STILL_FRONT_PIC(TRAPINCH, gMonStillFrontPic_Trapinch),
+ STILL_FRONT_PIC(VIBRAVA, gMonStillFrontPic_Vibrava),
+ STILL_FRONT_PIC(FLYGON, gMonStillFrontPic_Flygon),
+ STILL_FRONT_PIC(MAKUHITA, gMonStillFrontPic_Makuhita),
+ STILL_FRONT_PIC(HARIYAMA, gMonStillFrontPic_Hariyama),
+ STILL_FRONT_PIC(ELECTRIKE, gMonStillFrontPic_Electrike),
+ STILL_FRONT_PIC(MANECTRIC, gMonStillFrontPic_Manectric),
+ STILL_FRONT_PIC(NUMEL, gMonStillFrontPic_Numel),
+ STILL_FRONT_PIC(CAMERUPT, gMonStillFrontPic_Camerupt),
+ STILL_FRONT_PIC(SPHEAL, gMonStillFrontPic_Spheal),
+ STILL_FRONT_PIC(SEALEO, gMonStillFrontPic_Sealeo),
+ STILL_FRONT_PIC(WALREIN, gMonStillFrontPic_Walrein),
+ STILL_FRONT_PIC(CACNEA, gMonStillFrontPic_Cacnea),
+ STILL_FRONT_PIC(CACTURNE, gMonStillFrontPic_Cacturne),
+ STILL_FRONT_PIC(SNORUNT, gMonStillFrontPic_Snorunt),
+ STILL_FRONT_PIC(GLALIE, gMonStillFrontPic_Glalie),
+ STILL_FRONT_PIC(LUNATONE, gMonStillFrontPic_Lunatone),
+ STILL_FRONT_PIC(SOLROCK, gMonStillFrontPic_Solrock),
+ STILL_FRONT_PIC(AZURILL, gMonStillFrontPic_Azurill),
+ STILL_FRONT_PIC(SPOINK, gMonStillFrontPic_Spoink),
+ STILL_FRONT_PIC(GRUMPIG, gMonStillFrontPic_Grumpig),
+ STILL_FRONT_PIC(PLUSLE, gMonStillFrontPic_Plusle),
+ STILL_FRONT_PIC(MINUN, gMonStillFrontPic_Minun),
+ STILL_FRONT_PIC(MAWILE, gMonStillFrontPic_Mawile),
+ STILL_FRONT_PIC(MEDITITE, gMonStillFrontPic_Meditite),
+ STILL_FRONT_PIC(MEDICHAM, gMonStillFrontPic_Medicham),
+ STILL_FRONT_PIC(SWABLU, gMonStillFrontPic_Swablu),
+ STILL_FRONT_PIC(ALTARIA, gMonStillFrontPic_Altaria),
+ STILL_FRONT_PIC(WYNAUT, gMonStillFrontPic_Wynaut),
+ STILL_FRONT_PIC(DUSKULL, gMonStillFrontPic_Duskull),
+ STILL_FRONT_PIC(DUSCLOPS, gMonStillFrontPic_Dusclops),
+ STILL_FRONT_PIC(ROSELIA, gMonStillFrontPic_Roselia),
+ STILL_FRONT_PIC(SLAKOTH, gMonStillFrontPic_Slakoth),
+ STILL_FRONT_PIC(VIGOROTH, gMonStillFrontPic_Vigoroth),
+ STILL_FRONT_PIC(SLAKING, gMonStillFrontPic_Slaking),
+ STILL_FRONT_PIC(GULPIN, gMonStillFrontPic_Gulpin),
+ STILL_FRONT_PIC(SWALOT, gMonStillFrontPic_Swalot),
+ STILL_FRONT_PIC(TROPIUS, gMonStillFrontPic_Tropius),
+ STILL_FRONT_PIC(WHISMUR, gMonStillFrontPic_Whismur),
+ STILL_FRONT_PIC(LOUDRED, gMonStillFrontPic_Loudred),
+ STILL_FRONT_PIC(EXPLOUD, gMonStillFrontPic_Exploud),
+ STILL_FRONT_PIC(CLAMPERL, gMonStillFrontPic_Clamperl),
+ STILL_FRONT_PIC(HUNTAIL, gMonStillFrontPic_Huntail),
+ STILL_FRONT_PIC(GOREBYSS, gMonStillFrontPic_Gorebyss),
+ STILL_FRONT_PIC(ABSOL, gMonStillFrontPic_Absol),
+ STILL_FRONT_PIC(SHUPPET, gMonStillFrontPic_Shuppet),
+ STILL_FRONT_PIC(BANETTE, gMonStillFrontPic_Banette),
+ STILL_FRONT_PIC(SEVIPER, gMonStillFrontPic_Seviper),
+ STILL_FRONT_PIC(ZANGOOSE, gMonStillFrontPic_Zangoose),
+ STILL_FRONT_PIC(RELICANTH, gMonStillFrontPic_Relicanth),
+ STILL_FRONT_PIC(ARON, gMonStillFrontPic_Aron),
+ STILL_FRONT_PIC(LAIRON, gMonStillFrontPic_Lairon),
+ STILL_FRONT_PIC(AGGRON, gMonStillFrontPic_Aggron),
+ STILL_FRONT_PIC(CASTFORM, gMonStillFrontPic_Castform),
+ STILL_FRONT_PIC(VOLBEAT, gMonStillFrontPic_Volbeat),
+ STILL_FRONT_PIC(ILLUMISE, gMonStillFrontPic_Illumise),
+ STILL_FRONT_PIC(LILEEP, gMonStillFrontPic_Lileep),
+ STILL_FRONT_PIC(CRADILY, gMonStillFrontPic_Cradily),
+ STILL_FRONT_PIC(ANORITH, gMonStillFrontPic_Anorith),
+ STILL_FRONT_PIC(ARMALDO, gMonStillFrontPic_Armaldo),
+ STILL_FRONT_PIC(RALTS, gMonStillFrontPic_Ralts),
+ STILL_FRONT_PIC(KIRLIA, gMonStillFrontPic_Kirlia),
+ STILL_FRONT_PIC(GARDEVOIR, gMonStillFrontPic_Gardevoir),
+ STILL_FRONT_PIC(BAGON, gMonStillFrontPic_Bagon),
+ STILL_FRONT_PIC(SHELGON, gMonStillFrontPic_Shelgon),
+ STILL_FRONT_PIC(SALAMENCE, gMonStillFrontPic_Salamence),
+ STILL_FRONT_PIC(BELDUM, gMonStillFrontPic_Beldum),
+ STILL_FRONT_PIC(METANG, gMonStillFrontPic_Metang),
+ STILL_FRONT_PIC(METAGROSS, gMonStillFrontPic_Metagross),
+ STILL_FRONT_PIC(REGIROCK, gMonStillFrontPic_Regirock),
+ STILL_FRONT_PIC(REGICE, gMonStillFrontPic_Regice),
+ STILL_FRONT_PIC(REGISTEEL, gMonStillFrontPic_Registeel),
+ STILL_FRONT_PIC(KYOGRE, gMonStillFrontPic_Kyogre),
+ STILL_FRONT_PIC(GROUDON, gMonStillFrontPic_Groudon),
+ STILL_FRONT_PIC(RAYQUAZA, gMonStillFrontPic_Rayquaza),
+ STILL_FRONT_PIC(LATIAS, gMonStillFrontPic_Latias),
+ STILL_FRONT_PIC(LATIOS, gMonStillFrontPic_Latios),
+ STILL_FRONT_PIC(JIRACHI, gMonStillFrontPic_Jirachi),
+ STILL_FRONT_PIC(DEOXYS, gMonStillFrontPic_Deoxys),
+ STILL_FRONT_PIC(CHIMECHO, gMonStillFrontPic_Chimecho),
+ STILL_FRONT_PIC(EGG, gMonStillFrontPic_Egg),
+ STILL_FRONT_PIC(UNOWN_B, gMonStillFrontPic_UnownB),
+ STILL_FRONT_PIC(UNOWN_C, gMonStillFrontPic_UnownC),
+ STILL_FRONT_PIC(UNOWN_D, gMonStillFrontPic_UnownD),
+ STILL_FRONT_PIC(UNOWN_E, gMonStillFrontPic_UnownE),
+ STILL_FRONT_PIC(UNOWN_F, gMonStillFrontPic_UnownF),
+ STILL_FRONT_PIC(UNOWN_G, gMonStillFrontPic_UnownG),
+ STILL_FRONT_PIC(UNOWN_H, gMonStillFrontPic_UnownH),
+ STILL_FRONT_PIC(UNOWN_I, gMonStillFrontPic_UnownI),
+ STILL_FRONT_PIC(UNOWN_J, gMonStillFrontPic_UnownJ),
+ STILL_FRONT_PIC(UNOWN_K, gMonStillFrontPic_UnownK),
+ STILL_FRONT_PIC(UNOWN_L, gMonStillFrontPic_UnownL),
+ STILL_FRONT_PIC(UNOWN_M, gMonStillFrontPic_UnownM),
+ STILL_FRONT_PIC(UNOWN_N, gMonStillFrontPic_UnownN),
+ STILL_FRONT_PIC(UNOWN_O, gMonStillFrontPic_UnownO),
+ STILL_FRONT_PIC(UNOWN_P, gMonStillFrontPic_UnownP),
+ STILL_FRONT_PIC(UNOWN_Q, gMonStillFrontPic_UnownQ),
+ STILL_FRONT_PIC(UNOWN_R, gMonStillFrontPic_UnownR),
+ STILL_FRONT_PIC(UNOWN_S, gMonStillFrontPic_UnownS),
+ STILL_FRONT_PIC(UNOWN_T, gMonStillFrontPic_UnownT),
+ STILL_FRONT_PIC(UNOWN_U, gMonStillFrontPic_UnownU),
+ STILL_FRONT_PIC(UNOWN_V, gMonStillFrontPic_UnownV),
+ STILL_FRONT_PIC(UNOWN_W, gMonStillFrontPic_UnownW),
+ STILL_FRONT_PIC(UNOWN_X, gMonStillFrontPic_UnownX),
+ STILL_FRONT_PIC(UNOWN_Y, gMonStillFrontPic_UnownY),
+ STILL_FRONT_PIC(UNOWN_Z, gMonStillFrontPic_UnownZ),
+ STILL_FRONT_PIC(UNOWN_EMARK, gMonStillFrontPic_UnownExclamationMark),
+ STILL_FRONT_PIC(UNOWN_QMARK, gMonStillFrontPic_UnownQuestionMark),
};
diff --git a/src/data/wild_encounters.h b/src/data/wild_encounters.h
new file mode 100644
index 000000000..d1f2eb616
--- /dev/null
+++ b/src/data/wild_encounters.h
@@ -0,0 +1,4573 @@
+// const rom data
+
+/*This file consists of several parts.
+ *First, the actual tables that define the available Pokemon and their level ranges.
+ *Second, the headers for each area that links the tables to the actual maps.
+ *Third, Battle Pyramid-specific tables and headers.
+ *Fourth, Battle Pike-specific tables and headers.
+ *And then finally, Feebas-related data.
+ *You can search for // to jump between the sections.
+ */
+
+ //Start of regular Pokemon tables.
+
+const struct WildPokemon gRoute101_LandMons[] =
+{
+ {2, 2, SPECIES_WURMPLE},
+ {2, 2, SPECIES_POOCHYENA},
+ {2, 2, SPECIES_WURMPLE},
+ {3, 3, SPECIES_WURMPLE},
+ {3, 3, SPECIES_POOCHYENA},
+ {3, 3, SPECIES_POOCHYENA},
+ {3, 3, SPECIES_WURMPLE},
+ {3, 3, SPECIES_POOCHYENA},
+ {2, 2, SPECIES_ZIGZAGOON},
+ {2, 2, SPECIES_ZIGZAGOON},
+ {3, 3, SPECIES_ZIGZAGOON},
+ {3, 3, SPECIES_ZIGZAGOON},
+};
+
+const struct WildPokemonInfo gRoute101_LandMonsInfo = {20, gRoute101_LandMons};
+
+const struct WildPokemon gRoute102_LandMons[] =
+{
+ {3, 3, SPECIES_POOCHYENA},
+ {3, 3, SPECIES_WURMPLE},
+ {4, 4, SPECIES_POOCHYENA},
+ {4, 4, SPECIES_WURMPLE},
+ {3, 3, SPECIES_LOTAD},
+ {4, 4, SPECIES_LOTAD},
+ {3, 3, SPECIES_ZIGZAGOON},
+ {3, 3, SPECIES_ZIGZAGOON},
+ {4, 4, SPECIES_ZIGZAGOON},
+ {4, 4, SPECIES_RALTS},
+ {4, 4, SPECIES_ZIGZAGOON},
+ {3, 3, SPECIES_SEEDOT},
+};
+
+const struct WildPokemonInfo gRoute102_LandMonsInfo = {20, gRoute102_LandMons};
+
+const struct WildPokemon gRoute102_WaterMons[] =
+{
+ {20, 30, SPECIES_MARILL},
+ {10, 20, SPECIES_MARILL},
+ {30, 35, SPECIES_MARILL},
+ {5, 10, SPECIES_MARILL},
+ {20, 30, SPECIES_GOLDEEN},
+};
+
+const struct WildPokemonInfo gRoute102_WaterMonsInfo = {4, gRoute102_WaterMons};
+
+const struct WildPokemon gRoute102_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_CORPHISH},
+ {25, 30, SPECIES_CORPHISH},
+ {30, 35, SPECIES_CORPHISH},
+ {20, 25, SPECIES_CORPHISH},
+ {35, 40, SPECIES_CORPHISH},
+ {40, 45, SPECIES_CORPHISH},
+};
+
+const struct WildPokemonInfo gRoute102_FishingMonsInfo = {30, gRoute102_FishingMons};
+
+const struct WildPokemon gRoute103_LandMons[] =
+{
+ {2, 2, SPECIES_POOCHYENA},
+ {3, 3, SPECIES_POOCHYENA},
+ {3, 3, SPECIES_POOCHYENA},
+ {4, 4, SPECIES_POOCHYENA},
+ {2, 2, SPECIES_WINGULL},
+ {3, 3, SPECIES_ZIGZAGOON},
+ {3, 3, SPECIES_ZIGZAGOON},
+ {4, 4, SPECIES_ZIGZAGOON},
+ {3, 3, SPECIES_WINGULL},
+ {3, 3, SPECIES_WINGULL},
+ {2, 2, SPECIES_WINGULL},
+ {4, 4, SPECIES_WINGULL},
+};
+
+const struct WildPokemonInfo gRoute103_LandMonsInfo = {20, gRoute103_LandMons};
+
+const struct WildPokemon gRoute103_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute103_WaterMonsInfo = {4, gRoute103_WaterMons};
+
+const struct WildPokemon gRoute103_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute103_FishingMonsInfo = {30, gRoute103_FishingMons};
+
+const struct WildPokemon gRoute104_LandMons[] =
+{
+ {4, 4, SPECIES_POOCHYENA},
+ {4, 4, SPECIES_WURMPLE},
+ {5, 5, SPECIES_POOCHYENA},
+ {5, 5, SPECIES_MARILL},
+ {4, 4, SPECIES_MARILL},
+ {5, 5, SPECIES_POOCHYENA},
+ {4, 4, SPECIES_TAILLOW},
+ {5, 5, SPECIES_TAILLOW},
+ {4, 4, SPECIES_WINGULL},
+ {4, 4, SPECIES_WINGULL},
+ {3, 3, SPECIES_WINGULL},
+ {5, 5, SPECIES_WINGULL},
+};
+
+const struct WildPokemonInfo gRoute104_LandMonsInfo = {20, gRoute104_LandMons};
+
+const struct WildPokemon gRoute104_WaterMons[] =
+{
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute104_WaterMonsInfo = {4, gRoute104_WaterMons};
+
+const struct WildPokemon gRoute104_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_MAGIKARP},
+ {25, 30, SPECIES_MAGIKARP},
+ {30, 35, SPECIES_MAGIKARP},
+ {20, 25, SPECIES_MAGIKARP},
+ {35, 40, SPECIES_MAGIKARP},
+ {40, 45, SPECIES_MAGIKARP},
+};
+
+const struct WildPokemonInfo gRoute104_FishingMonsInfo = {30, gRoute104_FishingMons};
+
+const struct WildPokemon gRoute105_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute105_WaterMonsInfo = {4, gRoute105_WaterMons};
+
+const struct WildPokemon gRoute105_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute105_FishingMonsInfo = {30, gRoute105_FishingMons};
+
+const struct WildPokemon gRoute110_LandMons[] =
+{
+ {12, 12, SPECIES_POOCHYENA},
+ {12, 12, SPECIES_ELECTRIKE},
+ {12, 12, SPECIES_GULPIN},
+ {13, 13, SPECIES_ELECTRIKE},
+ {13, 13, SPECIES_MINUN},
+ {13, 13, SPECIES_ODDISH},
+ {13, 13, SPECIES_MINUN},
+ {13, 13, SPECIES_GULPIN},
+ {12, 12, SPECIES_WINGULL},
+ {12, 12, SPECIES_WINGULL},
+ {12, 12, SPECIES_PLUSLE},
+ {13, 13, SPECIES_PLUSLE},
+};
+
+const struct WildPokemonInfo gRoute110_LandMonsInfo = {20, gRoute110_LandMons};
+
+const struct WildPokemon gRoute110_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute110_WaterMonsInfo = {4, gRoute110_WaterMons};
+
+const struct WildPokemon gRoute110_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute110_FishingMonsInfo = {30, gRoute110_FishingMons};
+
+const struct WildPokemon gRoute111_LandMons[] =
+{
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {21, 21, SPECIES_SANDSHREW},
+ {21, 21, SPECIES_TRAPINCH},
+ {19, 19, SPECIES_BALTOY},
+ {21, 21, SPECIES_BALTOY},
+ {19, 19, SPECIES_SANDSHREW},
+ {19, 19, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_BALTOY},
+ {20, 20, SPECIES_CACNEA},
+ {22, 22, SPECIES_CACNEA},
+ {22, 22, SPECIES_CACNEA},
+};
+
+const struct WildPokemonInfo gRoute111_LandMonsInfo = {10, gRoute111_LandMons};
+
+const struct WildPokemon gRoute111_WaterMons[] =
+{
+ {20, 30, SPECIES_MARILL},
+ {10, 20, SPECIES_MARILL},
+ {30, 35, SPECIES_MARILL},
+ {5, 10, SPECIES_MARILL},
+ {20, 30, SPECIES_GOLDEEN},
+};
+
+const struct WildPokemonInfo gRoute111_WaterMonsInfo = {4, gRoute111_WaterMons};
+
+const struct WildPokemon gRoute111_RockSmashMons[] =
+{
+ {10, 15, SPECIES_GEODUDE},
+ {5, 10, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+};
+
+const struct WildPokemonInfo gRoute111_RockSmashMonsInfo = {20, gRoute111_RockSmashMons};
+
+const struct WildPokemon gRoute111_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {20, 25, SPECIES_BARBOACH},
+ {35, 40, SPECIES_BARBOACH},
+ {40, 45, SPECIES_BARBOACH},
+};
+
+const struct WildPokemonInfo gRoute111_FishingMonsInfo = {30, gRoute111_FishingMons};
+
+const struct WildPokemon gRoute112_LandMons[] =
+{
+ {15, 15, SPECIES_NUMEL},
+ {15, 15, SPECIES_NUMEL},
+ {15, 15, SPECIES_MARILL},
+ {14, 14, SPECIES_NUMEL},
+ {14, 14, SPECIES_NUMEL},
+ {14, 14, SPECIES_MARILL},
+ {16, 16, SPECIES_NUMEL},
+ {16, 16, SPECIES_MARILL},
+ {16, 16, SPECIES_NUMEL},
+ {16, 16, SPECIES_NUMEL},
+ {16, 16, SPECIES_NUMEL},
+ {16, 16, SPECIES_NUMEL},
+};
+
+const struct WildPokemonInfo gRoute112_LandMonsInfo = {20, gRoute112_LandMons};
+
+const struct WildPokemon gRoute113_LandMons[] =
+{
+ {15, 15, SPECIES_SPINDA},
+ {15, 15, SPECIES_SPINDA},
+ {15, 15, SPECIES_SLUGMA},
+ {14, 14, SPECIES_SPINDA},
+ {14, 14, SPECIES_SPINDA},
+ {14, 14, SPECIES_SLUGMA},
+ {16, 16, SPECIES_SPINDA},
+ {16, 16, SPECIES_SLUGMA},
+ {16, 16, SPECIES_SPINDA},
+ {16, 16, SPECIES_SKARMORY},
+ {16, 16, SPECIES_SPINDA},
+ {16, 16, SPECIES_SKARMORY},
+};
+
+const struct WildPokemonInfo gRoute113_LandMonsInfo = {20, gRoute113_LandMons};
+
+const struct WildPokemon gRoute114_LandMons[] =
+{
+ {16, 16, SPECIES_SWABLU},
+ {16, 16, SPECIES_LOTAD},
+ {17, 17, SPECIES_SWABLU},
+ {15, 15, SPECIES_SWABLU},
+ {15, 15, SPECIES_LOTAD},
+ {16, 16, SPECIES_LOMBRE},
+ {16, 16, SPECIES_LOMBRE},
+ {18, 18, SPECIES_LOMBRE},
+ {17, 17, SPECIES_SEVIPER},
+ {15, 15, SPECIES_SEVIPER},
+ {17, 17, SPECIES_SEVIPER},
+ {15, 15, SPECIES_NUZLEAF},
+};
+
+const struct WildPokemonInfo gRoute114_LandMonsInfo = {20, gRoute114_LandMons};
+
+const struct WildPokemon gRoute114_WaterMons[] =
+{
+ {20, 30, SPECIES_MARILL},
+ {10, 20, SPECIES_MARILL},
+ {30, 35, SPECIES_MARILL},
+ {5, 10, SPECIES_MARILL},
+ {20, 30, SPECIES_GOLDEEN},
+};
+
+const struct WildPokemonInfo gRoute114_WaterMonsInfo = {4, gRoute114_WaterMons};
+
+const struct WildPokemon gRoute114_RockSmashMons[] =
+{
+ {10, 15, SPECIES_GEODUDE},
+ {5, 10, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+};
+
+const struct WildPokemonInfo gRoute114_RockSmashMonsInfo = {20, gRoute114_RockSmashMons};
+
+const struct WildPokemon gRoute114_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {20, 25, SPECIES_BARBOACH},
+ {35, 40, SPECIES_BARBOACH},
+ {40, 45, SPECIES_BARBOACH},
+};
+
+const struct WildPokemonInfo gRoute114_FishingMonsInfo = {30, gRoute114_FishingMons};
+
+const struct WildPokemon gRoute116_LandMons[] =
+{
+ {6, 6, SPECIES_POOCHYENA},
+ {6, 6, SPECIES_WHISMUR},
+ {6, 6, SPECIES_NINCADA},
+ {7, 7, SPECIES_ABRA},
+ {7, 7, SPECIES_NINCADA},
+ {6, 6, SPECIES_TAILLOW},
+ {7, 7, SPECIES_TAILLOW},
+ {8, 8, SPECIES_TAILLOW},
+ {7, 7, SPECIES_POOCHYENA},
+ {8, 8, SPECIES_POOCHYENA},
+ {7, 7, SPECIES_SKITTY},
+ {8, 8, SPECIES_SKITTY},
+};
+
+const struct WildPokemonInfo gRoute116_LandMonsInfo = {20, gRoute116_LandMons};
+
+const struct WildPokemon gRoute117_LandMons[] =
+{
+ {13, 13, SPECIES_POOCHYENA},
+ {13, 13, SPECIES_ODDISH},
+ {14, 14, SPECIES_POOCHYENA},
+ {14, 14, SPECIES_ODDISH},
+ {13, 13, SPECIES_MARILL},
+ {13, 13, SPECIES_ODDISH},
+ {13, 13, SPECIES_ILLUMISE},
+ {13, 13, SPECIES_ILLUMISE},
+ {14, 14, SPECIES_ILLUMISE},
+ {14, 14, SPECIES_ILLUMISE},
+ {13, 13, SPECIES_VOLBEAT},
+ {13, 13, SPECIES_SEEDOT},
+};
+
+const struct WildPokemonInfo gRoute117_LandMonsInfo = {20, gRoute117_LandMons};
+
+const struct WildPokemon gRoute117_WaterMons[] =
+{
+ {20, 30, SPECIES_MARILL},
+ {10, 20, SPECIES_MARILL},
+ {30, 35, SPECIES_MARILL},
+ {5, 10, SPECIES_MARILL},
+ {20, 30, SPECIES_GOLDEEN},
+};
+
+const struct WildPokemonInfo gRoute117_WaterMonsInfo = {4, gRoute117_WaterMons};
+
+const struct WildPokemon gRoute117_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_CORPHISH},
+ {25, 30, SPECIES_CORPHISH},
+ {30, 35, SPECIES_CORPHISH},
+ {20, 25, SPECIES_CORPHISH},
+ {35, 40, SPECIES_CORPHISH},
+ {40, 45, SPECIES_CORPHISH},
+};
+
+const struct WildPokemonInfo gRoute117_FishingMonsInfo = {30, gRoute117_FishingMons};
+
+const struct WildPokemon gRoute118_LandMons[] =
+{
+ {24, 24, SPECIES_ZIGZAGOON},
+ {24, 24, SPECIES_ELECTRIKE},
+ {26, 26, SPECIES_ZIGZAGOON},
+ {26, 26, SPECIES_ELECTRIKE},
+ {26, 26, SPECIES_LINOONE},
+ {26, 26, SPECIES_MANECTRIC},
+ {25, 25, SPECIES_WINGULL},
+ {25, 25, SPECIES_WINGULL},
+ {26, 26, SPECIES_WINGULL},
+ {26, 26, SPECIES_WINGULL},
+ {27, 27, SPECIES_WINGULL},
+ {25, 25, SPECIES_KECLEON},
+};
+
+const struct WildPokemonInfo gRoute118_LandMonsInfo = {20, gRoute118_LandMons};
+
+const struct WildPokemon gRoute118_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute118_WaterMonsInfo = {4, gRoute118_WaterMons};
+
+const struct WildPokemon gRoute118_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_CARVANHA},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_CARVANHA},
+ {20, 25, SPECIES_CARVANHA},
+ {35, 40, SPECIES_CARVANHA},
+ {40, 45, SPECIES_CARVANHA},
+};
+
+const struct WildPokemonInfo gRoute118_FishingMonsInfo = {30, gRoute118_FishingMons};
+
+const struct WildPokemon gRoute124_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute124_WaterMonsInfo = {4, gRoute124_WaterMons};
+
+const struct WildPokemon gRoute124_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute124_FishingMonsInfo = {30, gRoute124_FishingMons};
+
+const struct WildPokemon gPetalburgWoods_LandMons[] =
+{
+ {5, 5, SPECIES_POOCHYENA},
+ {5, 5, SPECIES_WURMPLE},
+ {5, 5, SPECIES_SHROOMISH},
+ {6, 6, SPECIES_POOCHYENA},
+ {5, 5, SPECIES_SILCOON},
+ {5, 5, SPECIES_CASCOON},
+ {6, 6, SPECIES_WURMPLE},
+ {6, 6, SPECIES_SHROOMISH},
+ {5, 5, SPECIES_TAILLOW},
+ {5, 5, SPECIES_SLAKOTH},
+ {6, 6, SPECIES_TAILLOW},
+ {6, 6, SPECIES_SLAKOTH},
+};
+
+const struct WildPokemonInfo gPetalburgWoods_LandMonsInfo = {20, gPetalburgWoods_LandMons};
+
+const struct WildPokemon gRusturfTunnel_LandMons[] =
+{
+ {6, 6, SPECIES_WHISMUR},
+ {7, 7, SPECIES_WHISMUR},
+ {6, 6, SPECIES_WHISMUR},
+ {6, 6, SPECIES_WHISMUR},
+ {7, 7, SPECIES_WHISMUR},
+ {7, 7, SPECIES_WHISMUR},
+ {5, 5, SPECIES_WHISMUR},
+ {8, 8, SPECIES_WHISMUR},
+ {5, 5, SPECIES_WHISMUR},
+ {8, 8, SPECIES_WHISMUR},
+ {5, 5, SPECIES_WHISMUR},
+ {8, 8, SPECIES_WHISMUR},
+};
+
+const struct WildPokemonInfo gRusturfTunnel_LandMonsInfo = {10, gRusturfTunnel_LandMons};
+
+const struct WildPokemon gGraniteCave_1F_LandMons[] =
+{
+ {7, 7, SPECIES_ZUBAT},
+ {8, 8, SPECIES_MAKUHITA},
+ {7, 7, SPECIES_MAKUHITA},
+ {8, 8, SPECIES_ZUBAT},
+ {9, 9, SPECIES_MAKUHITA},
+ {8, 8, SPECIES_ABRA},
+ {10, 10, SPECIES_MAKUHITA},
+ {6, 6, SPECIES_MAKUHITA},
+ {7, 7, SPECIES_GEODUDE},
+ {8, 8, SPECIES_GEODUDE},
+ {6, 6, SPECIES_GEODUDE},
+ {9, 9, SPECIES_GEODUDE},
+};
+
+const struct WildPokemonInfo gGraniteCave_1F_LandMonsInfo = {10, gGraniteCave_1F_LandMons};
+
+const struct WildPokemon gGraniteCave_B1F_LandMons[] =
+{
+ {9, 9, SPECIES_ZUBAT},
+ {10, 10, SPECIES_ARON},
+ {9, 9, SPECIES_ARON},
+ {11, 11, SPECIES_ARON},
+ {10, 10, SPECIES_ZUBAT},
+ {9, 9, SPECIES_ABRA},
+ {10, 10, SPECIES_MAKUHITA},
+ {11, 11, SPECIES_MAKUHITA},
+ {10, 10, SPECIES_SABLEYE},
+ {10, 10, SPECIES_SABLEYE},
+ {9, 9, SPECIES_SABLEYE},
+ {11, 11, SPECIES_SABLEYE},
+};
+
+const struct WildPokemonInfo gGraniteCave_B1F_LandMonsInfo = {10, gGraniteCave_B1F_LandMons};
+
+const struct WildPokemon gMtPyre_1F_LandMons[] =
+{
+ {27, 27, SPECIES_SHUPPET},
+ {28, 28, SPECIES_SHUPPET},
+ {26, 26, SPECIES_SHUPPET},
+ {25, 25, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {23, 23, SPECIES_SHUPPET},
+ {22, 22, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+};
+
+const struct WildPokemonInfo gMtPyre_1F_LandMonsInfo = {10, gMtPyre_1F_LandMons};
+
+const struct WildPokemon gVictoryRoad_1F_LandMons[] =
+{
+ {40, 40, SPECIES_GOLBAT},
+ {40, 40, SPECIES_HARIYAMA},
+ {40, 40, SPECIES_LAIRON},
+ {40, 40, SPECIES_LOUDRED},
+ {36, 36, SPECIES_ZUBAT},
+ {36, 36, SPECIES_MAKUHITA},
+ {38, 38, SPECIES_GOLBAT},
+ {38, 38, SPECIES_HARIYAMA},
+ {36, 36, SPECIES_ARON},
+ {36, 36, SPECIES_WHISMUR},
+ {36, 36, SPECIES_ARON},
+ {36, 36, SPECIES_WHISMUR},
+};
+
+const struct WildPokemonInfo gVictoryRoad_1F_LandMonsInfo = {10, gVictoryRoad_1F_LandMons};
+
+const struct WildPokemon gSafariZone_South_LandMons[] =
+{
+ {25, 25, SPECIES_ODDISH},
+ {27, 27, SPECIES_ODDISH},
+ {25, 25, SPECIES_GIRAFARIG},
+ {27, 27, SPECIES_GIRAFARIG},
+ {25, 25, SPECIES_NATU},
+ {25, 25, SPECIES_DODUO},
+ {25, 25, SPECIES_GLOOM},
+ {27, 27, SPECIES_WOBBUFFET},
+ {25, 25, SPECIES_PIKACHU},
+ {27, 27, SPECIES_WOBBUFFET},
+ {27, 27, SPECIES_PIKACHU},
+ {29, 29, SPECIES_WOBBUFFET},
+};
+
+const struct WildPokemonInfo gSafariZone_South_LandMonsInfo = {25, gSafariZone_South_LandMons};
+
+const struct WildPokemon gUnderwater2_WaterMons[] =
+{
+ {20, 30, SPECIES_CLAMPERL},
+ {20, 30, SPECIES_CHINCHOU},
+ {30, 35, SPECIES_CLAMPERL},
+ {30, 35, SPECIES_RELICANTH},
+ {30, 35, SPECIES_RELICANTH},
+};
+
+const struct WildPokemonInfo gUnderwater2_WaterMonsInfo = {4, gUnderwater2_WaterMons};
+
+const struct WildPokemon gAbandonedShip_Rooms_B1F_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_TENTACOOL},
+ {30, 35, SPECIES_TENTACRUEL},
+};
+
+const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_WaterMonsInfo = {4, gAbandonedShip_Rooms_B1F_WaterMons};
+
+const struct WildPokemon gAbandonedShip_Rooms_B1F_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_TENTACOOL},
+ {25, 30, SPECIES_TENTACOOL},
+ {30, 35, SPECIES_TENTACOOL},
+ {30, 35, SPECIES_TENTACRUEL},
+ {25, 30, SPECIES_TENTACRUEL},
+ {20, 25, SPECIES_TENTACRUEL},
+};
+
+const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_FishingMonsInfo = {20, gAbandonedShip_Rooms_B1F_FishingMons};
+
+const struct WildPokemon gGraniteCave_B2F_LandMons[] =
+{
+ {10, 10, SPECIES_ZUBAT},
+ {11, 11, SPECIES_ARON},
+ {10, 10, SPECIES_ARON},
+ {11, 11, SPECIES_ZUBAT},
+ {12, 12, SPECIES_ARON},
+ {10, 10, SPECIES_ABRA},
+ {10, 10, SPECIES_SABLEYE},
+ {11, 11, SPECIES_SABLEYE},
+ {12, 12, SPECIES_SABLEYE},
+ {10, 10, SPECIES_SABLEYE},
+ {12, 12, SPECIES_SABLEYE},
+ {10, 10, SPECIES_SABLEYE},
+};
+
+const struct WildPokemonInfo gGraniteCave_B2F_LandMonsInfo = {10, gGraniteCave_B2F_LandMons};
+
+const struct WildPokemon gGraniteCave_B2F_RockSmashMons[] =
+{
+ {10, 15, SPECIES_GEODUDE},
+ {10, 20, SPECIES_NOSEPASS},
+ {5, 10, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+};
+
+const struct WildPokemonInfo gGraniteCave_B2F_RockSmashMonsInfo = {20, gGraniteCave_B2F_RockSmashMons};
+
+const struct WildPokemon gFieryPath_LandMons[] =
+{
+ {15, 15, SPECIES_NUMEL},
+ {15, 15, SPECIES_KOFFING},
+ {16, 16, SPECIES_NUMEL},
+ {15, 15, SPECIES_MACHOP},
+ {15, 15, SPECIES_TORKOAL},
+ {15, 15, SPECIES_SLUGMA},
+ {16, 16, SPECIES_KOFFING},
+ {16, 16, SPECIES_MACHOP},
+ {14, 14, SPECIES_TORKOAL},
+ {16, 16, SPECIES_TORKOAL},
+ {14, 14, SPECIES_GRIMER},
+ {14, 14, SPECIES_GRIMER},
+};
+
+const struct WildPokemonInfo gFieryPath_LandMonsInfo = {10, gFieryPath_LandMons};
+
+const struct WildPokemon gMeteorFalls_B1F_2R_LandMons[] =
+{
+ {33, 33, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {30, 30, SPECIES_BAGON},
+ {35, 35, SPECIES_SOLROCK},
+ {35, 35, SPECIES_BAGON},
+ {37, 37, SPECIES_SOLROCK},
+ {25, 25, SPECIES_BAGON},
+ {39, 39, SPECIES_SOLROCK},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gMeteorFalls_B1F_2R_LandMonsInfo = {10, gMeteorFalls_B1F_2R_LandMons};
+
+const struct WildPokemon gMeteorFalls_B1F_2R_WaterMons[] =
+{
+ {30, 35, SPECIES_GOLBAT},
+ {30, 35, SPECIES_GOLBAT},
+ {25, 35, SPECIES_SOLROCK},
+ {15, 25, SPECIES_SOLROCK},
+ {5, 15, SPECIES_SOLROCK},
+};
+
+const struct WildPokemonInfo gMeteorFalls_B1F_2R_WaterMonsInfo = {4, gMeteorFalls_B1F_2R_WaterMons};
+
+const struct WildPokemon gMeteorFalls_B1F_2R_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {30, 35, SPECIES_WHISCASH},
+ {35, 40, SPECIES_WHISCASH},
+ {40, 45, SPECIES_WHISCASH},
+};
+
+const struct WildPokemonInfo gMeteorFalls_B1F_2R_FishingMonsInfo = {30, gMeteorFalls_B1F_2R_FishingMons};
+
+const struct WildPokemon gJaggedPass_LandMons[] =
+{
+ {21, 21, SPECIES_NUMEL},
+ {21, 21, SPECIES_NUMEL},
+ {21, 21, SPECIES_MACHOP},
+ {20, 20, SPECIES_NUMEL},
+ {20, 20, SPECIES_SPOINK},
+ {20, 20, SPECIES_MACHOP},
+ {21, 21, SPECIES_SPOINK},
+ {22, 22, SPECIES_MACHOP},
+ {22, 22, SPECIES_NUMEL},
+ {22, 22, SPECIES_SPOINK},
+ {22, 22, SPECIES_NUMEL},
+ {22, 22, SPECIES_SPOINK},
+};
+
+const struct WildPokemonInfo gJaggedPass_LandMonsInfo = {20, gJaggedPass_LandMons};
+
+const struct WildPokemon gRoute106_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute106_WaterMonsInfo = {4, gRoute106_WaterMons};
+
+const struct WildPokemon gRoute106_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute106_FishingMonsInfo = {30, gRoute106_FishingMons};
+
+const struct WildPokemon gRoute107_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute107_WaterMonsInfo = {4, gRoute107_WaterMons};
+
+const struct WildPokemon gRoute107_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute107_FishingMonsInfo = {30, gRoute107_FishingMons};
+
+const struct WildPokemon gRoute108_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute108_WaterMonsInfo = {4, gRoute108_WaterMons};
+
+const struct WildPokemon gRoute108_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute108_FishingMonsInfo = {30, gRoute108_FishingMons};
+
+const struct WildPokemon gRoute109_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute109_WaterMonsInfo = {4, gRoute109_WaterMons};
+
+const struct WildPokemon gRoute109_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute109_FishingMonsInfo = {30, gRoute109_FishingMons};
+
+const struct WildPokemon gRoute115_LandMons[] =
+{
+ {23, 23, SPECIES_SWABLU},
+ {23, 23, SPECIES_TAILLOW},
+ {25, 25, SPECIES_SWABLU},
+ {24, 24, SPECIES_TAILLOW},
+ {25, 25, SPECIES_TAILLOW},
+ {25, 25, SPECIES_SWELLOW},
+ {24, 24, SPECIES_JIGGLYPUFF},
+ {25, 25, SPECIES_JIGGLYPUFF},
+ {24, 24, SPECIES_WINGULL},
+ {24, 24, SPECIES_WINGULL},
+ {26, 26, SPECIES_WINGULL},
+ {25, 25, SPECIES_WINGULL},
+};
+
+const struct WildPokemonInfo gRoute115_LandMonsInfo = {20, gRoute115_LandMons};
+
+const struct WildPokemon gRoute115_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute115_WaterMonsInfo = {4, gRoute115_WaterMons};
+
+const struct WildPokemon gRoute115_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute115_FishingMonsInfo = {30, gRoute115_FishingMons};
+
+const struct WildPokemon gNewMauville_Inside_LandMons[] =
+{
+ {24, 24, SPECIES_VOLTORB},
+ {24, 24, SPECIES_MAGNEMITE},
+ {25, 25, SPECIES_VOLTORB},
+ {25, 25, SPECIES_MAGNEMITE},
+ {23, 23, SPECIES_VOLTORB},
+ {23, 23, SPECIES_MAGNEMITE},
+ {26, 26, SPECIES_VOLTORB},
+ {26, 26, SPECIES_MAGNEMITE},
+ {22, 22, SPECIES_VOLTORB},
+ {22, 22, SPECIES_MAGNEMITE},
+ {26, 26, SPECIES_ELECTRODE},
+ {26, 26, SPECIES_MAGNETON},
+};
+
+const struct WildPokemonInfo gNewMauville_Inside_LandMonsInfo = {10, gNewMauville_Inside_LandMons};
+
+const struct WildPokemon gRoute119_LandMons[] =
+{
+ {25, 25, SPECIES_ZIGZAGOON},
+ {25, 25, SPECIES_LINOONE},
+ {27, 27, SPECIES_ZIGZAGOON},
+ {25, 25, SPECIES_ODDISH},
+ {27, 27, SPECIES_LINOONE},
+ {26, 26, SPECIES_ODDISH},
+ {27, 27, SPECIES_ODDISH},
+ {24, 24, SPECIES_ODDISH},
+ {25, 25, SPECIES_TROPIUS},
+ {26, 26, SPECIES_TROPIUS},
+ {27, 27, SPECIES_TROPIUS},
+ {25, 25, SPECIES_KECLEON},
+};
+
+const struct WildPokemonInfo gRoute119_LandMonsInfo = {15, gRoute119_LandMons};
+
+const struct WildPokemon gRoute119_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute119_WaterMonsInfo = {4, gRoute119_WaterMons};
+
+const struct WildPokemon gRoute119_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_CARVANHA},
+ {25, 30, SPECIES_CARVANHA},
+ {30, 35, SPECIES_CARVANHA},
+ {20, 25, SPECIES_CARVANHA},
+ {35, 40, SPECIES_CARVANHA},
+ {40, 45, SPECIES_CARVANHA},
+};
+
+const struct WildPokemonInfo gRoute119_FishingMonsInfo = {30, gRoute119_FishingMons};
+
+const struct WildPokemon gRoute120_LandMons[] =
+{
+ {25, 25, SPECIES_POOCHYENA},
+ {25, 25, SPECIES_MIGHTYENA},
+ {27, 27, SPECIES_MIGHTYENA},
+ {25, 25, SPECIES_ODDISH},
+ {25, 25, SPECIES_MARILL},
+ {26, 26, SPECIES_ODDISH},
+ {27, 27, SPECIES_ODDISH},
+ {27, 27, SPECIES_MARILL},
+ {25, 25, SPECIES_ABSOL},
+ {27, 27, SPECIES_ABSOL},
+ {25, 25, SPECIES_KECLEON},
+ {25, 25, SPECIES_SEEDOT},
+};
+
+const struct WildPokemonInfo gRoute120_LandMonsInfo = {20, gRoute120_LandMons};
+
+const struct WildPokemon gRoute120_WaterMons[] =
+{
+ {20, 30, SPECIES_MARILL},
+ {10, 20, SPECIES_MARILL},
+ {30, 35, SPECIES_MARILL},
+ {5, 10, SPECIES_MARILL},
+ {20, 30, SPECIES_GOLDEEN},
+};
+
+const struct WildPokemonInfo gRoute120_WaterMonsInfo = {4, gRoute120_WaterMons};
+
+const struct WildPokemon gRoute120_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {20, 25, SPECIES_BARBOACH},
+ {35, 40, SPECIES_BARBOACH},
+ {40, 45, SPECIES_BARBOACH},
+};
+
+const struct WildPokemonInfo gRoute120_FishingMonsInfo = {30, gRoute120_FishingMons};
+
+const struct WildPokemon gRoute121_LandMons[] =
+{
+ {26, 26, SPECIES_POOCHYENA},
+ {26, 26, SPECIES_SHUPPET},
+ {26, 26, SPECIES_MIGHTYENA},
+ {28, 28, SPECIES_SHUPPET},
+ {28, 28, SPECIES_MIGHTYENA},
+ {26, 26, SPECIES_ODDISH},
+ {28, 28, SPECIES_ODDISH},
+ {28, 28, SPECIES_GLOOM},
+ {26, 26, SPECIES_WINGULL},
+ {27, 27, SPECIES_WINGULL},
+ {28, 28, SPECIES_WINGULL},
+ {25, 25, SPECIES_KECLEON},
+};
+
+const struct WildPokemonInfo gRoute121_LandMonsInfo = {20, gRoute121_LandMons};
+
+const struct WildPokemon gRoute121_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute121_WaterMonsInfo = {4, gRoute121_WaterMons};
+
+const struct WildPokemon gRoute121_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute121_FishingMonsInfo = {30, gRoute121_FishingMons};
+
+const struct WildPokemon gRoute122_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute122_WaterMonsInfo = {4, gRoute122_WaterMons};
+
+const struct WildPokemon gRoute122_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute122_FishingMonsInfo = {30, gRoute122_FishingMons};
+
+const struct WildPokemon gRoute123_LandMons[] =
+{
+ {26, 26, SPECIES_POOCHYENA},
+ {26, 26, SPECIES_SHUPPET},
+ {26, 26, SPECIES_MIGHTYENA},
+ {28, 28, SPECIES_SHUPPET},
+ {28, 28, SPECIES_MIGHTYENA},
+ {26, 26, SPECIES_ODDISH},
+ {28, 28, SPECIES_ODDISH},
+ {28, 28, SPECIES_GLOOM},
+ {26, 26, SPECIES_WINGULL},
+ {27, 27, SPECIES_WINGULL},
+ {28, 28, SPECIES_WINGULL},
+ {25, 25, SPECIES_KECLEON},
+};
+
+const struct WildPokemonInfo gRoute123_LandMonsInfo = {20, gRoute123_LandMons};
+
+const struct WildPokemon gRoute123_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute123_WaterMonsInfo = {4, gRoute123_WaterMons};
+
+const struct WildPokemon gRoute123_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute123_FishingMonsInfo = {30, gRoute123_FishingMons};
+
+const struct WildPokemon gMtPyre_2F_LandMons[] =
+{
+ {27, 27, SPECIES_SHUPPET},
+ {28, 28, SPECIES_SHUPPET},
+ {26, 26, SPECIES_SHUPPET},
+ {25, 25, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {23, 23, SPECIES_SHUPPET},
+ {22, 22, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+};
+
+const struct WildPokemonInfo gMtPyre_2F_LandMonsInfo = {10, gMtPyre_2F_LandMons};
+
+const struct WildPokemon gMtPyre_3F_LandMons[] =
+{
+ {27, 27, SPECIES_SHUPPET},
+ {28, 28, SPECIES_SHUPPET},
+ {26, 26, SPECIES_SHUPPET},
+ {25, 25, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {23, 23, SPECIES_SHUPPET},
+ {22, 22, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+};
+
+const struct WildPokemonInfo gMtPyre_3F_LandMonsInfo = {10, gMtPyre_3F_LandMons};
+
+const struct WildPokemon gMtPyre_4F_LandMons[] =
+{
+ {27, 27, SPECIES_SHUPPET},
+ {28, 28, SPECIES_SHUPPET},
+ {26, 26, SPECIES_SHUPPET},
+ {25, 25, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {23, 23, SPECIES_SHUPPET},
+ {22, 22, SPECIES_SHUPPET},
+ {27, 27, SPECIES_DUSKULL},
+ {27, 27, SPECIES_DUSKULL},
+ {25, 25, SPECIES_DUSKULL},
+ {29, 29, SPECIES_DUSKULL},
+};
+
+const struct WildPokemonInfo gMtPyre_4F_LandMonsInfo = {10, gMtPyre_4F_LandMons};
+
+const struct WildPokemon gMtPyre_5F_LandMons[] =
+{
+ {27, 27, SPECIES_SHUPPET},
+ {28, 28, SPECIES_SHUPPET},
+ {26, 26, SPECIES_SHUPPET},
+ {25, 25, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {23, 23, SPECIES_SHUPPET},
+ {22, 22, SPECIES_SHUPPET},
+ {27, 27, SPECIES_DUSKULL},
+ {27, 27, SPECIES_DUSKULL},
+ {25, 25, SPECIES_DUSKULL},
+ {29, 29, SPECIES_DUSKULL},
+};
+
+const struct WildPokemonInfo gMtPyre_5F_LandMonsInfo = {10, gMtPyre_5F_LandMons};
+
+const struct WildPokemon gMtPyre_6F_LandMons[] =
+{
+ {27, 27, SPECIES_SHUPPET},
+ {28, 28, SPECIES_SHUPPET},
+ {26, 26, SPECIES_SHUPPET},
+ {25, 25, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {23, 23, SPECIES_SHUPPET},
+ {22, 22, SPECIES_SHUPPET},
+ {27, 27, SPECIES_DUSKULL},
+ {27, 27, SPECIES_DUSKULL},
+ {25, 25, SPECIES_DUSKULL},
+ {29, 29, SPECIES_DUSKULL},
+};
+
+const struct WildPokemonInfo gMtPyre_6F_LandMonsInfo = {10, gMtPyre_6F_LandMons};
+
+const struct WildPokemon gMtPyre_Exterior_LandMons[] =
+{
+ {27, 27, SPECIES_SHUPPET},
+ {27, 27, SPECIES_SHUPPET},
+ {28, 28, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {29, 29, SPECIES_VULPIX},
+ {27, 27, SPECIES_VULPIX},
+ {29, 29, SPECIES_VULPIX},
+ {25, 25, SPECIES_VULPIX},
+ {27, 27, SPECIES_WINGULL},
+ {27, 27, SPECIES_WINGULL},
+ {26, 26, SPECIES_WINGULL},
+ {28, 28, SPECIES_WINGULL},
+};
+
+const struct WildPokemonInfo gMtPyre_Exterior_LandMonsInfo = {10, gMtPyre_Exterior_LandMons};
+
+const struct WildPokemon gMtPyre_Summit_LandMons[] =
+{
+ {28, 28, SPECIES_SHUPPET},
+ {29, 29, SPECIES_SHUPPET},
+ {27, 27, SPECIES_SHUPPET},
+ {26, 26, SPECIES_SHUPPET},
+ {30, 30, SPECIES_SHUPPET},
+ {25, 25, SPECIES_SHUPPET},
+ {24, 24, SPECIES_SHUPPET},
+ {28, 28, SPECIES_DUSKULL},
+ {26, 26, SPECIES_DUSKULL},
+ {30, 30, SPECIES_DUSKULL},
+ {28, 28, SPECIES_CHIMECHO},
+ {28, 28, SPECIES_CHIMECHO},
+};
+
+const struct WildPokemonInfo gMtPyre_Summit_LandMonsInfo = {10, gMtPyre_Summit_LandMons};
+
+const struct WildPokemon gGraniteCave_StevensRoom_LandMons[] =
+{
+ {7, 7, SPECIES_ZUBAT},
+ {8, 8, SPECIES_MAKUHITA},
+ {7, 7, SPECIES_MAKUHITA},
+ {8, 8, SPECIES_ZUBAT},
+ {9, 9, SPECIES_MAKUHITA},
+ {8, 8, SPECIES_ABRA},
+ {10, 10, SPECIES_MAKUHITA},
+ {6, 6, SPECIES_MAKUHITA},
+ {7, 7, SPECIES_ARON},
+ {8, 8, SPECIES_ARON},
+ {7, 7, SPECIES_ARON},
+ {8, 8, SPECIES_ARON},
+};
+
+const struct WildPokemonInfo gGraniteCave_StevensRoom_LandMonsInfo = {10, gGraniteCave_StevensRoom_LandMons};
+
+const struct WildPokemon gRoute125_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute125_WaterMonsInfo = {4, gRoute125_WaterMons};
+
+const struct WildPokemon gRoute125_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute125_FishingMonsInfo = {30, gRoute125_FishingMons};
+
+const struct WildPokemon gRoute126_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute126_WaterMonsInfo = {4, gRoute126_WaterMons};
+
+const struct WildPokemon gRoute126_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute126_FishingMonsInfo = {30, gRoute126_FishingMons};
+
+const struct WildPokemon gRoute127_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute127_WaterMonsInfo = {4, gRoute127_WaterMons};
+
+const struct WildPokemon gRoute127_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute127_FishingMonsInfo = {30, gRoute127_FishingMons};
+
+const struct WildPokemon gRoute128_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute128_WaterMonsInfo = {4, gRoute128_WaterMons};
+
+const struct WildPokemon gRoute128_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_LUVDISC},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_LUVDISC},
+ {30, 35, SPECIES_WAILMER},
+ {30, 35, SPECIES_CORSOLA},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute128_FishingMonsInfo = {30, gRoute128_FishingMons};
+
+const struct WildPokemon gRoute129_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_WAILORD},
+};
+
+const struct WildPokemonInfo gRoute129_WaterMonsInfo = {4, gRoute129_WaterMons};
+
+const struct WildPokemon gRoute129_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute129_FishingMonsInfo = {30, gRoute129_FishingMons};
+
+const struct WildPokemon gRoute130_LandMons[] =
+{
+ {30, 30, SPECIES_WYNAUT},
+ {35, 35, SPECIES_WYNAUT},
+ {25, 25, SPECIES_WYNAUT},
+ {40, 40, SPECIES_WYNAUT},
+ {20, 20, SPECIES_WYNAUT},
+ {45, 45, SPECIES_WYNAUT},
+ {15, 15, SPECIES_WYNAUT},
+ {50, 50, SPECIES_WYNAUT},
+ {10, 10, SPECIES_WYNAUT},
+ {5, 5, SPECIES_WYNAUT},
+ {10, 10, SPECIES_WYNAUT},
+ {5, 5, SPECIES_WYNAUT},
+};
+
+const struct WildPokemonInfo gRoute130_LandMonsInfo = {20, gRoute130_LandMons};
+
+const struct WildPokemon gRoute130_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute130_WaterMonsInfo = {4, gRoute130_WaterMons};
+
+const struct WildPokemon gRoute130_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute130_FishingMonsInfo = {30, gRoute130_FishingMons};
+
+const struct WildPokemon gRoute131_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute131_WaterMonsInfo = {4, gRoute131_WaterMons};
+
+const struct WildPokemon gRoute131_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute131_FishingMonsInfo = {30, gRoute131_FishingMons};
+
+const struct WildPokemon gRoute132_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute132_WaterMonsInfo = {4, gRoute132_WaterMons};
+
+const struct WildPokemon gRoute132_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_HORSEA},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute132_FishingMonsInfo = {30, gRoute132_FishingMons};
+
+const struct WildPokemon gRoute133_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute133_WaterMonsInfo = {4, gRoute133_WaterMons};
+
+const struct WildPokemon gRoute133_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_HORSEA},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute133_FishingMonsInfo = {30, gRoute133_FishingMons};
+
+const struct WildPokemon gRoute134_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gRoute134_WaterMonsInfo = {4, gRoute134_WaterMons};
+
+const struct WildPokemon gRoute134_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_HORSEA},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gRoute134_FishingMonsInfo = {30, gRoute134_FishingMons};
+
+const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_TENTACOOL},
+ {30, 35, SPECIES_TENTACRUEL},
+};
+
+const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo = {4, gAbandonedShip_HiddenFloorCorridors_WaterMons};
+
+const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_TENTACOOL},
+ {25, 30, SPECIES_TENTACOOL},
+ {30, 35, SPECIES_TENTACOOL},
+ {30, 35, SPECIES_TENTACRUEL},
+ {25, 30, SPECIES_TENTACRUEL},
+ {20, 25, SPECIES_TENTACRUEL},
+};
+
+const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo = {20, gAbandonedShip_HiddenFloorCorridors_FishingMons};
+
+const struct WildPokemon gSeafloorCavern_Room1_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room1_LandMonsInfo = {4, gSeafloorCavern_Room1_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Room2_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room2_LandMonsInfo = {4, gSeafloorCavern_Room2_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Room3_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room3_LandMonsInfo = {4, gSeafloorCavern_Room3_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Room4_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room4_LandMonsInfo = {4, gSeafloorCavern_Room4_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Room5_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room5_LandMonsInfo = {4, gSeafloorCavern_Room5_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Room6_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room6_LandMonsInfo = {4, gSeafloorCavern_Room6_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Room6_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_ZUBAT},
+ {30, 35, SPECIES_ZUBAT},
+ {30, 35, SPECIES_GOLBAT},
+ {30, 35, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room6_WaterMonsInfo = {4, gSeafloorCavern_Room6_WaterMons};
+
+const struct WildPokemon gSeafloorCavern_Room6_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room6_FishingMonsInfo = {10, gSeafloorCavern_Room6_FishingMons};
+
+const struct WildPokemon gSeafloorCavern_Room7_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room7_LandMonsInfo = {4, gSeafloorCavern_Room7_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Room7_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_ZUBAT},
+ {30, 35, SPECIES_ZUBAT},
+ {30, 35, SPECIES_GOLBAT},
+ {30, 35, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room7_WaterMonsInfo = {4, gSeafloorCavern_Room7_WaterMons};
+
+const struct WildPokemon gSeafloorCavern_Room7_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room7_FishingMonsInfo = {10, gSeafloorCavern_Room7_FishingMons};
+
+const struct WildPokemon gSeafloorCavern_Room8_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Room8_LandMonsInfo = {4, gSeafloorCavern_Room8_LandMons};
+
+const struct WildPokemon gSeafloorCavern_Entrance_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_ZUBAT},
+ {30, 35, SPECIES_ZUBAT},
+ {30, 35, SPECIES_GOLBAT},
+ {30, 35, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Entrance_WaterMonsInfo = {4, gSeafloorCavern_Entrance_WaterMons};
+
+const struct WildPokemon gSeafloorCavern_Entrance_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gSeafloorCavern_Entrance_FishingMonsInfo = {10, gSeafloorCavern_Entrance_FishingMons};
+
+const struct WildPokemon gCaveOfOrigin_Entrance_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {33, 33, SPECIES_ZUBAT},
+ {28, 28, SPECIES_ZUBAT},
+ {29, 29, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {35, 35, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gCaveOfOrigin_Entrance_LandMonsInfo = {4, gCaveOfOrigin_Entrance_LandMons};
+
+const struct WildPokemon gCaveOfOrigin_1F_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SABLEYE},
+ {32, 32, SPECIES_SABLEYE},
+ {34, 34, SPECIES_SABLEYE},
+ {33, 33, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gCaveOfOrigin_1F_LandMonsInfo = {4, gCaveOfOrigin_1F_LandMons};
+
+const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap1_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SABLEYE},
+ {32, 32, SPECIES_SABLEYE},
+ {34, 34, SPECIES_SABLEYE},
+ {33, 33, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap1_LandMons};
+
+const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap2_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SABLEYE},
+ {32, 32, SPECIES_SABLEYE},
+ {34, 34, SPECIES_SABLEYE},
+ {33, 33, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap2_LandMons};
+
+const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap3_LandMons[] =
+{
+ {30, 30, SPECIES_ZUBAT},
+ {31, 31, SPECIES_ZUBAT},
+ {32, 32, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SABLEYE},
+ {32, 32, SPECIES_SABLEYE},
+ {34, 34, SPECIES_SABLEYE},
+ {33, 33, SPECIES_ZUBAT},
+ {34, 34, SPECIES_ZUBAT},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {36, 36, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap3_LandMons};
+
+const struct WildPokemon gNewMauville_Entrance_LandMons[] =
+{
+ {24, 24, SPECIES_VOLTORB},
+ {24, 24, SPECIES_MAGNEMITE},
+ {25, 25, SPECIES_VOLTORB},
+ {25, 25, SPECIES_MAGNEMITE},
+ {23, 23, SPECIES_VOLTORB},
+ {23, 23, SPECIES_MAGNEMITE},
+ {26, 26, SPECIES_VOLTORB},
+ {26, 26, SPECIES_MAGNEMITE},
+ {22, 22, SPECIES_VOLTORB},
+ {22, 22, SPECIES_MAGNEMITE},
+ {22, 22, SPECIES_VOLTORB},
+ {22, 22, SPECIES_MAGNEMITE},
+};
+
+const struct WildPokemonInfo gNewMauville_Entrance_LandMonsInfo = {10, gNewMauville_Entrance_LandMons};
+
+const struct WildPokemon gSafariZone_Southwest_LandMons[] =
+{
+ {25, 25, SPECIES_ODDISH},
+ {27, 27, SPECIES_ODDISH},
+ {25, 25, SPECIES_GIRAFARIG},
+ {27, 27, SPECIES_GIRAFARIG},
+ {25, 25, SPECIES_NATU},
+ {27, 27, SPECIES_DODUO},
+ {25, 25, SPECIES_GLOOM},
+ {27, 27, SPECIES_WOBBUFFET},
+ {25, 25, SPECIES_PIKACHU},
+ {27, 27, SPECIES_WOBBUFFET},
+ {27, 27, SPECIES_PIKACHU},
+ {29, 29, SPECIES_WOBBUFFET},
+};
+
+const struct WildPokemonInfo gSafariZone_Southwest_LandMonsInfo = {25, gSafariZone_Southwest_LandMons};
+
+const struct WildPokemon gSafariZone_Southwest_WaterMons[] =
+{
+ {20, 30, SPECIES_PSYDUCK},
+ {20, 30, SPECIES_PSYDUCK},
+ {30, 35, SPECIES_PSYDUCK},
+ {30, 35, SPECIES_PSYDUCK},
+ {30, 35, SPECIES_PSYDUCK},
+};
+
+const struct WildPokemonInfo gSafariZone_Southwest_WaterMonsInfo = {9, gSafariZone_Southwest_WaterMons};
+
+const struct WildPokemon gSafariZone_Southwest_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 25, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_GOLDEEN},
+ {25, 30, SPECIES_GOLDEEN},
+ {30, 35, SPECIES_GOLDEEN},
+ {30, 35, SPECIES_SEAKING},
+ {35, 40, SPECIES_SEAKING},
+ {25, 30, SPECIES_SEAKING},
+};
+
+const struct WildPokemonInfo gSafariZone_Southwest_FishingMonsInfo = {35, gSafariZone_Southwest_FishingMons};
+
+const struct WildPokemon gSafariZone_North_LandMons[] =
+{
+ {27, 27, SPECIES_PHANPY},
+ {27, 27, SPECIES_ODDISH},
+ {29, 29, SPECIES_PHANPY},
+ {29, 29, SPECIES_ODDISH},
+ {27, 27, SPECIES_NATU},
+ {29, 29, SPECIES_GLOOM},
+ {31, 31, SPECIES_GLOOM},
+ {29, 29, SPECIES_NATU},
+ {29, 29, SPECIES_XATU},
+ {27, 27, SPECIES_HERACROSS},
+ {31, 31, SPECIES_XATU},
+ {29, 29, SPECIES_HERACROSS},
+};
+
+const struct WildPokemonInfo gSafariZone_North_LandMonsInfo = {25, gSafariZone_North_LandMons};
+
+const struct WildPokemon gSafariZone_North_RockSmashMons[] =
+{
+ {10, 15, SPECIES_GEODUDE},
+ {5, 10, SPECIES_GEODUDE},
+ {15, 20, SPECIES_GEODUDE},
+ {20, 25, SPECIES_GEODUDE},
+ {25, 30, SPECIES_GEODUDE},
+};
+
+const struct WildPokemonInfo gSafariZone_North_RockSmashMonsInfo = {25, gSafariZone_North_RockSmashMons};
+
+const struct WildPokemon gSafariZone_Northwest_LandMons[] =
+{
+ {27, 27, SPECIES_RHYHORN},
+ {27, 27, SPECIES_ODDISH},
+ {29, 29, SPECIES_RHYHORN},
+ {29, 29, SPECIES_ODDISH},
+ {27, 27, SPECIES_DODUO},
+ {29, 29, SPECIES_GLOOM},
+ {31, 31, SPECIES_GLOOM},
+ {29, 29, SPECIES_DODUO},
+ {29, 29, SPECIES_DODRIO},
+ {27, 27, SPECIES_PINSIR},
+ {31, 31, SPECIES_DODRIO},
+ {29, 29, SPECIES_PINSIR},
+};
+
+const struct WildPokemonInfo gSafariZone_Northwest_LandMonsInfo = {25, gSafariZone_Northwest_LandMons};
+
+const struct WildPokemon gSafariZone_Northwest_WaterMons[] =
+{
+ {20, 30, SPECIES_PSYDUCK},
+ {20, 30, SPECIES_PSYDUCK},
+ {30, 35, SPECIES_PSYDUCK},
+ {30, 35, SPECIES_GOLDUCK},
+ {25, 40, SPECIES_GOLDUCK},
+};
+
+const struct WildPokemonInfo gSafariZone_Northwest_WaterMonsInfo = {9, gSafariZone_Northwest_WaterMons};
+
+const struct WildPokemon gSafariZone_Northwest_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 25, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_GOLDEEN},
+ {25, 30, SPECIES_GOLDEEN},
+ {30, 35, SPECIES_GOLDEEN},
+ {30, 35, SPECIES_SEAKING},
+ {35, 40, SPECIES_SEAKING},
+ {25, 30, SPECIES_SEAKING},
+};
+
+const struct WildPokemonInfo gSafariZone_Northwest_FishingMonsInfo = {35, gSafariZone_Northwest_FishingMons};
+
+const struct WildPokemon gVictoryRoad_B1F_LandMons[] =
+{
+ {40, 40, SPECIES_GOLBAT},
+ {40, 40, SPECIES_HARIYAMA},
+ {40, 40, SPECIES_LAIRON},
+ {40, 40, SPECIES_LAIRON},
+ {38, 38, SPECIES_GOLBAT},
+ {38, 38, SPECIES_HARIYAMA},
+ {42, 42, SPECIES_GOLBAT},
+ {42, 42, SPECIES_HARIYAMA},
+ {42, 42, SPECIES_LAIRON},
+ {38, 38, SPECIES_MAWILE},
+ {42, 42, SPECIES_LAIRON},
+ {38, 38, SPECIES_MAWILE},
+};
+
+const struct WildPokemonInfo gVictoryRoad_B1F_LandMonsInfo = {10, gVictoryRoad_B1F_LandMons};
+
+const struct WildPokemon gVictoryRoad_B1F_RockSmashMons[] =
+{
+ {30, 40, SPECIES_GRAVELER},
+ {30, 40, SPECIES_GEODUDE},
+ {35, 40, SPECIES_GRAVELER},
+ {35, 40, SPECIES_GRAVELER},
+ {35, 40, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gVictoryRoad_B1F_RockSmashMonsInfo = {20, gVictoryRoad_B1F_RockSmashMons};
+
+const struct WildPokemon gVictoryRoad_B2F_LandMons[] =
+{
+ {40, 40, SPECIES_GOLBAT},
+ {40, 40, SPECIES_SABLEYE},
+ {40, 40, SPECIES_LAIRON},
+ {40, 40, SPECIES_LAIRON},
+ {42, 42, SPECIES_GOLBAT},
+ {42, 42, SPECIES_SABLEYE},
+ {44, 44, SPECIES_GOLBAT},
+ {44, 44, SPECIES_SABLEYE},
+ {42, 42, SPECIES_LAIRON},
+ {42, 42, SPECIES_MAWILE},
+ {44, 44, SPECIES_LAIRON},
+ {44, 44, SPECIES_MAWILE},
+};
+
+const struct WildPokemonInfo gVictoryRoad_B2F_LandMonsInfo = {10, gVictoryRoad_B2F_LandMons};
+
+const struct WildPokemon gVictoryRoad_B2F_WaterMons[] =
+{
+ {30, 35, SPECIES_GOLBAT},
+ {25, 30, SPECIES_GOLBAT},
+ {35, 40, SPECIES_GOLBAT},
+ {35, 40, SPECIES_GOLBAT},
+ {35, 40, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gVictoryRoad_B2F_WaterMonsInfo = {4, gVictoryRoad_B2F_WaterMons};
+
+const struct WildPokemon gVictoryRoad_B2F_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {30, 35, SPECIES_WHISCASH},
+ {35, 40, SPECIES_WHISCASH},
+ {40, 45, SPECIES_WHISCASH},
+};
+
+const struct WildPokemonInfo gVictoryRoad_B2F_FishingMonsInfo = {30, gVictoryRoad_B2F_FishingMons};
+
+const struct WildPokemon gMeteorFalls_1F_1R_LandMons[] =
+{
+ {16, 16, SPECIES_ZUBAT},
+ {17, 17, SPECIES_ZUBAT},
+ {18, 18, SPECIES_ZUBAT},
+ {15, 15, SPECIES_ZUBAT},
+ {14, 14, SPECIES_ZUBAT},
+ {16, 16, SPECIES_SOLROCK},
+ {18, 18, SPECIES_SOLROCK},
+ {14, 14, SPECIES_SOLROCK},
+ {19, 19, SPECIES_ZUBAT},
+ {20, 20, SPECIES_ZUBAT},
+ {19, 19, SPECIES_ZUBAT},
+ {20, 20, SPECIES_ZUBAT},
+};
+
+const struct WildPokemonInfo gMeteorFalls_1F_1R_LandMonsInfo = {10, gMeteorFalls_1F_1R_LandMons};
+
+const struct WildPokemon gMeteorFalls_1F_1R_WaterMons[] =
+{
+ {5, 35, SPECIES_ZUBAT},
+ {30, 35, SPECIES_ZUBAT},
+ {25, 35, SPECIES_SOLROCK},
+ {15, 25, SPECIES_SOLROCK},
+ {5, 15, SPECIES_SOLROCK},
+};
+
+const struct WildPokemonInfo gMeteorFalls_1F_1R_WaterMonsInfo = {4, gMeteorFalls_1F_1R_WaterMons};
+
+const struct WildPokemon gMeteorFalls_1F_1R_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {20, 25, SPECIES_BARBOACH},
+ {35, 40, SPECIES_BARBOACH},
+ {40, 45, SPECIES_BARBOACH},
+};
+
+const struct WildPokemonInfo gMeteorFalls_1F_1R_FishingMonsInfo = {30, gMeteorFalls_1F_1R_FishingMons};
+
+const struct WildPokemon gMeteorFalls_1F_2R_LandMons[] =
+{
+ {33, 33, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {35, 35, SPECIES_SOLROCK},
+ {33, 33, SPECIES_SOLROCK},
+ {37, 37, SPECIES_SOLROCK},
+ {35, 35, SPECIES_GOLBAT},
+ {39, 39, SPECIES_SOLROCK},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gMeteorFalls_1F_2R_LandMonsInfo = {10, gMeteorFalls_1F_2R_LandMons};
+
+const struct WildPokemon gMeteorFalls_1F_2R_WaterMons[] =
+{
+ {30, 35, SPECIES_GOLBAT},
+ {30, 35, SPECIES_GOLBAT},
+ {25, 35, SPECIES_SOLROCK},
+ {15, 25, SPECIES_SOLROCK},
+ {5, 15, SPECIES_SOLROCK},
+};
+
+const struct WildPokemonInfo gMeteorFalls_1F_2R_WaterMonsInfo = {4, gMeteorFalls_1F_2R_WaterMons};
+
+const struct WildPokemon gMeteorFalls_1F_2R_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {30, 35, SPECIES_WHISCASH},
+ {35, 40, SPECIES_WHISCASH},
+ {40, 45, SPECIES_WHISCASH},
+};
+
+const struct WildPokemonInfo gMeteorFalls_1F_2R_FishingMonsInfo = {30, gMeteorFalls_1F_2R_FishingMons};
+
+const struct WildPokemon gMeteorFalls_B1F_1R_LandMons[] =
+{
+ {33, 33, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {35, 35, SPECIES_SOLROCK},
+ {33, 33, SPECIES_SOLROCK},
+ {37, 37, SPECIES_SOLROCK},
+ {35, 35, SPECIES_GOLBAT},
+ {39, 39, SPECIES_SOLROCK},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gMeteorFalls_B1F_1R_LandMonsInfo = {10, gMeteorFalls_B1F_1R_LandMons};
+
+const struct WildPokemon gMeteorFalls_B1F_1R_WaterMons[] =
+{
+ {30, 35, SPECIES_GOLBAT},
+ {30, 35, SPECIES_GOLBAT},
+ {25, 35, SPECIES_SOLROCK},
+ {15, 25, SPECIES_SOLROCK},
+ {5, 15, SPECIES_SOLROCK},
+};
+
+const struct WildPokemonInfo gMeteorFalls_B1F_1R_WaterMonsInfo = {4, gMeteorFalls_B1F_1R_WaterMons};
+
+const struct WildPokemon gMeteorFalls_B1F_1R_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_BARBOACH},
+ {25, 30, SPECIES_BARBOACH},
+ {30, 35, SPECIES_BARBOACH},
+ {30, 35, SPECIES_WHISCASH},
+ {35, 40, SPECIES_WHISCASH},
+ {40, 45, SPECIES_WHISCASH},
+};
+
+const struct WildPokemonInfo gMeteorFalls_B1F_1R_FishingMonsInfo = {30, gMeteorFalls_B1F_1R_FishingMons};
+
+const struct WildPokemon gShoalCave_LowTideStairsRoom_LandMons[] =
+{
+ {26, 26, SPECIES_ZUBAT},
+ {26, 26, SPECIES_SPHEAL},
+ {28, 28, SPECIES_ZUBAT},
+ {28, 28, SPECIES_SPHEAL},
+ {30, 30, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SPHEAL},
+ {32, 32, SPECIES_ZUBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideStairsRoom_LandMonsInfo = {10, gShoalCave_LowTideStairsRoom_LandMons};
+
+const struct WildPokemon gShoalCave_LowTideLowerRoom_LandMons[] =
+{
+ {26, 26, SPECIES_ZUBAT},
+ {26, 26, SPECIES_SPHEAL},
+ {28, 28, SPECIES_ZUBAT},
+ {28, 28, SPECIES_SPHEAL},
+ {30, 30, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SPHEAL},
+ {32, 32, SPECIES_ZUBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideLowerRoom_LandMonsInfo = {10, gShoalCave_LowTideLowerRoom_LandMons};
+
+const struct WildPokemon gShoalCave_LowTideInnerRoom_LandMons[] =
+{
+ {26, 26, SPECIES_ZUBAT},
+ {26, 26, SPECIES_SPHEAL},
+ {28, 28, SPECIES_ZUBAT},
+ {28, 28, SPECIES_SPHEAL},
+ {30, 30, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SPHEAL},
+ {32, 32, SPECIES_ZUBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_LandMonsInfo = {10, gShoalCave_LowTideInnerRoom_LandMons};
+
+const struct WildPokemon gShoalCave_LowTideInnerRoom_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_ZUBAT},
+ {25, 30, SPECIES_SPHEAL},
+ {25, 30, SPECIES_SPHEAL},
+ {25, 35, SPECIES_SPHEAL},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_WaterMonsInfo = {4, gShoalCave_LowTideInnerRoom_WaterMons};
+
+const struct WildPokemon gShoalCave_LowTideInnerRoom_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_FishingMonsInfo = {10, gShoalCave_LowTideInnerRoom_FishingMons};
+
+const struct WildPokemon gShoalCave_LowTideEntranceRoom_LandMons[] =
+{
+ {26, 26, SPECIES_ZUBAT},
+ {26, 26, SPECIES_SPHEAL},
+ {28, 28, SPECIES_ZUBAT},
+ {28, 28, SPECIES_SPHEAL},
+ {30, 30, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SPHEAL},
+ {32, 32, SPECIES_ZUBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+ {32, 32, SPECIES_GOLBAT},
+ {32, 32, SPECIES_SPHEAL},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_LandMonsInfo = {10, gShoalCave_LowTideEntranceRoom_LandMons};
+
+const struct WildPokemon gShoalCave_LowTideEntranceRoom_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {5, 35, SPECIES_ZUBAT},
+ {25, 30, SPECIES_SPHEAL},
+ {25, 30, SPECIES_SPHEAL},
+ {25, 35, SPECIES_SPHEAL},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_WaterMonsInfo = {4, gShoalCave_LowTideEntranceRoom_WaterMons};
+
+const struct WildPokemon gShoalCave_LowTideEntranceRoom_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_FishingMonsInfo = {10, gShoalCave_LowTideEntranceRoom_FishingMons};
+
+const struct WildPokemon gLilycoveCity_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gLilycoveCity_WaterMonsInfo = {4, gLilycoveCity_WaterMons};
+
+const struct WildPokemon gLilycoveCity_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_STARYU},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gLilycoveCity_FishingMonsInfo = {10, gLilycoveCity_FishingMons};
+
+const struct WildPokemon gDewfordTown_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gDewfordTown_WaterMonsInfo = {4, gDewfordTown_WaterMons};
+
+const struct WildPokemon gDewfordTown_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gDewfordTown_FishingMonsInfo = {10, gDewfordTown_FishingMons};
+
+const struct WildPokemon gSlateportCity_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gSlateportCity_WaterMonsInfo = {4, gSlateportCity_WaterMons};
+
+const struct WildPokemon gSlateportCity_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_WAILMER},
+ {20, 25, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gSlateportCity_FishingMonsInfo = {10, gSlateportCity_FishingMons};
+
+const struct WildPokemon gMossdeepCity_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gMossdeepCity_WaterMonsInfo = {4, gMossdeepCity_WaterMons};
+
+const struct WildPokemon gMossdeepCity_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gMossdeepCity_FishingMonsInfo = {10, gMossdeepCity_FishingMons};
+
+const struct WildPokemon gPacifidlogTown_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gPacifidlogTown_WaterMonsInfo = {4, gPacifidlogTown_WaterMons};
+
+const struct WildPokemon gPacifidlogTown_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_SHARPEDO},
+ {30, 35, SPECIES_WAILMER},
+ {25, 30, SPECIES_WAILMER},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gPacifidlogTown_FishingMonsInfo = {10, gPacifidlogTown_FishingMons};
+
+const struct WildPokemon gEverGrandeCity_WaterMons[] =
+{
+ {5, 35, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_WINGULL},
+ {15, 25, SPECIES_WINGULL},
+ {25, 30, SPECIES_PELIPPER},
+ {25, 30, SPECIES_PELIPPER},
+};
+
+const struct WildPokemonInfo gEverGrandeCity_WaterMonsInfo = {4, gEverGrandeCity_WaterMons};
+
+const struct WildPokemon gEverGrandeCity_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_LUVDISC},
+ {10, 30, SPECIES_WAILMER},
+ {30, 35, SPECIES_LUVDISC},
+ {30, 35, SPECIES_WAILMER},
+ {30, 35, SPECIES_CORSOLA},
+ {35, 40, SPECIES_WAILMER},
+ {40, 45, SPECIES_WAILMER},
+};
+
+const struct WildPokemonInfo gEverGrandeCity_FishingMonsInfo = {10, gEverGrandeCity_FishingMons};
+
+const struct WildPokemon gPetalburgCity_WaterMons[] =
+{
+ {20, 30, SPECIES_MARILL},
+ {10, 20, SPECIES_MARILL},
+ {30, 35, SPECIES_MARILL},
+ {5, 10, SPECIES_MARILL},
+ {5, 10, SPECIES_MARILL},
+};
+
+const struct WildPokemonInfo gPetalburgCity_WaterMonsInfo = {1, gPetalburgCity_WaterMons};
+
+const struct WildPokemon gPetalburgCity_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_GOLDEEN},
+ {10, 30, SPECIES_CORPHISH},
+ {25, 30, SPECIES_CORPHISH},
+ {30, 35, SPECIES_CORPHISH},
+ {20, 25, SPECIES_CORPHISH},
+ {35, 40, SPECIES_CORPHISH},
+ {40, 45, SPECIES_CORPHISH},
+};
+
+const struct WildPokemonInfo gPetalburgCity_FishingMonsInfo = {10, gPetalburgCity_FishingMons};
+
+const struct WildPokemon gUnderwater1_WaterMons[] =
+{
+ {20, 30, SPECIES_CLAMPERL},
+ {20, 30, SPECIES_CHINCHOU},
+ {30, 35, SPECIES_CLAMPERL},
+ {30, 35, SPECIES_RELICANTH},
+ {30, 35, SPECIES_RELICANTH},
+};
+
+const struct WildPokemonInfo gUnderwater1_WaterMonsInfo = {4, gUnderwater1_WaterMons};
+
+const struct WildPokemon gShoalCave_LowTideIceRoom_LandMons[] =
+{
+ {26, 26, SPECIES_ZUBAT},
+ {26, 26, SPECIES_SPHEAL},
+ {28, 28, SPECIES_ZUBAT},
+ {28, 28, SPECIES_SPHEAL},
+ {30, 30, SPECIES_ZUBAT},
+ {30, 30, SPECIES_SPHEAL},
+ {26, 26, SPECIES_SNORUNT},
+ {32, 32, SPECIES_SPHEAL},
+ {30, 30, SPECIES_GOLBAT},
+ {28, 28, SPECIES_SNORUNT},
+ {32, 32, SPECIES_GOLBAT},
+ {30, 30, SPECIES_SNORUNT},
+};
+
+const struct WildPokemonInfo gShoalCave_LowTideIceRoom_LandMonsInfo = {10, gShoalCave_LowTideIceRoom_LandMons};
+
+const struct WildPokemon gSkyPillar_1F_LandMons[] =
+{
+ {33, 33, SPECIES_SABLEYE},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {34, 34, SPECIES_SABLEYE},
+ {36, 36, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_BANETTE},
+ {38, 38, SPECIES_BANETTE},
+ {36, 36, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_CLAYDOL},
+ {38, 38, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_CLAYDOL},
+ {38, 38, SPECIES_CLAYDOL},
+};
+
+const struct WildPokemonInfo gSkyPillar_1F_LandMonsInfo = {10, gSkyPillar_1F_LandMons};
+
+const struct WildPokemon gSootopolisCity_WaterMons[] =
+{
+ {5, 35, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_MAGIKARP},
+ {15, 25, SPECIES_MAGIKARP},
+ {25, 30, SPECIES_MAGIKARP},
+ {25, 30, SPECIES_MAGIKARP},
+};
+
+const struct WildPokemonInfo gSootopolisCity_WaterMonsInfo = {1, gSootopolisCity_WaterMons};
+
+const struct WildPokemon gSootopolisCity_FishingMons[] =
+{
+ {5, 10, SPECIES_MAGIKARP},
+ {5, 10, SPECIES_TENTACOOL},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_MAGIKARP},
+ {10, 30, SPECIES_MAGIKARP},
+ {30, 35, SPECIES_MAGIKARP},
+ {30, 35, SPECIES_MAGIKARP},
+ {35, 40, SPECIES_GYARADOS},
+ {35, 45, SPECIES_GYARADOS},
+ {5, 45, SPECIES_GYARADOS},
+};
+
+const struct WildPokemonInfo gSootopolisCity_FishingMonsInfo = {10, gSootopolisCity_FishingMons};
+
+const struct WildPokemon gSkyPillar_3F_LandMons[] =
+{
+ {33, 33, SPECIES_SABLEYE},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {34, 34, SPECIES_SABLEYE},
+ {36, 36, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_BANETTE},
+ {38, 38, SPECIES_BANETTE},
+ {36, 36, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_CLAYDOL},
+ {38, 38, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_CLAYDOL},
+ {38, 38, SPECIES_CLAYDOL},
+};
+
+const struct WildPokemonInfo gSkyPillar_3F_LandMonsInfo = {10, gSkyPillar_3F_LandMons};
+
+const struct WildPokemon gSkyPillar_5F_LandMons[] =
+{
+ {33, 33, SPECIES_SABLEYE},
+ {34, 34, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {34, 34, SPECIES_SABLEYE},
+ {36, 36, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_BANETTE},
+ {38, 38, SPECIES_BANETTE},
+ {36, 36, SPECIES_CLAYDOL},
+ {37, 37, SPECIES_CLAYDOL},
+ {38, 38, SPECIES_ALTARIA},
+ {39, 39, SPECIES_ALTARIA},
+ {39, 39, SPECIES_ALTARIA},
+};
+
+const struct WildPokemonInfo gSkyPillar_5F_LandMonsInfo = {10, gSkyPillar_5F_LandMons};
+
+const struct WildPokemon gSafariZone_Southeast_LandMons[] =
+{
+ {33, 33, SPECIES_SUNKERN},
+ {34, 34, SPECIES_MAREEP},
+ {35, 35, SPECIES_SUNKERN},
+ {36, 36, SPECIES_MAREEP},
+ {34, 34, SPECIES_AIPOM},
+ {33, 33, SPECIES_SPINARAK},
+ {35, 35, SPECIES_HOOTHOOT},
+ {34, 34, SPECIES_SNUBBULL},
+ {36, 36, SPECIES_STANTLER},
+ {37, 37, SPECIES_GLIGAR},
+ {39, 39, SPECIES_STANTLER},
+ {40, 40, SPECIES_GLIGAR},
+};
+
+const struct WildPokemonInfo gSafariZone_Southeast_LandMonsInfo = {25, gSafariZone_Southeast_LandMons};
+
+const struct WildPokemon gSafariZone_Southeast_WaterMons[] =
+{
+ {25, 30, SPECIES_WOOPER},
+ {25, 30, SPECIES_MARILL},
+ {25, 30, SPECIES_MARILL},
+ {30, 35, SPECIES_MARILL},
+ {35, 40, SPECIES_QUAGSIRE},
+};
+
+const struct WildPokemonInfo gSafariZone_Southeast_WaterMonsInfo = {9, gSafariZone_Southeast_WaterMons};
+
+const struct WildPokemon gSafariZone_Southeast_FishingMons[] =
+{
+ {25, 30, SPECIES_MAGIKARP},
+ {25, 30, SPECIES_GOLDEEN},
+ {25, 30, SPECIES_MAGIKARP},
+ {25, 30, SPECIES_GOLDEEN},
+ {30, 35, SPECIES_REMORAID},
+ {25, 30, SPECIES_GOLDEEN},
+ {25, 30, SPECIES_REMORAID},
+ {30, 35, SPECIES_REMORAID},
+ {30, 35, SPECIES_REMORAID},
+ {35, 40, SPECIES_OCTILLERY},
+};
+
+const struct WildPokemonInfo gSafariZone_Southeast_FishingMonsInfo = {35, gSafariZone_Southeast_FishingMons};
+
+const struct WildPokemon gSafariZone_Northeast_LandMons[] =
+{
+ {33, 33, SPECIES_AIPOM},
+ {34, 34, SPECIES_TEDDIURSA},
+ {35, 35, SPECIES_AIPOM},
+ {36, 36, SPECIES_TEDDIURSA},
+ {34, 34, SPECIES_SUNKERN},
+ {33, 33, SPECIES_LEDYBA},
+ {35, 35, SPECIES_HOOTHOOT},
+ {34, 34, SPECIES_PINECO},
+ {36, 36, SPECIES_HOUNDOUR},
+ {37, 37, SPECIES_MILTANK},
+ {39, 39, SPECIES_HOUNDOUR},
+ {40, 40, SPECIES_MILTANK},
+};
+
+const struct WildPokemonInfo gSafariZone_Northeast_LandMonsInfo = {25, gSafariZone_Northeast_LandMons};
+
+const struct WildPokemon gSafariZone_Northeast_RockSmashMons[] =
+{
+ {25, 30, SPECIES_SHUCKLE},
+ {20, 25, SPECIES_SHUCKLE},
+ {30, 35, SPECIES_SHUCKLE},
+ {30, 35, SPECIES_SHUCKLE},
+ {35, 40, SPECIES_SHUCKLE},
+};
+
+const struct WildPokemonInfo gSafariZone_Northeast_RockSmashMonsInfo = {25, gSafariZone_Northeast_RockSmashMons};
+
+const struct WildPokemon gMagmaHideout_1F_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_1F_LandMonsInfo = {10, gMagmaHideout_1F_LandMons};
+
+const struct WildPokemon gMagmaHideout_2F_1R_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_2F_1R_LandMonsInfo = {10, gMagmaHideout_2F_1R_LandMons};
+
+const struct WildPokemon gMagmaHideout_2F_2R_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_2F_2R_LandMonsInfo = {10, gMagmaHideout_2F_2R_LandMons};
+
+const struct WildPokemon gMagmaHideout_3F_1R_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_3F_1R_LandMonsInfo = {10, gMagmaHideout_3F_1R_LandMons};
+
+const struct WildPokemon gMagmaHideout_3F_2R_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_3F_2R_LandMonsInfo = {10, gMagmaHideout_3F_2R_LandMons};
+
+const struct WildPokemon gMagmaHideout_4F_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_4F_LandMonsInfo = {10, gMagmaHideout_4F_LandMons};
+
+const struct WildPokemon gMagmaHideout_3F_3R_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_3F_3R_LandMonsInfo = {10, gMagmaHideout_3F_3R_LandMons};
+
+const struct WildPokemon gMagmaHideout_2F_3R_LandMons[] =
+{
+ {27, 27, SPECIES_GEODUDE},
+ {28, 28, SPECIES_TORKOAL},
+ {28, 28, SPECIES_GEODUDE},
+ {30, 30, SPECIES_TORKOAL},
+ {29, 29, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GEODUDE},
+ {30, 30, SPECIES_GRAVELER},
+ {30, 30, SPECIES_GRAVELER},
+ {31, 31, SPECIES_GRAVELER},
+ {32, 32, SPECIES_GRAVELER},
+ {33, 33, SPECIES_GRAVELER},
+};
+
+const struct WildPokemonInfo gMagmaHideout_2F_3R_LandMonsInfo = {10, gMagmaHideout_2F_3R_LandMons};
+
+const struct WildPokemon gMirageTower_1F_LandMons[] =
+{
+ {21, 21, SPECIES_SANDSHREW},
+ {21, 21, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {22, 22, SPECIES_SANDSHREW},
+ {22, 22, SPECIES_TRAPINCH},
+ {23, 23, SPECIES_SANDSHREW},
+ {23, 23, SPECIES_TRAPINCH},
+ {24, 24, SPECIES_SANDSHREW},
+ {24, 24, SPECIES_TRAPINCH},
+};
+
+const struct WildPokemonInfo gMirageTower_1F_LandMonsInfo = {10, gMirageTower_1F_LandMons};
+
+const struct WildPokemon gMirageTower_2F_LandMons[] =
+{
+ {21, 21, SPECIES_SANDSHREW},
+ {21, 21, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {22, 22, SPECIES_SANDSHREW},
+ {22, 22, SPECIES_TRAPINCH},
+ {23, 23, SPECIES_SANDSHREW},
+ {23, 23, SPECIES_TRAPINCH},
+ {24, 24, SPECIES_SANDSHREW},
+ {24, 24, SPECIES_TRAPINCH},
+};
+
+const struct WildPokemonInfo gMirageTower_2F_LandMonsInfo = {10, gMirageTower_2F_LandMons};
+
+const struct WildPokemon gMirageTower_3F_LandMons[] =
+{
+ {21, 21, SPECIES_SANDSHREW},
+ {21, 21, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {22, 22, SPECIES_SANDSHREW},
+ {22, 22, SPECIES_TRAPINCH},
+ {23, 23, SPECIES_SANDSHREW},
+ {23, 23, SPECIES_TRAPINCH},
+ {24, 24, SPECIES_SANDSHREW},
+ {24, 24, SPECIES_TRAPINCH},
+};
+
+const struct WildPokemonInfo gMirageTower_3F_LandMonsInfo = {10, gMirageTower_3F_LandMons};
+
+const struct WildPokemon gMirageTower_4F_LandMons[] =
+{
+ {21, 21, SPECIES_SANDSHREW},
+ {21, 21, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {20, 20, SPECIES_SANDSHREW},
+ {20, 20, SPECIES_TRAPINCH},
+ {22, 22, SPECIES_SANDSHREW},
+ {22, 22, SPECIES_TRAPINCH},
+ {23, 23, SPECIES_SANDSHREW},
+ {23, 23, SPECIES_TRAPINCH},
+ {24, 24, SPECIES_SANDSHREW},
+ {24, 24, SPECIES_TRAPINCH},
+};
+
+const struct WildPokemonInfo gMirageTower_4F_LandMonsInfo = {10, gMirageTower_4F_LandMons};
+
+const struct WildPokemon gDesertUnderpass_LandMons[] =
+{
+ {38, 38, SPECIES_DITTO},
+ {35, 35, SPECIES_WHISMUR},
+ {40, 40, SPECIES_DITTO},
+ {40, 40, SPECIES_LOUDRED},
+ {41, 41, SPECIES_DITTO},
+ {36, 36, SPECIES_WHISMUR},
+ {38, 38, SPECIES_LOUDRED},
+ {42, 42, SPECIES_DITTO},
+ {38, 38, SPECIES_WHISMUR},
+ {43, 43, SPECIES_DITTO},
+ {44, 44, SPECIES_LOUDRED},
+ {45, 45, SPECIES_DITTO},
+};
+
+const struct WildPokemonInfo gDesertUnderpass_LandMonsInfo = {10, gDesertUnderpass_LandMons};
+
+const struct WildPokemon gArtisanCave_B1F_LandMons[] =
+{
+ {40, 40, SPECIES_SMEARGLE},
+ {41, 41, SPECIES_SMEARGLE},
+ {42, 42, SPECIES_SMEARGLE},
+ {43, 43, SPECIES_SMEARGLE},
+ {44, 44, SPECIES_SMEARGLE},
+ {45, 45, SPECIES_SMEARGLE},
+ {46, 46, SPECIES_SMEARGLE},
+ {47, 47, SPECIES_SMEARGLE},
+ {48, 48, SPECIES_SMEARGLE},
+ {49, 49, SPECIES_SMEARGLE},
+ {50, 50, SPECIES_SMEARGLE},
+ {50, 50, SPECIES_SMEARGLE},
+};
+
+const struct WildPokemonInfo gArtisanCave_B1F_LandMonsInfo = {10, gArtisanCave_B1F_LandMons};
+
+const struct WildPokemon gArtisanCave_1F_LandMons[] =
+{
+ {40, 40, SPECIES_SMEARGLE},
+ {41, 41, SPECIES_SMEARGLE},
+ {42, 42, SPECIES_SMEARGLE},
+ {43, 43, SPECIES_SMEARGLE},
+ {44, 44, SPECIES_SMEARGLE},
+ {45, 45, SPECIES_SMEARGLE},
+ {46, 46, SPECIES_SMEARGLE},
+ {47, 47, SPECIES_SMEARGLE},
+ {48, 48, SPECIES_SMEARGLE},
+ {49, 49, SPECIES_SMEARGLE},
+ {50, 50, SPECIES_SMEARGLE},
+ {50, 50, SPECIES_SMEARGLE},
+};
+
+const struct WildPokemonInfo gArtisanCave_1F_LandMonsInfo = {10, gArtisanCave_1F_LandMons};
+
+const struct WildPokemon gAlteringCave1_LandMons[] =
+{
+ {10, 10, SPECIES_ZUBAT},
+ {12, 12, SPECIES_ZUBAT},
+ {8, 8, SPECIES_ZUBAT},
+ {14, 14, SPECIES_ZUBAT},
+ {10, 10, SPECIES_ZUBAT},
+ {12, 12, SPECIES_ZUBAT},
+ {16, 16, SPECIES_ZUBAT},
+ {6, 6, SPECIES_ZUBAT},
+ {8, 8, SPECIES_ZUBAT},
+ {14, 14, SPECIES_ZUBAT},
+ {8, 8, SPECIES_ZUBAT},
+ {14, 14, SPECIES_ZUBAT},
+};
+
+const struct WildPokemonInfo gAlteringCave1_LandMonsInfo = {7, gAlteringCave1_LandMons};
+
+const struct WildPokemon gAlteringCave2_LandMons[] =
+{
+ {7, 7, SPECIES_MAREEP},
+ {9, 9, SPECIES_MAREEP},
+ {5, 5, SPECIES_MAREEP},
+ {11, 11, SPECIES_MAREEP},
+ {7, 7, SPECIES_MAREEP},
+ {9, 9, SPECIES_MAREEP},
+ {13, 13, SPECIES_MAREEP},
+ {3, 3, SPECIES_MAREEP},
+ {5, 5, SPECIES_MAREEP},
+ {11, 11, SPECIES_MAREEP},
+ {5, 5, SPECIES_MAREEP},
+ {11, 11, SPECIES_MAREEP},
+};
+
+const struct WildPokemonInfo gAlteringCave2_LandMonsInfo = {7, gAlteringCave2_LandMons};
+
+const struct WildPokemon gAlteringCave3_LandMons[] =
+{
+ {23, 23, SPECIES_PINECO},
+ {25, 25, SPECIES_PINECO},
+ {22, 22, SPECIES_PINECO},
+ {27, 27, SPECIES_PINECO},
+ {23, 23, SPECIES_PINECO},
+ {25, 25, SPECIES_PINECO},
+ {29, 29, SPECIES_PINECO},
+ {19, 19, SPECIES_PINECO},
+ {21, 21, SPECIES_PINECO},
+ {27, 27, SPECIES_PINECO},
+ {21, 21, SPECIES_PINECO},
+ {27, 27, SPECIES_PINECO},
+};
+
+const struct WildPokemonInfo gAlteringCave3_LandMonsInfo = {7, gAlteringCave3_LandMons};
+
+const struct WildPokemon gAlteringCave4_LandMons[] =
+{
+ {16, 16, SPECIES_HOUNDOUR},
+ {18, 18, SPECIES_HOUNDOUR},
+ {14, 14, SPECIES_HOUNDOUR},
+ {20, 20, SPECIES_HOUNDOUR},
+ {16, 16, SPECIES_HOUNDOUR},
+ {18, 18, SPECIES_HOUNDOUR},
+ {22, 22, SPECIES_HOUNDOUR},
+ {12, 12, SPECIES_HOUNDOUR},
+ {14, 14, SPECIES_HOUNDOUR},
+ {20, 20, SPECIES_HOUNDOUR},
+ {14, 14, SPECIES_HOUNDOUR},
+ {20, 20, SPECIES_HOUNDOUR},
+};
+
+const struct WildPokemonInfo gAlteringCave4_LandMonsInfo = {7, gAlteringCave4_LandMons};
+
+const struct WildPokemon gAlteringCave5_LandMons[] =
+{
+ {10, 10, SPECIES_TEDDIURSA},
+ {12, 12, SPECIES_TEDDIURSA},
+ {8, 8, SPECIES_TEDDIURSA},
+ {14, 14, SPECIES_TEDDIURSA},
+ {10, 10, SPECIES_TEDDIURSA},
+ {12, 12, SPECIES_TEDDIURSA},
+ {16, 16, SPECIES_TEDDIURSA},
+ {6, 6, SPECIES_TEDDIURSA},
+ {8, 8, SPECIES_TEDDIURSA},
+ {14, 14, SPECIES_TEDDIURSA},
+ {8, 8, SPECIES_TEDDIURSA},
+ {14, 14, SPECIES_TEDDIURSA},
+};
+
+const struct WildPokemonInfo gAlteringCave5_LandMonsInfo = {7, gAlteringCave5_LandMons};
+
+const struct WildPokemon gAlteringCave6_LandMons[] =
+{
+ {22, 22, SPECIES_AIPOM},
+ {24, 24, SPECIES_AIPOM},
+ {20, 20, SPECIES_AIPOM},
+ {26, 26, SPECIES_AIPOM},
+ {22, 22, SPECIES_AIPOM},
+ {24, 24, SPECIES_AIPOM},
+ {28, 28, SPECIES_AIPOM},
+ {18, 18, SPECIES_AIPOM},
+ {20, 20, SPECIES_AIPOM},
+ {26, 26, SPECIES_AIPOM},
+ {20, 20, SPECIES_AIPOM},
+ {26, 26, SPECIES_AIPOM},
+};
+
+const struct WildPokemonInfo gAlteringCave6_LandMonsInfo = {7, gAlteringCave6_LandMons};
+
+const struct WildPokemon gAlteringCave7_LandMons[] =
+{
+ {22, 22, SPECIES_SHUCKLE},
+ {24, 24, SPECIES_SHUCKLE},
+ {20, 20, SPECIES_SHUCKLE},
+ {26, 26, SPECIES_SHUCKLE},
+ {22, 22, SPECIES_SHUCKLE},
+ {24, 24, SPECIES_SHUCKLE},
+ {28, 28, SPECIES_SHUCKLE},
+ {18, 18, SPECIES_SHUCKLE},
+ {20, 20, SPECIES_SHUCKLE},
+ {26, 26, SPECIES_SHUCKLE},
+ {20, 20, SPECIES_SHUCKLE},
+ {26, 26, SPECIES_SHUCKLE},
+};
+
+const struct WildPokemonInfo gAlteringCave7_LandMonsInfo = {7, gAlteringCave7_LandMons};
+
+const struct WildPokemon gAlteringCave8_LandMons[] =
+{
+ {22, 22, SPECIES_STANTLER},
+ {24, 24, SPECIES_STANTLER},
+ {20, 20, SPECIES_STANTLER},
+ {26, 26, SPECIES_STANTLER},
+ {22, 22, SPECIES_STANTLER},
+ {24, 24, SPECIES_STANTLER},
+ {28, 28, SPECIES_STANTLER},
+ {18, 18, SPECIES_STANTLER},
+ {20, 20, SPECIES_STANTLER},
+ {26, 26, SPECIES_STANTLER},
+ {20, 20, SPECIES_STANTLER},
+ {26, 26, SPECIES_STANTLER},
+};
+
+const struct WildPokemonInfo gAlteringCave8_LandMonsInfo = {7, gAlteringCave8_LandMons};
+
+const struct WildPokemon gAlteringCave9_LandMons[] =
+{
+ {22, 22, SPECIES_SMEARGLE},
+ {24, 24, SPECIES_SMEARGLE},
+ {20, 20, SPECIES_SMEARGLE},
+ {26, 26, SPECIES_SMEARGLE},
+ {22, 22, SPECIES_SMEARGLE},
+ {24, 24, SPECIES_SMEARGLE},
+ {28, 28, SPECIES_SMEARGLE},
+ {18, 18, SPECIES_SMEARGLE},
+ {20, 20, SPECIES_SMEARGLE},
+ {26, 26, SPECIES_SMEARGLE},
+ {20, 20, SPECIES_SMEARGLE},
+ {26, 26, SPECIES_SMEARGLE},
+};
+
+const struct WildPokemonInfo gAlteringCave9_LandMonsInfo = {7, gAlteringCave9_LandMons};
+
+const struct WildPokemon gMeteorFalls_StevensCave_LandMons[] =
+{
+ {33, 33, SPECIES_GOLBAT},
+ {35, 35, SPECIES_GOLBAT},
+ {33, 33, SPECIES_GOLBAT},
+ {35, 35, SPECIES_SOLROCK},
+ {33, 33, SPECIES_SOLROCK},
+ {37, 37, SPECIES_SOLROCK},
+ {35, 35, SPECIES_GOLBAT},
+ {39, 39, SPECIES_SOLROCK},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+ {38, 38, SPECIES_GOLBAT},
+ {40, 40, SPECIES_GOLBAT},
+};
+
+const struct WildPokemonInfo gMeteorFalls_StevensCave_LandMonsInfo = {10, gMeteorFalls_StevensCave_LandMons};
+
+//The actual headers that link the encounter tables to particular maps start here.
+
+const struct WildPokemonHeader gWildMonHeaders[] =
+{
+ {
+ .mapGroup = MAP_GROUP(ROUTE101),
+ .mapNum = MAP_NUM(ROUTE101),
+ .landMonsInfo = &gRoute101_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE102),
+ .mapNum = MAP_NUM(ROUTE102),
+ .landMonsInfo = &gRoute102_LandMonsInfo,
+ .waterMonsInfo = &gRoute102_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute102_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE103),
+ .mapNum = MAP_NUM(ROUTE103),
+ .landMonsInfo = &gRoute103_LandMonsInfo,
+ .waterMonsInfo = &gRoute103_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute103_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE104),
+ .mapNum = MAP_NUM(ROUTE104),
+ .landMonsInfo = &gRoute104_LandMonsInfo,
+ .waterMonsInfo = &gRoute104_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute104_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE105),
+ .mapNum = MAP_NUM(ROUTE105),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute105_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute105_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE110),
+ .mapNum = MAP_NUM(ROUTE110),
+ .landMonsInfo = &gRoute110_LandMonsInfo,
+ .waterMonsInfo = &gRoute110_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute110_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE111),
+ .mapNum = MAP_NUM(ROUTE111),
+ .landMonsInfo = &gRoute111_LandMonsInfo,
+ .waterMonsInfo = &gRoute111_WaterMonsInfo,
+ .rockSmashMonsInfo = &gRoute111_RockSmashMonsInfo,
+ .fishingMonsInfo = &gRoute111_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE112),
+ .mapNum = MAP_NUM(ROUTE112),
+ .landMonsInfo = &gRoute112_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE113),
+ .mapNum = MAP_NUM(ROUTE113),
+ .landMonsInfo = &gRoute113_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE114),
+ .mapNum = MAP_NUM(ROUTE114),
+ .landMonsInfo = &gRoute114_LandMonsInfo,
+ .waterMonsInfo = &gRoute114_WaterMonsInfo,
+ .rockSmashMonsInfo = &gRoute114_RockSmashMonsInfo,
+ .fishingMonsInfo = &gRoute114_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE116),
+ .mapNum = MAP_NUM(ROUTE116),
+ .landMonsInfo = &gRoute116_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE117),
+ .mapNum = MAP_NUM(ROUTE117),
+ .landMonsInfo = &gRoute117_LandMonsInfo,
+ .waterMonsInfo = &gRoute117_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute117_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE118),
+ .mapNum = MAP_NUM(ROUTE118),
+ .landMonsInfo = &gRoute118_LandMonsInfo,
+ .waterMonsInfo = &gRoute118_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute118_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE124),
+ .mapNum = MAP_NUM(ROUTE124),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute124_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute124_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(PETALBURG_WOODS),
+ .mapNum = MAP_NUM(PETALBURG_WOODS),
+ .landMonsInfo = &gPetalburgWoods_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(RUSTURF_TUNNEL),
+ .mapNum = MAP_NUM(RUSTURF_TUNNEL),
+ .landMonsInfo = &gRusturfTunnel_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_1F),
+ .mapNum = MAP_NUM(GRANITE_CAVE_1F),
+ .landMonsInfo = &gGraniteCave_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_B1F),
+ .mapNum = MAP_NUM(GRANITE_CAVE_B1F),
+ .landMonsInfo = &gGraniteCave_B1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_1F),
+ .mapNum = MAP_NUM(MT_PYRE_1F),
+ .landMonsInfo = &gMtPyre_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(VICTORY_ROAD_1F),
+ .mapNum = MAP_NUM(VICTORY_ROAD_1F),
+ .landMonsInfo = &gVictoryRoad_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTH),
+ .mapNum = MAP_NUM(SAFARI_ZONE_SOUTH),
+ .landMonsInfo = &gSafariZone_South_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(UNDERWATER2),
+ .mapNum = MAP_NUM(UNDERWATER2),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gUnderwater2_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ABANDONED_SHIP_ROOMS_B1F),
+ .mapNum = MAP_NUM(ABANDONED_SHIP_ROOMS_B1F),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gAbandonedShip_Rooms_B1F_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gAbandonedShip_Rooms_B1F_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_B2F),
+ .mapNum = MAP_NUM(GRANITE_CAVE_B2F),
+ .landMonsInfo = &gGraniteCave_B2F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = &gGraniteCave_B2F_RockSmashMonsInfo,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(FIERY_PATH),
+ .mapNum = MAP_NUM(FIERY_PATH),
+ .landMonsInfo = &gFieryPath_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_2R),
+ .mapNum = MAP_NUM(METEOR_FALLS_B1F_2R),
+ .landMonsInfo = &gMeteorFalls_B1F_2R_LandMonsInfo,
+ .waterMonsInfo = &gMeteorFalls_B1F_2R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gMeteorFalls_B1F_2R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(JAGGED_PASS),
+ .mapNum = MAP_NUM(JAGGED_PASS),
+ .landMonsInfo = &gJaggedPass_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE106),
+ .mapNum = MAP_NUM(ROUTE106),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute106_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute106_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE107),
+ .mapNum = MAP_NUM(ROUTE107),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute107_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute107_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE108),
+ .mapNum = MAP_NUM(ROUTE108),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute108_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute108_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE109),
+ .mapNum = MAP_NUM(ROUTE109),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute109_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute109_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE115),
+ .mapNum = MAP_NUM(ROUTE115),
+ .landMonsInfo = &gRoute115_LandMonsInfo,
+ .waterMonsInfo = &gRoute115_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute115_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(NEW_MAUVILLE_INSIDE),
+ .mapNum = MAP_NUM(NEW_MAUVILLE_INSIDE),
+ .landMonsInfo = &gNewMauville_Inside_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE119),
+ .mapNum = MAP_NUM(ROUTE119),
+ .landMonsInfo = &gRoute119_LandMonsInfo,
+ .waterMonsInfo = &gRoute119_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute119_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE120),
+ .mapNum = MAP_NUM(ROUTE120),
+ .landMonsInfo = &gRoute120_LandMonsInfo,
+ .waterMonsInfo = &gRoute120_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute120_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE121),
+ .mapNum = MAP_NUM(ROUTE121),
+ .landMonsInfo = &gRoute121_LandMonsInfo,
+ .waterMonsInfo = &gRoute121_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute121_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE122),
+ .mapNum = MAP_NUM(ROUTE122),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute122_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute122_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE123),
+ .mapNum = MAP_NUM(ROUTE123),
+ .landMonsInfo = &gRoute123_LandMonsInfo,
+ .waterMonsInfo = &gRoute123_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute123_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_2F),
+ .mapNum = MAP_NUM(MT_PYRE_2F),
+ .landMonsInfo = &gMtPyre_2F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_3F),
+ .mapNum = MAP_NUM(MT_PYRE_3F),
+ .landMonsInfo = &gMtPyre_3F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_4F),
+ .mapNum = MAP_NUM(MT_PYRE_4F),
+ .landMonsInfo = &gMtPyre_4F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_5F),
+ .mapNum = MAP_NUM(MT_PYRE_5F),
+ .landMonsInfo = &gMtPyre_5F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_6F),
+ .mapNum = MAP_NUM(MT_PYRE_6F),
+ .landMonsInfo = &gMtPyre_6F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_EXTERIOR),
+ .mapNum = MAP_NUM(MT_PYRE_EXTERIOR),
+ .landMonsInfo = &gMtPyre_Exterior_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MT_PYRE_SUMMIT),
+ .mapNum = MAP_NUM(MT_PYRE_SUMMIT),
+ .landMonsInfo = &gMtPyre_Summit_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(GRANITE_CAVE_STEVENS_ROOM),
+ .mapNum = MAP_NUM(GRANITE_CAVE_STEVENS_ROOM),
+ .landMonsInfo = &gGraniteCave_StevensRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE125),
+ .mapNum = MAP_NUM(ROUTE125),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute125_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute125_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE126),
+ .mapNum = MAP_NUM(ROUTE126),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute126_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute126_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE127),
+ .mapNum = MAP_NUM(ROUTE127),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute127_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute127_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE128),
+ .mapNum = MAP_NUM(ROUTE128),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute128_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute128_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE129),
+ .mapNum = MAP_NUM(ROUTE129),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute129_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute129_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE130),
+ .mapNum = MAP_NUM(ROUTE130),
+ .landMonsInfo = &gRoute130_LandMonsInfo,
+ .waterMonsInfo = &gRoute130_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute130_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE131),
+ .mapNum = MAP_NUM(ROUTE131),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute131_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute131_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE132),
+ .mapNum = MAP_NUM(ROUTE132),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute132_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute132_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE133),
+ .mapNum = MAP_NUM(ROUTE133),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute133_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute133_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ROUTE134),
+ .mapNum = MAP_NUM(ROUTE134),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gRoute134_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gRoute134_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS),
+ .mapNum = MAP_NUM(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM1),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM1),
+ .landMonsInfo = &gSeafloorCavern_Room1_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM2),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM2),
+ .landMonsInfo = &gSeafloorCavern_Room2_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM3),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM3),
+ .landMonsInfo = &gSeafloorCavern_Room3_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM4),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM4),
+ .landMonsInfo = &gSeafloorCavern_Room4_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM5),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM5),
+ .landMonsInfo = &gSeafloorCavern_Room5_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM6),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM6),
+ .landMonsInfo = &gSeafloorCavern_Room6_LandMonsInfo,
+ .waterMonsInfo = &gSeafloorCavern_Room6_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSeafloorCavern_Room6_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM7),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM7),
+ .landMonsInfo = &gSeafloorCavern_Room7_LandMonsInfo,
+ .waterMonsInfo = &gSeafloorCavern_Room7_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSeafloorCavern_Room7_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM8),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM8),
+ .landMonsInfo = &gSeafloorCavern_Room8_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ENTRANCE),
+ .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ENTRANCE),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gSeafloorCavern_Entrance_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSeafloorCavern_Entrance_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_ENTRANCE),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_ENTRANCE),
+ .landMonsInfo = &gCaveOfOrigin_Entrance_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_1F),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_1F),
+ .landMonsInfo = &gCaveOfOrigin_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1),
+ .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2),
+ .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3),
+ .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3),
+ .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(NEW_MAUVILLE_ENTRANCE),
+ .mapNum = MAP_NUM(NEW_MAUVILLE_ENTRANCE),
+ .landMonsInfo = &gNewMauville_Entrance_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHWEST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHWEST),
+ .landMonsInfo = &gSafariZone_Southwest_LandMonsInfo,
+ .waterMonsInfo = &gSafariZone_Southwest_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSafariZone_Southwest_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTH),
+ .mapNum = MAP_NUM(SAFARI_ZONE_NORTH),
+ .landMonsInfo = &gSafariZone_North_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = &gSafariZone_North_RockSmashMonsInfo,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHWEST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_NORTHWEST),
+ .landMonsInfo = &gSafariZone_Northwest_LandMonsInfo,
+ .waterMonsInfo = &gSafariZone_Northwest_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSafariZone_Northwest_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(VICTORY_ROAD_B1F),
+ .mapNum = MAP_NUM(VICTORY_ROAD_B1F),
+ .landMonsInfo = &gVictoryRoad_B1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = &gVictoryRoad_B1F_RockSmashMonsInfo,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(VICTORY_ROAD_B2F),
+ .mapNum = MAP_NUM(VICTORY_ROAD_B2F),
+ .landMonsInfo = &gVictoryRoad_B2F_LandMonsInfo,
+ .waterMonsInfo = &gVictoryRoad_B2F_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gVictoryRoad_B2F_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_1F_1R),
+ .mapNum = MAP_NUM(METEOR_FALLS_1F_1R),
+ .landMonsInfo = &gMeteorFalls_1F_1R_LandMonsInfo,
+ .waterMonsInfo = &gMeteorFalls_1F_1R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gMeteorFalls_1F_1R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_1F_2R),
+ .mapNum = MAP_NUM(METEOR_FALLS_1F_2R),
+ .landMonsInfo = &gMeteorFalls_1F_2R_LandMonsInfo,
+ .waterMonsInfo = &gMeteorFalls_1F_2R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gMeteorFalls_1F_2R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_1R),
+ .mapNum = MAP_NUM(METEOR_FALLS_B1F_1R),
+ .landMonsInfo = &gMeteorFalls_B1F_1R_LandMonsInfo,
+ .waterMonsInfo = &gMeteorFalls_B1F_1R_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gMeteorFalls_B1F_1R_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM),
+ .landMonsInfo = &gShoalCave_LowTideStairsRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM),
+ .landMonsInfo = &gShoalCave_LowTideLowerRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_INNER_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_INNER_ROOM),
+ .landMonsInfo = &gShoalCave_LowTideInnerRoom_LandMonsInfo,
+ .waterMonsInfo = &gShoalCave_LowTideInnerRoom_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gShoalCave_LowTideInnerRoom_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM),
+ .landMonsInfo = &gShoalCave_LowTideEntranceRoom_LandMonsInfo,
+ .waterMonsInfo = &gShoalCave_LowTideEntranceRoom_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gShoalCave_LowTideEntranceRoom_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(LILYCOVE_CITY),
+ .mapNum = MAP_NUM(LILYCOVE_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gLilycoveCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gLilycoveCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(DEWFORD_TOWN),
+ .mapNum = MAP_NUM(DEWFORD_TOWN),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gDewfordTown_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gDewfordTown_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SLATEPORT_CITY),
+ .mapNum = MAP_NUM(SLATEPORT_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gSlateportCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSlateportCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(MOSSDEEP_CITY),
+ .mapNum = MAP_NUM(MOSSDEEP_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gMossdeepCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gMossdeepCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(PACIFIDLOG_TOWN),
+ .mapNum = MAP_NUM(PACIFIDLOG_TOWN),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gPacifidlogTown_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gPacifidlogTown_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(EVER_GRANDE_CITY),
+ .mapNum = MAP_NUM(EVER_GRANDE_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gEverGrandeCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gEverGrandeCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(PETALBURG_CITY),
+ .mapNum = MAP_NUM(PETALBURG_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gPetalburgCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gPetalburgCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(UNDERWATER1),
+ .mapNum = MAP_NUM(UNDERWATER1),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gUnderwater1_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM),
+ .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ICE_ROOM),
+ .landMonsInfo = &gShoalCave_LowTideIceRoom_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SKY_PILLAR_1F),
+ .mapNum = MAP_NUM(SKY_PILLAR_1F),
+ .landMonsInfo = &gSkyPillar_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SOOTOPOLIS_CITY),
+ .mapNum = MAP_NUM(SOOTOPOLIS_CITY),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = &gSootopolisCity_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSootopolisCity_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SKY_PILLAR_3F),
+ .mapNum = MAP_NUM(SKY_PILLAR_3F),
+ .landMonsInfo = &gSkyPillar_3F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SKY_PILLAR_5F),
+ .mapNum = MAP_NUM(SKY_PILLAR_5F),
+ .landMonsInfo = &gSkyPillar_5F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHEAST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHEAST),
+ .landMonsInfo = &gSafariZone_Southeast_LandMonsInfo,
+ .waterMonsInfo = &gSafariZone_Southeast_WaterMonsInfo,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = &gSafariZone_Southeast_FishingMonsInfo,
+ },
+ {
+ .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHEAST),
+ .mapNum = MAP_NUM(SAFARI_ZONE_NORTHEAST),
+ .landMonsInfo = &gSafariZone_Northeast_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = &gSafariZone_Northeast_RockSmashMonsInfo,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_1F),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_1F),
+ .landMonsInfo = &gMagmaHideout_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_1R),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_1R),
+ .landMonsInfo = &gMagmaHideout_2F_1R_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_2R),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_2R),
+ .landMonsInfo = &gMagmaHideout_2F_2R_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_1R),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_1R),
+ .landMonsInfo = &gMagmaHideout_3F_1R_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_2R),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_2R),
+ .landMonsInfo = &gMagmaHideout_3F_2R_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_4F),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_4F),
+ .landMonsInfo = &gMagmaHideout_4F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_3R),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_3R),
+ .landMonsInfo = &gMagmaHideout_3F_3R_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_3R),
+ .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_3R),
+ .landMonsInfo = &gMagmaHideout_2F_3R_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MIRAGE_TOWER_1F),
+ .mapNum = MAP_NUM(MIRAGE_TOWER_1F),
+ .landMonsInfo = &gMirageTower_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MIRAGE_TOWER_2F),
+ .mapNum = MAP_NUM(MIRAGE_TOWER_2F),
+ .landMonsInfo = &gMirageTower_2F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MIRAGE_TOWER_3F),
+ .mapNum = MAP_NUM(MIRAGE_TOWER_3F),
+ .landMonsInfo = &gMirageTower_3F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(MIRAGE_TOWER_4F),
+ .mapNum = MAP_NUM(MIRAGE_TOWER_4F),
+ .landMonsInfo = &gMirageTower_4F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(DESERT_UNDERPASS),
+ .mapNum = MAP_NUM(DESERT_UNDERPASS),
+ .landMonsInfo = &gDesertUnderpass_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ARTISAN_CAVE_B1F),
+ .mapNum = MAP_NUM(ARTISAN_CAVE_B1F),
+ .landMonsInfo = &gArtisanCave_B1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ARTISAN_CAVE_1F),
+ .mapNum = MAP_NUM(ARTISAN_CAVE_1F),
+ .landMonsInfo = &gArtisanCave_1F_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave1_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave2_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave3_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave4_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave5_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave6_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave7_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave8_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(ALTERING_CAVE),
+ .mapNum = MAP_NUM(ALTERING_CAVE),
+ .landMonsInfo = &gAlteringCave9_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(METEOR_FALLS_STEVENS_CAVE),
+ .mapNum = MAP_NUM(METEOR_FALLS_STEVENS_CAVE),
+ .landMonsInfo = &gMeteorFalls_StevensCave_LandMonsInfo,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = MAP_GROUP(UNDEFINED),
+ .mapNum = MAP_NUM(UNDEFINED),
+ .landMonsInfo = NULL,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+};
+
+//Battle Pyramid-specific tables and headers start here.
+
+const struct WildPokemon gBattlePyramidPlaceholders_1[] =
+{
+ {5, 5, SPECIES_BULBASAUR},
+ {5, 5, SPECIES_BULBASAUR},
+ {5, 5, SPECIES_BULBASAUR},
+ {5, 5, SPECIES_BULBASAUR},
+ {5, 5, SPECIES_IVYSAUR},
+ {5, 5, SPECIES_IVYSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_CHARMANDER},
+};
+
+const struct WildPokemonInfo gBattlePyramidPlaceholders_1Info = {4, gBattlePyramidPlaceholders_1};
+
+const struct WildPokemon gBattlePyramidPlaceholders_2[] =
+{
+ {5, 5, SPECIES_IVYSAUR},
+ {5, 5, SPECIES_IVYSAUR},
+ {5, 5, SPECIES_IVYSAUR},
+ {5, 5, SPECIES_IVYSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMANDER},
+};
+
+const struct WildPokemonInfo gBattlePyramidPlaceholders_2Info = {4, gBattlePyramidPlaceholders_2};
+
+const struct WildPokemon gBattlePyramidPlaceholders_3[] =
+{
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_VENUSAUR},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARIZARD},
+};
+
+const struct WildPokemonInfo gBattlePyramidPlaceholders_3Info = {4, gBattlePyramidPlaceholders_3};
+
+const struct WildPokemon gBattlePyramidPlaceholders_4[] =
+{
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMANDER},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_SQUIRTLE},
+};
+
+const struct WildPokemonInfo gBattlePyramidPlaceholders_4Info = {4, gBattlePyramidPlaceholders_4};
+
+const struct WildPokemon gBattlePyramidPlaceholders_5[] =
+{
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_WARTORTLE},
+};
+
+const struct WildPokemonInfo gBattlePyramidPlaceholders_5Info = {4, gBattlePyramidPlaceholders_5};
+
+const struct WildPokemon gBattlePyramidPlaceholders_6[] =
+{
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_WARTORTLE},
+};
+
+const struct WildPokemonInfo gBattlePyramidPlaceholders_6Info = {4, gBattlePyramidPlaceholders_6};
+
+const struct WildPokemon gBattlePyramidPlaceholders_7[] =
+{
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_WARTORTLE},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_SQUIRTLE},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARIZARD},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+ {5, 5, SPECIES_CHARMELEON},
+};
+
+const struct WildPokemonInfo gBattlePyramidPlaceholders_7Info = {8, gBattlePyramidPlaceholders_7};
+
+const struct WildPokemonHeader gBattlePyramidWildMonHeaders[] =
+{
+ {
+ .mapGroup = 0,
+ .mapNum = 1,
+ .landMonsInfo = &gBattlePyramidPlaceholders_1Info,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 2,
+ .landMonsInfo = &gBattlePyramidPlaceholders_2Info,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 3,
+ .landMonsInfo = &gBattlePyramidPlaceholders_3Info,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 4,
+ .landMonsInfo = &gBattlePyramidPlaceholders_4Info,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 5,
+ .landMonsInfo = &gBattlePyramidPlaceholders_5Info,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 6,
+ .landMonsInfo = &gBattlePyramidPlaceholders_6Info,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 7,
+ .landMonsInfo = &gBattlePyramidPlaceholders_7Info,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 255,
+ .mapNum = 255,
+ .landMonsInfo = NULL,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+};
+
+//Battle Pike-specific tables and headers start here.
+
+const struct WildPokemon gBattlePikeMons_1[] =
+{
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_DUSCLOPS},
+ {5, 5, SPECIES_DUSCLOPS},
+ {5, 5, SPECIES_DUSCLOPS},
+ {5, 5, SPECIES_DUSCLOPS},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_DUSCLOPS},
+ {5, 5, SPECIES_DUSCLOPS},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+};
+
+const struct WildPokemonInfo gBattlePikeMonsInfo_1 = {10, gBattlePikeMons_1};
+
+const struct WildPokemon gBattlePikeMons_2[] =
+{
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_ELECTRODE},
+ {5, 5, SPECIES_ELECTRODE},
+ {5, 5, SPECIES_ELECTRODE},
+ {5, 5, SPECIES_ELECTRODE},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_ELECTRODE},
+ {5, 5, SPECIES_ELECTRODE},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+};
+
+const struct WildPokemonInfo gBattlePikeMonsInfo_2 = {10, gBattlePikeMons_2};
+
+const struct WildPokemon gBattlePikeMons_3[] =
+{
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_BRELOOM},
+ {5, 5, SPECIES_BRELOOM},
+ {5, 5, SPECIES_BRELOOM},
+ {5, 5, SPECIES_BRELOOM},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_BRELOOM},
+ {5, 5, SPECIES_BRELOOM},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+};
+
+const struct WildPokemonInfo gBattlePikeMonsInfo_3 = {10, gBattlePikeMons_3};
+
+const struct WildPokemon gBattlePikeMons_4[] =
+{
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_WOBBUFFET},
+ {5, 5, SPECIES_WOBBUFFET},
+ {5, 5, SPECIES_WOBBUFFET},
+ {5, 5, SPECIES_WOBBUFFET},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+ {5, 5, SPECIES_WOBBUFFET},
+ {5, 5, SPECIES_WOBBUFFET},
+ {5, 5, SPECIES_SEVIPER},
+ {5, 5, SPECIES_MILOTIC},
+};
+
+const struct WildPokemonInfo gBattlePikeMonsInfo_4 = {10, gBattlePikeMons_4};
+
+const struct WildPokemonHeader gBattlePikeWildMonHeaders[] =
+{
+ {
+ .mapGroup = 0,
+ .mapNum = 1,
+ .landMonsInfo = &gBattlePikeMonsInfo_1,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 2,
+ .landMonsInfo = &gBattlePikeMonsInfo_2,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 3,
+ .landMonsInfo = &gBattlePikeMonsInfo_3,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 0,
+ .mapNum = 4,
+ .landMonsInfo = &gBattlePikeMonsInfo_4,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+ {
+ .mapGroup = 255,
+ .mapNum = 255,
+ .landMonsInfo = NULL,
+ .waterMonsInfo = NULL,
+ .rockSmashMonsInfo = NULL,
+ .fishingMonsInfo = NULL,
+ },
+};
+
+//Special Feebas-related data.
+
+const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS};
+
+const u16 gRoute119WaterTileData[] =
+{
+ 0, 0x2D, 0,
+ 0x2E, 0x5B, 0x83,
+ 0x5C, 0x8B, 0x12A,
+};
+
diff --git a/src/decoration.c b/src/decoration.c
index 8453a055d..addca6954 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -16,7 +16,7 @@
#include "field_weather.h"
#include "field_player_avatar.h"
#include "field_camera.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "event_object_movement.h"
#include "list_menu.h"
#include "menu_helpers.h"
diff --git a/src/dragon.c b/src/dragon.c
index 49f1b57c8..68577988e 100644
--- a/src/dragon.c
+++ b/src/dragon.c
@@ -208,13 +208,13 @@ void sub_8113064(struct Sprite *sprite)
sprite->data[3] = gBattleAnimArgs[4];
sprite->data[5] = gBattleAnimArgs[5];
sprite->invisible = 1;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A66DC;
}
static void sub_8113100(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
@@ -235,7 +235,7 @@ static void sub_8113100(struct Sprite *sprite)
sprite->data[0] = gBattleAnimArgs[4];
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
void sub_81131B4(struct Sprite *sprite)
@@ -251,10 +251,10 @@ void sub_81131B4(struct Sprite *sprite)
sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 1);
}
- sub_80A6864(sprite, gBattleAnimArgs[1]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[1]);
sprite->pos1.y += gBattleAnimArgs[2];
- sprite->callback = sub_80A67D8;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
void sub_8113224(struct Sprite *sprite)
@@ -329,7 +329,7 @@ void sub_81133E8(u8 taskId)
struct Task *task = &gTasks[taskId];
u16 i;
u8 r1;
- if (sub_80A8364(gBattleAnimAttacker) == 1)
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
{
sp.dmaDest = &REG_BG1HOFS;
task->data[2] = gBattle_BG1_X;
diff --git a/src/easy_chat.c b/src/easy_chat.c
index 25ef069e4..c4bc02e42 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -51,6 +51,9 @@ EWRAM_DATA struct
u16 ecWordBuffer[9];
} *gUnknown_0203A118 = NULL;
+EWRAM_DATA void *gUnknown_0203A11C = 0;
+EWRAM_DATA void *gUnknown_0203A120 = 0;
+
// Static ROM declarations
static void sub_811A2C0(u8);
diff --git a/src/effects_1.c b/src/effects_1.c
deleted file mode 100644
index a8687bc38..000000000
--- a/src/effects_1.c
+++ /dev/null
@@ -1,2093 +0,0 @@
-#include "global.h"
-#include "battle_anim.h"
-#include "constants/rgb.h"
-
-extern void sub_80FE840(struct Sprite *);
-extern void sub_80FE8E0(struct Sprite *);
-extern void sub_80FE930(struct Sprite *);
-extern void sub_80FE988(struct Sprite *);
-extern void sub_80FEAD8(struct Sprite *);
-extern void sub_80FEB44(struct Sprite *);
-extern void sub_80FEC48(struct Sprite *);
-extern void sub_80FED28(struct Sprite *);
-extern void sub_80FEE78(struct Sprite *);
-extern void sub_80FEF44(struct Sprite *);
-extern void sub_80FEFFC(struct Sprite *);
-extern void AnimMoveTwisterParticle(struct Sprite *);
-extern void sub_80FF0F4(struct Sprite *);
-extern void sub_80FF374(struct Sprite *);
-extern void sub_80FF698(struct Sprite *);
-extern void sub_80FF768(struct Sprite *);
-extern void sub_80FF7EC(struct Sprite *);
-extern void sub_80FF934(struct Sprite *);
-extern void sub_80FFB18(struct Sprite *);
-extern void sub_80FFBF4(struct Sprite *);
-extern void sub_80FFC70(struct Sprite *);
-extern void sub_80FFCB4(struct Sprite *);
-extern void sub_80FFDBC(struct Sprite *);
-extern void sub_8100640(struct Sprite *);
-extern void sub_8100898(struct Sprite *);
-extern void sub_8100A50(struct Sprite *);
-extern void sub_81009F8(struct Sprite *);
-extern void sub_8100A94(struct Sprite *);
-extern void sub_8100AE0(struct Sprite *);
-extern void sub_8100B88(struct Sprite *);
-extern void sub_8100E1C(struct Sprite *);
-extern void sub_8100EF0(struct Sprite *);
-extern void sub_81010CC(struct Sprite *);
-extern void sub_810130C(struct Sprite *);
-extern void sub_810135C(struct Sprite *);
-extern void sub_8101440(struct Sprite *);
-extern void sub_81014F4(struct Sprite *);
-extern void sub_81015AC(struct Sprite *);
-extern void sub_8101898(struct Sprite *);
-extern void sub_8101940(struct Sprite *);
-extern void sub_8101B90(struct Sprite *);
-extern void sub_8101F40(struct Sprite *);
-extern void sub_8101FA8(struct Sprite *);
-extern void sub_8101FF0(struct Sprite *);
-extern void sub_81020D8(struct Sprite *);
-extern void sub_810217C(struct Sprite *);
-extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite);
-extern void sub_80A77C8(struct Sprite *);
-extern void sub_8102268(struct Sprite *);
-extern void sub_810234C(struct Sprite *);
-extern void sub_81024E0(struct Sprite *);
-extern void sub_8102540(struct Sprite *);
-extern void sub_80A77C8(struct Sprite *);
-extern void sub_8102844(struct Sprite *);
-extern void sub_8102BCC(struct Sprite *);
-extern void sub_8102CD4(struct Sprite *);
-extern void sub_8102EB0(struct Sprite *);
-extern void sub_8102FB8(struct Sprite *);
-extern void sub_8103028(struct Sprite *);
-extern void sub_8103164(struct Sprite *);
-extern void sub_8103208(struct Sprite *);
-extern void sub_8103284(struct Sprite *);
-extern void sub_8103390(struct Sprite *);
-
-const union AnimCmd gUnknown_085920F0[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_FRAME(6, 5),
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_FRAME(10, 5),
- ANIMCMD_FRAME(12, 5),
- ANIMCMD_FRAME(14, 5),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08592114[] =
-{
- gUnknown_085920F0,
-};
-
-const struct SpriteTemplate gSleepPowderParticleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_SLEEP_POWDER,
- .paletteTag = ANIM_TAG_SLEEP_POWDER,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE840,
-};
-
-const struct SpriteTemplate gStunSporeParticleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_STUN_SPORE,
- .paletteTag = ANIM_TAG_STUN_SPORE,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE840,
-};
-
-const struct SpriteTemplate gPoisonPowderParticleSpriteTemplate =
-{
- .tileTag = ANIM_TAG_POISON_POWDER,
- .paletteTag = ANIM_TAG_POISON_POWDER,
- .oam = &gUnknown_08524944,
- .anims = gUnknown_08592114,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE840,
-};
-
-const union AnimCmd gUnknown_08592160[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592168[] =
-{
- ANIMCMD_FRAME(1, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592170[] =
-{
- ANIMCMD_FRAME(2, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592178[] =
-{
- ANIMCMD_FRAME(3, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592180[] =
-{
- ANIMCMD_FRAME(4, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592188[] =
-{
- ANIMCMD_FRAME(5, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592190[] =
-{
- ANIMCMD_FRAME(6, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592198[] =
-{
- ANIMCMD_FRAME(7, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085921A0[] =
-{
- ANIMCMD_FRAME(8, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085921A8[] =
-{
- gUnknown_08592160,
- gUnknown_08592168,
- gUnknown_08592170,
- gUnknown_08592178,
- gUnknown_08592180,
- gUnknown_08592188,
- gUnknown_08592190,
-};
-
-const union AnimCmd *const gUnknown_085921C4[] =
-{
- gUnknown_08592198,
-};
-
-const union AnimCmd *const gUnknown_085921C8[] =
-{
- gUnknown_085921A0,
-};
-
-const union AffineAnimCmd gUnknown_085921CC[] = {
- AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_085921DC[] = {
- gUnknown_085921CC,
-};
-
-const struct SpriteTemplate gUnknown_085921E0 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524A8C,
- .anims = gUnknown_085921C8,
- .images = NULL,
- .affineAnims = gUnknown_085921DC,
- .callback = sub_80FE8E0,
-};
-
-const struct SpriteTemplate gUnknown_085921F8 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921A8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE930,
-};
-
-const struct SpriteTemplate gUnknown_08592210 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921C4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FE988,
-};
-
-const union AffineAnimCmd gUnknown_08592228[] = {
- AFFINEANIMCMD_FRAME(320, 320, 0, 0),
- AFFINEANIMCMD_FRAME(-14, -14, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08592240[] = {
- gUnknown_08592228,
-};
-
-const struct SpriteTemplate gUnknown_08592244 =
-{
- .tileTag = ANIM_TAG_GRAY_ORB,
- .paletteTag = ANIM_TAG_GRAY_ORB,
- .oam = &gUnknown_085249C4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592240,
- .callback = sub_80FE8E0,
-};
-
-const union AffineAnimCmd gUnknown_0859225C[] = {
- AFFINEANIMCMD_FRAME(-5, -5, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_0859226C[] = {
- gUnknown_0859225C,
-};
-
-const struct SpriteTemplate gUnknown_08592270 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524A8C,
- .anims = gUnknown_085921C8,
- .images = NULL,
- .affineAnims = gUnknown_0859226C,
- .callback = sub_80FEAD8,
-};
-
-const struct SpriteTemplate gUnknown_08592288 =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_085921A8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEB44,
-};
-
-const union AnimCmd gUnknown_085922A0[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085922A8[] =
-{
- ANIMCMD_FRAME(4, 7),
- ANIMCMD_FRAME(8, 7),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_085922B4[] =
-{
- gUnknown_085922A0,
- gUnknown_085922A8,
-};
-
-const struct SpriteTemplate gLeechSeedSpriteTemplate =
-{
- .tileTag = ANIM_TAG_SEED,
- .paletteTag = ANIM_TAG_SEED,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085922B4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEC48,
-};
-
-const union AnimCmd gUnknown_085922D4[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085922DC[] =
-{
- ANIMCMD_FRAME(4, 7),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085922E4[] =
-{
- gUnknown_085922D4,
- gUnknown_085922DC,
-};
-
-const struct SpriteTemplate gUnknown_085922EC =
-{
- .tileTag = ANIM_TAG_SPORE,
- .paletteTag = ANIM_TAG_SPORE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085922E4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FED28,
-};
-
-const union AnimCmd gUnknown_08592304[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859230C[] =
-{
- ANIMCMD_FRAME(4, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592314[] =
-{
- gUnknown_08592304,
-};
-
-const union AnimCmd *const gUnknown_08592318[] =
-{
- gUnknown_0859230C,
-};
-
-const struct SpriteTemplate gUnknown_0859231C =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592314,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEE78,
-};
-
-const struct SpriteTemplate gUnknown_08592334 =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592318,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEF44,
-};
-
-const union AnimCmd gUnknown_0859234C[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_FRAME(12, 5),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(20, 5),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(12, 5),
- ANIMCMD_FRAME(8, 5),
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd gUnknown_08592378[] =
-{
- ANIMCMD_FRAME(24, 5),
- ANIMCMD_FRAME(28, 5),
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592388[] =
-{
- gUnknown_0859234C,
- gUnknown_08592378,
-};
-
-const struct SpriteTemplate gUnknown_08592390 =
-{
- .tileTag = ANIM_TAG_LEAF,
- .paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592388,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FEFFC,
-};
-
-const struct SpriteTemplate gUnknown_085923A8 =
-{
- .tileTag = ANIM_TAG_LEAF,
- .paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592388,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = AnimMoveTwisterParticle,
-};
-
-const union AnimCmd gUnknown_085923C0[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 3, .vFlip = TRUE),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_085923D4[] =
-{
- gUnknown_085923C0,
-};
-
-const struct SpriteTemplate gUnknown_085923D8 =
-{
- .tileTag = ANIM_TAG_RAZOR_LEAF,
- .paletteTag = ANIM_TAG_RAZOR_LEAF,
- .oam = &gUnknown_08524934,
- .anims = gUnknown_085923D4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF0F4,
-};
-
-const union AffineAnimCmd gUnknown_085923F0[] = {
- AFFINEANIMCMD_FRAME(0, 0, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_08592400[] = {
- gUnknown_085923F0,
-};
-
-const struct SpriteTemplate gSwiftStarSpriteTemplate =
-{
- .tileTag = ANIM_TAG_YELLOW_STAR,
- .paletteTag = ANIM_TAG_YELLOW_STAR,
- .oam = &gUnknown_08524974,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592400,
- .callback = sub_80FF0F4,
-};
-
-const union AnimCmd gUnknown_0859241C[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(64, 4),
- ANIMCMD_FRAME(96, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592430[] =
-{
- ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(64, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(96, 4, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592444[] =
-{
- gUnknown_0859241C,
- gUnknown_08592430,
-};
-
-const union AffineAnimCmd gUnknown_0859244C[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
- AFFINEANIMCMD_FRAME(11, 0, 0, 6),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_0859246C[] = {
- AFFINEANIMCMD_FRAME(-256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(11, 0, 0, 6),
- AFFINEANIMCMD_FRAME(-11, 0, 0, 6),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_0859248C[] = {
- gUnknown_0859244C,
- gUnknown_0859246C,
-};
-
-const struct SpriteTemplate gUnknown_08592494 =
-{
- .tileTag = ANIM_TAG_TENDRILS,
- .paletteTag = ANIM_TAG_TENDRILS,
- .oam = &gUnknown_0852499C,
- .anims = gUnknown_08592444,
- .images = NULL,
- .affineAnims = gUnknown_0859248C,
- .callback = sub_80FF374,
-};
-
-const union AffineAnimCmd gUnknown_085924AC[] = {
- AFFINEANIMCMD_FRAME(0, 0, 0, 0),
- AFFINEANIMCMD_FRAME(48, 48, 0, 14),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085924C4[] = {
- AFFINEANIMCMD_FRAME(-16, -16, 0, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_085924D4[] = {
- gUnknown_085924AC,
- gUnknown_085924C4,
-};
-
-const struct SpriteTemplate gUnknown_085924DC =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_085921C8,
- .images = NULL,
- .affineAnims = gUnknown_085924D4,
- .callback = sub_80FF698,
-};
-
-const union AnimCmd gUnknown_085924F4[] =
-{
- ANIMCMD_FRAME(0, 7),
- ANIMCMD_FRAME(16, 7),
- ANIMCMD_FRAME(32, 7),
- ANIMCMD_FRAME(48, 7),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592508[] =
-{
- ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
- ANIMCMD_FRAME(48, 7, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859251C[] =
-{
- ANIMCMD_FRAME(0, 7),
- ANIMCMD_FRAME(16, 7),
- ANIMCMD_FRAME(32, 7),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859252C[] =
-{
- ANIMCMD_FRAME(0, 7, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 7, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 7, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_0859253C[] =
-{
- gUnknown_085924F4,
- gUnknown_08592508,
- gUnknown_0859251C,
- gUnknown_0859252C,
-};
-
-const struct SpriteTemplate gUnknown_0859254C =
-{
- .tileTag = ANIM_TAG_ROOTS,
- .paletteTag = ANIM_TAG_ROOTS,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859253C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF768,
-};
-
-const struct SpriteTemplate gUnknown_08592564 =
-{
- .tileTag = ANIM_TAG_ROOTS,
- .paletteTag = ANIM_TAG_ROOTS,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859253C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF7EC,
-};
-
-const union AnimCmd gUnknown_0859257C[] =
-{
- ANIMCMD_FRAME(3, 3),
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08592588[] =
-{
- gUnknown_0859257C,
-};
-
-const struct SpriteTemplate gUnknown_0859258C =
-{
- .tileTag = ANIM_TAG_ORBS,
- .paletteTag = ANIM_TAG_ORBS,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592588,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FF934,
-};
-
-const union AnimCmd gUnknown_085925A4[] =
-{
- ANIMCMD_FRAME(0, 30),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085925AC[] =
-{
- gUnknown_085925A4,
-};
-
-const union AffineAnimCmd gUnknown_085925B0[] = {
- AFFINEANIMCMD_FRAME(0, 0, -4, 10),
- AFFINEANIMCMD_FRAME(0, 0, 4, 20),
- AFFINEANIMCMD_FRAME(0, 0, -4, 10),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085925D0[] = {
- AFFINEANIMCMD_FRAME(0, 0, -1, 2),
- AFFINEANIMCMD_FRAME(0, 0, 1, 4),
- AFFINEANIMCMD_FRAME(0, 0, -1, 4),
- AFFINEANIMCMD_FRAME(0, 0, 1, 4),
- AFFINEANIMCMD_FRAME(0, 0, -1, 4),
- AFFINEANIMCMD_FRAME(0, 0, 1, 2),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08592608[] = {
- gUnknown_085925B0,
- gUnknown_085925D0,
-};
-
-const struct SpriteTemplate gUnknown_08592610 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_08592608,
- .callback = sub_80FFB18,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8592628 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_08592608,
- .callback = sub_80FFBF4,
-};
-
-const union AnimCmd gUnknown_08592640[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(12, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592654[] =
-{
- gUnknown_08592640,
-};
-
-const struct SpriteTemplate gUnknown_08592658 =
-{
- .tileTag = ANIM_TAG_GREEN_SPARKLE,
- .paletteTag = ANIM_TAG_GREEN_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592654,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80FFC70,
-};
-
-const struct SpriteTemplate gUnknown_08592670 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_08592608,
- .callback = sub_80FFCB4,
-};
-
-const union AffineAnimCmd gUnknown_08592688[] = {
- AFFINEANIMCMD_FRAME(0, 0, 0, 3),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592698[] = {
- AFFINEANIMCMD_FRAME(0, -10, 0, 3),
- AFFINEANIMCMD_FRAME(0, -6, 0, 3),
- AFFINEANIMCMD_FRAME(0, -2, 0, 3),
- AFFINEANIMCMD_FRAME(0, 0, 0, 3),
- AFFINEANIMCMD_FRAME(0, 2, 0, 3),
- AFFINEANIMCMD_FRAME(0, 6, 0, 3),
- AFFINEANIMCMD_FRAME(0, 10, 0, 3),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_085926D8[] = {
- gUnknown_08592688,
- gUnknown_08592698,
- gUnknown_085925B0,
- gUnknown_085925D0,
-};
-
-const struct SpriteTemplate gUnknown_085926E8 =
-{
- .tileTag = ANIM_TAG_ITEM_BAG,
- .paletteTag = ANIM_TAG_ITEM_BAG,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085925AC,
- .images = NULL,
- .affineAnims = gUnknown_085926D8,
- .callback = sub_80FFDBC,
-};
-
-const s8 gUnknown_08592700[][3] =
-{
- {5, 24, 1},
- {0, 4, 0},
- {8, 16, -1},
- {0, 2, 0},
- {8, 16, 1},
- {0, 2, 0},
- {8, 16, 1},
- {0, 2, 0},
- {8, 16, 1},
- {0, 16, 0},
- {0, 0, 127},
-};
-
-const union AnimCmd gUnknown_08592724[] =
-{
- ANIMCMD_FRAME(28, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859272C[] =
-{
- ANIMCMD_FRAME(32, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592734[] =
-{
- ANIMCMD_FRAME(20, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859273C[] =
-{
- ANIMCMD_FRAME(28, 1, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592744[] =
-{
- ANIMCMD_FRAME(16, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859274C[] =
-{
- ANIMCMD_FRAME(16, 1, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592754[] =
-{
- ANIMCMD_FRAME(28, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_0859275C[] =
-{
- gUnknown_08592724,
- gUnknown_0859272C,
- gUnknown_08592734,
- gUnknown_0859273C,
- gUnknown_08592744,
- gUnknown_0859274C,
- gUnknown_08592754,
-};
-
-const struct SpriteTemplate gUnknown_08592778 =
-{
- .tileTag = ANIM_TAG_LEAF,
- .paletteTag = ANIM_TAG_LEAF,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_0859275C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy,
-};
-
-const union AffineAnimCmd gUnknown_08592790[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, 4, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_085927A8[] = {
- gUnknown_08592790,
-};
-
-const struct SpriteTemplate gUnknown_085927AC =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_08524904,
- .anims = gUnknown_08592318,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100640,
-};
-
-const struct SpriteTemplate gUnknown_085927C4 =
-{
- .tileTag = ANIM_TAG_FLOWER,
- .paletteTag = ANIM_TAG_FLOWER,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592314,
- .images = NULL,
- .affineAnims = gUnknown_085927A8,
- .callback = sub_8100640,
-};
-
-const union AffineAnimCmd gUnknown_085927DC[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, -10, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd gUnknown_085927F4[] = {
- AFFINEANIMCMD_FRAME(192, 192, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, -12, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd gUnknown_0859280C[] = {
- AFFINEANIMCMD_FRAME(143, 143, 0, 0),
- AFFINEANIMCMD_FRAME(0, 0, -15, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08592824[] = {
- gUnknown_085927DC,
-};
-
-const union AffineAnimCmd *const gUnknown_08592828[] = {
- gUnknown_085927F4,
-};
-
-const union AffineAnimCmd *const gUnknown_0859282C[] = {
- gUnknown_0859280C,
-};
-
-const struct SpriteTemplate gUnknown_08592830 =
-{
- .tileTag = ANIM_TAG_SPARKLE_6,
- .paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592824,
- .callback = sub_8100640,
-};
-
-const struct SpriteTemplate gUnknown_08592848 =
-{
- .tileTag = ANIM_TAG_SPARKLE_6,
- .paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592828,
- .callback = sub_8100640,
-};
-
-const struct SpriteTemplate gUnknown_08592860 =
-{
- .tileTag = ANIM_TAG_SPARKLE_6,
- .paletteTag = ANIM_TAG_SPARKLE_6,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859282C,
- .callback = sub_8100640,
-};
-
-// sMagicalLeafBlendColors
-const u16 gUnknown_08592878[] =
-{
- RGB(31, 0, 0),
- RGB(31, 19, 0),
- RGB(31, 31, 0),
- RGB(0, 31, 0),
- RGB(5, 14, 31),
- RGB(22, 10, 31),
- RGB(22, 21, 31),
-};
-
-const struct SpriteTemplate gUnknown_08592888 =
-{
- .tileTag = ANIM_TAG_GREEN_SPIKE,
- .paletteTag = ANIM_TAG_GREEN_SPIKE,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100898,
-};
-
-const union AnimCmd gUnknown_085928A0[] =
-{
- ANIMCMD_FRAME(64, 3),
- ANIMCMD_FRAME(80, 3),
- ANIMCMD_FRAME(96, 3),
- ANIMCMD_FRAME(112, 6),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085928B4[] =
-{
- ANIMCMD_FRAME(64, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(80, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(96, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(112, 6, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085928C8[] =
-{
- gUnknown_085928A0,
- gUnknown_085928B4,
-};
-
-const struct SpriteTemplate gUnknown_085928D0 =
-{
- .tileTag = ANIM_TAG_SLAM_HIT,
- .paletteTag = ANIM_TAG_SLAM_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085928C8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100A50,
-};
-
-const struct SpriteTemplate gUnknown_085928E8 =
-{
- .tileTag = ANIM_TAG_WHIP_HIT,
- .paletteTag = ANIM_TAG_WHIP_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_085928C8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100A50,
-};
-
-const union AnimCmd gUnknown_08592900[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(48, 4),
- ANIMCMD_FRAME(64, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592918[] =
-{
- gUnknown_08592900,
-};
-
-const struct SpriteTemplate gUnknown_0859291C =
-{
- .tileTag = ANIM_TAG_UNUSED_HIT,
- .paletteTag = ANIM_TAG_UNUSED_HIT,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592918,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81009F8,
-};
-
-const struct SpriteTemplate gUnknown_08592934 =
-{
- .tileTag = ANIM_TAG_UNUSED_HIT_2,
- .paletteTag = ANIM_TAG_UNUSED_HIT_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592918,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81009F8,
-};
-
-const union AffineAnimCmd gUnknown_0859294C[] = {
- AFFINEANIMCMD_FRAME(256, 256, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_0859295C[] = {
- AFFINEANIMCMD_FRAME(256, 256, 32, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_0859296C[] = {
- AFFINEANIMCMD_FRAME(256, 256, 64, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_0859297C[] = {
- AFFINEANIMCMD_FRAME(256, 256, 96, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_0859298C[] = {
- AFFINEANIMCMD_FRAME(256, 256, -128, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_0859299C[] = {
- AFFINEANIMCMD_FRAME(256, 256, -96, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085929AC[] = {
- AFFINEANIMCMD_FRAME(256, 256, -64, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085929BC[] = {
- AFFINEANIMCMD_FRAME(256, 256, -32, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_085929CC[] = {
- gUnknown_0859294C,
- gUnknown_0859295C,
- gUnknown_0859296C,
- gUnknown_0859297C,
- gUnknown_0859298C,
- gUnknown_0859299C,
- gUnknown_085929AC,
- gUnknown_085929BC,
-};
-
-const struct SpriteTemplate gUnknown_085929EC =
-{
- .tileTag = ANIM_TAG_HANDS_AND_FEET,
- .paletteTag = ANIM_TAG_HANDS_AND_FEET,
- .oam = &gUnknown_08524974,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085929CC,
- .callback = sub_8100A94,
-};
-
-const union AnimCmd gUnknown_08592A04[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_FRAME(48, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592A18[] =
-{
- gUnknown_08592A04,
-};
-
-const struct SpriteTemplate gCuttingSliceSpriteTemplate =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08592A18,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100AE0,
-};
-
-const struct SpriteTemplate gUnknown_08592A34 =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08592A18,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100B88,
-};
-
-const union AnimCmd gUnknown_08592A4C[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A54[] =
-{
- ANIMCMD_FRAME(4, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A5C[] =
-{
- ANIMCMD_FRAME(8, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A64[] =
-{
- ANIMCMD_FRAME(12, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A6C[] =
-{
- ANIMCMD_FRAME(16, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A74[] =
-{
- ANIMCMD_FRAME(20, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A7C[] =
-{
- ANIMCMD_FRAME(0, 1, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A84[] =
-{
- ANIMCMD_FRAME(4, 1, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A8C[] =
-{
- ANIMCMD_FRAME(8, 1, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592A94[] =
-{
- ANIMCMD_FRAME(12, 1, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592A9C[] =
-{
- gUnknown_08592A4C,
- gUnknown_08592A54,
- gUnknown_08592A5C,
- gUnknown_08592A64,
- gUnknown_08592A6C,
- gUnknown_08592A74,
- gUnknown_08592A7C,
- gUnknown_08592A84,
- gUnknown_08592A8C,
- gUnknown_08592A94,
-};
-
-const struct SpriteTemplate gUnknown_08592AC4 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592A9C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100E1C,
-};
-
-const struct SpriteTemplate gUnknown_08592ADC =
-{
- .tileTag = ANIM_TAG_PROTECT,
- .paletteTag = ANIM_TAG_PROTECT,
- .oam = &gUnknown_08524A3C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8100EF0,
-};
-
-const union AffineAnimCmd gUnknown_08592AF4[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592B04[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -2, 24),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 6),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 2, 12),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_08592B34[] =
-{
- gUnknown_08592AF4,
- gUnknown_08592B04,
-};
-
-const struct SpriteTemplate gUnknown_08592B3C =
-{
- .tileTag = ANIM_TAG_MILK_BOTTLE,
- .paletteTag = ANIM_TAG_MILK_BOTTLE,
- .oam = &gUnknown_08524A94,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08592B34,
- .callback = sub_81010CC,
-};
-
-const union AnimCmd gUnknown_08592B54[] =
-{
- ANIMCMD_FRAME(0, 7),
- ANIMCMD_FRAME(16, 7),
- ANIMCMD_FRAME(32, 7),
- ANIMCMD_FRAME(48, 7),
- ANIMCMD_FRAME(64, 7),
- ANIMCMD_FRAME(80, 7),
- ANIMCMD_FRAME(96, 7),
- ANIMCMD_FRAME(112, 7),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08592B78[] =
-{
- gUnknown_08592B54,
-};
-
-const struct SpriteTemplate gUnknown_08592B7C =
-{
- .tileTag = ANIM_TAG_SPARKLE_2,
- .paletteTag = ANIM_TAG_SPARKLE_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592B78,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810130C,
-};
-
-const struct SpriteTemplate gUnknown_08592B94 =
-{
- .tileTag = ANIM_TAG_SPARKLE_2,
- .paletteTag = ANIM_TAG_SPARKLE_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592B78,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810135C,
-};
-
-const union AnimCmd gUnknown_08592BAC[] =
-{
- ANIMCMD_FRAME(0, 10),
- ANIMCMD_FRAME(4, 10),
- ANIMCMD_FRAME(8, 10),
- ANIMCMD_FRAME(12, 10),
- ANIMCMD_FRAME(16, 26),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(20, 5),
- ANIMCMD_FRAME(24, 15),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592BD0[] =
-{
- ANIMCMD_FRAME(0, 10, .hFlip = TRUE),
- ANIMCMD_FRAME(4, 10, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 10, .hFlip = TRUE),
- ANIMCMD_FRAME(12, 10, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 26, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(20, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(24, 15, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592BF4[] =
-{
- gUnknown_08592BAC,
- gUnknown_08592BD0,
-};
-
-const struct SpriteTemplate gUnknown_08592BFC =
-{
- .tileTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
- .paletteTag = ANIM_TAG_UNUSED_BUBBLE_BURST,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592BF4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101440,
-};
-
-const union AnimCmd gUnknown_08592C14[] =
-{
- ANIMCMD_FRAME(0, 40),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592C1C[] =
-{
- gUnknown_08592C14,
-};
-
-const union AffineAnimCmd gUnknown_08592C20[] =
-{
- AFFINEANIMCMD_FRAME(0x14, 0x14, -30, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 1, 24),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592C20_2[] =
-{
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
- AFFINEANIMCMD_LOOP(10),
-};
-
-const union AffineAnimCmd gUnknown_08592C50[] =
-{
- AFFINEANIMCMD_FRAME(0x14, 0x14, 30, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, -1, 24),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08592C50_2[] =
-{
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 24),
- AFFINEANIMCMD_LOOP(10),
-};
-
-const union AffineAnimCmd *const gUnknown_08592C80[] =
-{
- gUnknown_08592C20,
- gUnknown_08592C50,
-};
-
-const struct SpriteTemplate gUnknown_08592C88 =
-{
- .tileTag = ANIM_TAG_LETTER_Z,
- .paletteTag = ANIM_TAG_LETTER_Z,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_08592C1C,
- .images = NULL,
- .affineAnims = gUnknown_08592C80,
- .callback = sub_81014F4,
-};
-
-const struct SpriteTemplate gUnknown_08592CA0 =
-{
- .tileTag = ANIM_TAG_LOCK_ON,
- .paletteTag = ANIM_TAG_LOCK_ON,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81015AC,
-};
-
-const struct SpriteTemplate gUnknown_08592CB8 =
-{
- .tileTag = ANIM_TAG_LOCK_ON,
- .paletteTag = ANIM_TAG_LOCK_ON,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101898,
-};
-
-const s8 gUnknown_08592CD0[][2] =
-{
- { 64, 64},
- { 0, -64},
- {-64, 64},
- { 32, -32},
-};
-
-const struct SpriteTemplate gUnknown_08592CD8 =
-{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gDummyOamData,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101940,
-};
-
-const struct SpriteTemplate gUnknown_08592CF0 =
-{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gDummyOamData,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101B90,
-};
-
-const union AnimCmd gUnknown_08592D08[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(48, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592D1C[] =
-{
- ANIMCMD_FRAME(48, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592D24[] =
-{
- gUnknown_08592D08,
- gUnknown_08592D1C,
-};
-
-const struct SpriteTemplate gUnknown_08592D2C =
-{
- .tileTag = ANIM_TAG_SLASH,
- .paletteTag = ANIM_TAG_SLASH,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101F40,
-};
-
-const struct SpriteTemplate gUnknown_08592D44 =
-{
- .tileTag = ANIM_TAG_SLASH_2,
- .paletteTag = ANIM_TAG_SLASH_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101FA8,
-};
-
-const struct SpriteTemplate gUnknown_08592D5C =
-{
- .tileTag = ANIM_TAG_SLASH_2,
- .paletteTag = ANIM_TAG_SLASH_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592D24,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8101FF0,
-};
-
-const union AnimCmd gUnknown_08592D74[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(8, 12),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(24, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592D88[] =
-{
- gUnknown_08592D74,
-};
-
-const struct SpriteTemplate gUnknown_08592D8C =
-{
- .tileTag = ANIM_TAG_FOCUS_ENERGY,
- .paletteTag = ANIM_TAG_FOCUS_ENERGY,
- .oam = &gUnknown_08524954,
- .anims = gUnknown_08592D88,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81020D8,
-};
-
-const union AnimCmd gUnknown_08592DA4[] =
-{
- ANIMCMD_FRAME(0, 18),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 18),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(32, 18),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(32, 6),
- ANIMCMD_FRAME(48, 18),
- ANIMCMD_FRAME(32, 6),
- ANIMCMD_FRAME(48, 6),
- ANIMCMD_FRAME(64, 18),
- ANIMCMD_FRAME(48, 6),
- ANIMCMD_FRAME(64, 54),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592DE0[] =
-{
- gUnknown_08592DA4,
-};
-
-const struct SpriteTemplate gUnknown_08592DE4 =
-{
- .tileTag = ANIM_TAG_SPHERE_TO_CUBE,
- .paletteTag = ANIM_TAG_SPHERE_TO_CUBE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592DE0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810217C,
-};
-
-const struct SpriteTemplate gUnknown_08592DFC =
-{
- .tileTag = ANIM_TAG_BLACK_BALL,
- .paletteTag = ANIM_TAG_BLACK_BALL,
- .oam = &gUnknown_08524904,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const union AnimCmd gUnknown_08592E14[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(32, 3),
- ANIMCMD_FRAME(48, 3),
- ANIMCMD_FRAME(64, 3),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592E2C[] =
-{
- gUnknown_08592E14,
-};
-
-const struct SpriteTemplate gUnknown_08592E30 =
-{
- .tileTag = ANIM_TAG_GRAY_SMOKE,
- .paletteTag = ANIM_TAG_GRAY_SMOKE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592E2C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const union AnimCmd gUnknown_08592E48[] =
-{
- ANIMCMD_FRAME(3, 5),
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_FRAME(1, 5),
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592E5C[] =
-{
- gUnknown_08592E48,
-};
-
-const union AffineAnimCmd gUnknown_08592E60[] =
-{
- AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08592E70[] =
-{
- gUnknown_08592E60,
-};
-
-const struct SpriteTemplate gUnknown_08592E74 =
-{
- .tileTag = ANIM_TAG_CONVERSION,
- .paletteTag = ANIM_TAG_CONVERSION,
- .oam = &gUnknown_08524AE4,
- .anims = gUnknown_08592E5C,
- .images = NULL,
- .affineAnims = gUnknown_08592E70,
- .callback = sub_8102268,
-};
-
-const union AnimCmd gUnknown_08592E8C[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(1, 5),
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_FRAME(3, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592EA0[] =
-{
- gUnknown_08592E8C,
-};
-
-const struct SpriteTemplate gUnknown_08592EA4 =
-{
- .tileTag = ANIM_TAG_CONVERSION,
- .paletteTag = ANIM_TAG_CONVERSION,
- .oam = &gUnknown_08524AE4,
- .anims = gUnknown_08592EA0,
- .images = NULL,
- .affineAnims = gUnknown_08592E70,
- .callback = sub_810234C,
-};
-
-const struct SpriteTemplate gUnknown_08592EBC =
-{
- .tileTag = ANIM_TAG_MOON,
- .paletteTag = ANIM_TAG_MOON,
- .oam = &gUnknown_08524A3C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81024E0,
-};
-
-const union AnimCmd gUnknown_08592ED4[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_FRAME(4, 8),
- ANIMCMD_FRAME(8, 8),
- ANIMCMD_FRAME(12, 8),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08592EE8[] =
-{
- gUnknown_08592ED4,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8592EEC =
-{
- .tileTag = ANIM_TAG_GREEN_SPARKLE,
- .paletteTag = ANIM_TAG_GREEN_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08592EE8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102540,
-};
-
-const union AnimCmd gUnknown_08592F04[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(48, 3),
- ANIMCMD_FRAME(64, 5),
- ANIMCMD_FRAME(80, 3),
- ANIMCMD_FRAME(96, 2),
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592F28[] =
-{
- gUnknown_08592F04,
-};
-
-const struct SpriteTemplate gUnknown_08592F2C =
-{
- .tileTag = ANIM_TAG_BLUE_STAR,
- .paletteTag = ANIM_TAG_BLUE_STAR,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592F28,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const struct SpriteTemplate gUnknown_08592F44 =
-{
- .tileTag = ANIM_TAG_HORN_HIT,
- .paletteTag = ANIM_TAG_HORN_HIT,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102844,
-};
-
-const union AnimCmd gUnknown_08592F5C[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(48, 2),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592F70[] =
-{
- gUnknown_08592F5C,
-};
-
-const struct SpriteTemplate gUnknown_08592F74 =
-{
- .tileTag = ANIM_TAG_FANG_ATTACK,
- .paletteTag = ANIM_TAG_FANG_ATTACK,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08592F70,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102BCC,
-};
-
-const union AnimCmd gUnknown_08592F8C[] =
-{
- ANIMCMD_FRAME(0, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592F94[] =
-{
- ANIMCMD_FRAME(4, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592F9C[] =
-{
- ANIMCMD_FRAME(8, 41),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FA4[] =
-{
- ANIMCMD_FRAME(12, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FAC[] =
-{
- ANIMCMD_FRAME(16, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FB4[] =
-{
- ANIMCMD_FRAME(20, 10),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FBC[] =
-{
- ANIMCMD_FRAME(0, 10, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08592FC4[] =
-{
- ANIMCMD_FRAME(4, 10, .vFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08592FCC[] =
-{
- gUnknown_08592F8C,
- gUnknown_08592F94,
- gUnknown_08592F9C,
- gUnknown_08592FA4,
- gUnknown_08592FAC,
- gUnknown_08592FB4,
- gUnknown_08592FBC,
- gUnknown_08592FC4,
-};
-
-const union AffineAnimCmd gUnknown_08592FEC[] =
-{
- AFFINEANIMCMD_FRAME(0xC, 0xC, 0, 16),
- AFFINEANIMCMD_FRAME(0xFFF4, 0xFFF4, 0, 16),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_08593004[] =
-{
- gUnknown_08592FEC,
-};
-
-const struct SpriteTemplate gUnknown_08593008 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593004,
- .callback = sub_8102CD4,
-};
-
-const u16 gUnknown_08593020[][6] =
-{
- {10072, RGB(31, 31, 31), RGB(31, 26, 28), RGB(31, 22, 26), RGB(31, 17, 24), RGB(31, 13, 22)},
- {10097, RGB(31, 31, 31), RGB(25, 31, 26), RGB(20, 31, 21), RGB(15, 31, 16), RGB(10, 31, 12)},
- {10185, RGB(31, 31, 31), RGB(31, 31, 24), RGB(31, 31, 17), RGB(31, 31, 10), RGB(31, 31, 3)},
- {10175, RGB(31, 31, 31), RGB(26, 28, 31), RGB(21, 26, 31), RGB(16, 24, 31), RGB(12, 22, 31)},
-};
-
-const struct SpriteTemplate gUnknown_08593050 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593004,
- .callback = sub_8102EB0,
-};
-
-const struct SpriteTemplate gUnknown_08593068 =
-{
- .tileTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
- .paletteTag = ANIM_TAG_PURPLE_HAND_OUTLINE,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8102FB8,
-};
-
-const union AffineAnimCmd gUnknown_08593080[] =
-{
- AFFINEANIMCMD_FRAME(0xA0, 0xA0, 0, 0),
- AFFINEANIMCMD_FRAME(0x4, 0x4, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593098[] =
-{
- gUnknown_08593080,
-};
-
-const struct SpriteTemplate gUnknown_0859309C =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_085249CC,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593098,
- .callback = sub_8103028,
-};
-
-const union AnimCmd gUnknown_085930B4[] =
-{
- ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
- ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085930C8[] =
-{
- ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 2, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 2, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 2, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085930DC[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(48, 2),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085930F0[] =
-{
- ANIMCMD_FRAME(48, 2),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593104[] =
-{
- gUnknown_085930B4,
- gUnknown_085930DC,
- gUnknown_085930C8,
- gUnknown_085930F0,
-};
-
-const struct SpriteTemplate gUnknown_08593114 =
-{
- .tileTag = ANIM_TAG_THOUGHT_BUBBLE,
- .paletteTag = ANIM_TAG_THOUGHT_BUBBLE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593104,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103164,
-};
-
-const union AffineAnimCmd gUnknown_0859312C[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0x1E, 0x1E, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593144[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 11),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 11),
- AFFINEANIMCMD_LOOP(2),
- AFFINEANIMCMD_FRAME(0xFFE2, 0xFFE2, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593144_2[] =
-{
- AFFINEANIMCMD_FRAME(16, 16, 0, 0),
- AFFINEANIMCMD_FRAME(30, 30, 0, 8),
- AFFINEANIMCMD_FRAME(0, 0, 0, 16),
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0, 0, 4, 11),
- AFFINEANIMCMD_FRAME(0, 0, -4, 11),
- AFFINEANIMCMD_LOOP(2),
- AFFINEANIMCMD_FRAME(-30, -30, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_085931B4[] =
-{
- gUnknown_0859312C,
- gUnknown_08593144,
-};
-
-const struct SpriteTemplate gUnknown_085931BC =
-{
- .tileTag = ANIM_TAG_FINGER,
- .paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_085249D4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085931B4,
- .callback = sub_8103208,
-};
-
-const struct SpriteTemplate gUnknown_085931D4 =
-{
- .tileTag = ANIM_TAG_FINGER,
- .paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_08524974,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085931B4,
- .callback = sub_8103284,
-};
-
-const union AnimCmd gUnknown_085931EC[] =
-{
- ANIMCMD_FRAME(0, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085931F4[] =
-{
- ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085931FC[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859321C[] =
-{
- ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_0859323C[] =
-{
- gUnknown_085931EC,
- gUnknown_085931F4,
- gUnknown_085931FC,
- gUnknown_0859321C,
-};
-
-const struct SpriteTemplate gUnknown_0859324C =
-{
- .tileTag = ANIM_TAG_FINGER_2,
- .paletteTag = ANIM_TAG_FINGER_2,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_0859323C,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103390,
-};
diff --git a/src/effects_2.c b/src/effects_2.c
deleted file mode 100644
index 82336be5c..000000000
--- a/src/effects_2.c
+++ /dev/null
@@ -1,1197 +0,0 @@
-#include "global.h"
-#include "battle_anim.h"
-#include "constants/rgb.h"
-
-extern void sub_8103448(struct Sprite *);
-extern void sub_8103498(struct Sprite *);
-extern void sub_810358C(struct Sprite *);
-extern void sub_8103620(struct Sprite *);
-extern void sub_80A77C8(struct Sprite *);
-extern void sub_81037D8(struct Sprite *);
-extern void sub_810387C(struct Sprite *);
-extern void sub_81038C8(struct Sprite *);
-extern void sub_8103AA4(struct Sprite *);
-extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *);
-extern void sub_8108C94(struct Sprite *);
-extern void sub_80A78AC(struct Sprite *);
-extern void sub_8103FE8(struct Sprite *);
-extern void sub_8104088(struct Sprite *);
-extern void sub_810413C(struct Sprite *);
-extern void sub_81041C4(struct Sprite *);
-extern void sub_8104304(struct Sprite *);
-extern void sub_8104364(struct Sprite *);
-extern void sub_8104414(struct Sprite *);
-extern void sub_8104B1C(struct Sprite *);
-extern void sub_8104BAC(struct Sprite *);
-extern void sub_810501C(struct Sprite *);
-extern void sub_80A7938(struct Sprite *);
-extern void sub_8105538(struct Sprite *);
-extern void sub_81051C4(struct Sprite *);
-extern void sub_81052A4(struct Sprite *);
-extern void sub_81054E8(struct Sprite *);
-extern void sub_8105C48(struct Sprite *);
-extern void sub_8105DE8(struct Sprite *);
-extern void sub_8105E60(struct Sprite *);
-extern void sub_8106140(struct Sprite *);
-extern void sub_81061C4(struct Sprite *);
-extern void sub_810624C(struct Sprite *);
-extern void sub_810673C(struct Sprite *);
-extern void sub_8106878(struct Sprite *);
-extern void sub_8106944(struct Sprite *);
-extern void sub_81069B8(struct Sprite *);
-extern void sub_81069D0(struct Sprite *);
-extern void sub_8106AD0(struct Sprite *);
-extern void sub_8106B54(struct Sprite *);
-extern void sub_8106C80(struct Sprite *);
-extern void sub_8106CD0(struct Sprite *);
-extern void sub_8106E00(struct Sprite *);
-extern void sub_8106F60(struct Sprite *);
-extern void sub_8106F00(struct Sprite *);
-extern void sub_81070AC(struct Sprite *);
-
-const struct SpriteTemplate gUnknown_08593264 =
-{
- .tileTag = ANIM_TAG_FINGER,
- .paletteTag = ANIM_TAG_FINGER,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103448,
-};
-
-const union AnimCmd gUnknown_0859327C[] =
-{
- ANIMCMD_FRAME(4, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593284[] =
-{
- gUnknown_0859327C,
-};
-
-const struct SpriteTemplate gUnknown_08593288 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES,
- .paletteTag = ANIM_TAG_MUSIC_NOTES,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103498,
-};
-
-const struct SpriteTemplate gUnknown_085932A0 =
-{
- .tileTag = 0,
- .paletteTag = 0,
- .oam = &gDummyOamData,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810358C,
-};
-
-extern const union AffineAnimCmd *const gUnknown_08597060[];
-const struct SpriteTemplate gUnknown_085932B8 =
-{
- .tileTag = ANIM_TAG_CLAMP,
- .paletteTag = ANIM_TAG_CLAMP,
- .oam = &gUnknown_08524A9C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08597060,
- .callback = sub_8103620,
-};
-
-const union AnimCmd gUnknown_085932D0[] =
-{
- ANIMCMD_FRAME(0, 9),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(32, 3),
- ANIMCMD_FRAME(48, 3),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085932E4[] =
-{
- gUnknown_085932D0,
-};
-
-const union AffineAnimCmd gUnknown_085932E8[] =
-{
- AFFINEANIMCMD_FRAME(0x50, 0x50, 0, 0),
- AFFINEANIMCMD_FRAME(0x9, 0x9, 0, 18),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593300[] =
-{
- gUnknown_085932E8,
-};
-
-const struct SpriteTemplate gUnknown_08593304 =
-{
- .tileTag = ANIM_TAG_UNUSED_EXPLOSION,
- .paletteTag = ANIM_TAG_UNUSED_EXPLOSION,
- .oam = &gUnknown_08524974,
- .anims = gUnknown_085932E4,
- .images = NULL,
- .affineAnims = gUnknown_08593300,
- .callback = sub_80A77C8,
-};
-
-const union AnimCmd gUnknown_0859331C[] =
-{
- ANIMCMD_FRAME(0, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(24, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(40, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
- ANIMCMD_LOOP(1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593340[] =
-{
- gUnknown_0859331C,
-};
-
-const struct SpriteTemplate gUnknown_08593344 =
-{
- .tileTag = ANIM_TAG_ALERT,
- .paletteTag = ANIM_TAG_ALERT,
- .oam = &gUnknown_08524934,
- .anims = gUnknown_08593340,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81037D8,
-};
-
-const union AffineAnimCmd gUnknown_0859335C[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x14, 0x0, 0, 12),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_0859337C[] =
-{
- gUnknown_0859335C,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593380 =
-{
- .tileTag = ANIM_TAG_SWORD,
- .paletteTag = ANIM_TAG_SWORD,
- .oam = &gUnknown_08524ADC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859337C,
- .callback = sub_810387C,
-};
-
-const struct SpriteTemplate gSonicBoomSpriteTemplate =
-{
- .tileTag = ANIM_TAG_AIR_WAVE,
- .paletteTag = ANIM_TAG_AIR_WAVE,
- .oam = &gUnknown_08524B14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81038C8,
-};
-
-const struct SpriteTemplate gUnknown_085933B0 =
-{
- .tileTag = ANIM_TAG_AIR_WAVE,
- .paletteTag = ANIM_TAG_AIR_WAVE,
- .oam = &gUnknown_08524A54,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103AA4,
-};
-
-const union AffineAnimCmd gUnknown_085933C8[] =
-{
- AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 0),
- AFFINEANIMCMD_FRAME(0x7, 0x7, 0, -56),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_085933E0[] =
-{
- AFFINEANIMCMD_FRAME(0x5, 0x5, 0, 10),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
- AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
- AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
- AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, 0, 10),
- AFFINEANIMCMD_FRAME(0xA, 0xA, 0, 10),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593420[] =
-{
- gUnknown_085933C8,
-};
-
-const union AffineAnimCmd *const gUnknown_08593424[] =
-{
- gUnknown_085933E0,
-};
-
-const struct SpriteTemplate gSupersonicWaveSpriteTemplate =
-{
- .tileTag = ANIM_TAG_GOLD_RING,
- .paletteTag = ANIM_TAG_GOLD_RING,
- .oam = &gUnknown_08524A14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593420,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const struct SpriteTemplate gScreechWaveSpriteTemplate =
-{
- .tileTag = ANIM_TAG_PURPLE_RING,
- .paletteTag = ANIM_TAG_PURPLE_RING,
- .oam = &gUnknown_08524A14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593420,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const struct SpriteTemplate gUnknown_08593458 =
-{
- .tileTag = ANIM_TAG_METAL_SOUND_WAVES,
- .paletteTag = ANIM_TAG_METAL_SOUND_WAVES,
- .oam = &gUnknown_08524A1C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593420,
- .callback = TranslateAnimSpriteToTargetMonLocation,
-};
-
-const struct SpriteTemplate gUnknown_08593470 =
-{
- .tileTag = ANIM_TAG_BLUE_RING_2,
- .paletteTag = ANIM_TAG_BLUE_RING_2,
- .oam = &gUnknown_08524A14,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593424,
- .callback = sub_8108C94,
-};
-
-const struct SpriteTemplate gUnknown_08593488 =
-{
- .tileTag = ANIM_TAG_LARGE_FRESH_EGG,
- .paletteTag = ANIM_TAG_LARGE_FRESH_EGG,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A78AC,
-};
-
-const struct SpriteTemplate gUnknown_085934A0 =
-{
- .tileTag = ANIM_TAG_UNUSED_VOID_LINES,
- .paletteTag = ANIM_TAG_UNUSED_VOID_LINES,
- .oam = &gUnknown_08524A3C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8103FE8,
-};
-
-const union AnimCmd gUnknown_085934B8[] =
-{
- ANIMCMD_FRAME(8, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085934C0[] =
-{
- gUnknown_085934B8,
-};
-
-const union AffineAnimCmd gUnknown_085934C4[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 10, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_085934D4[] =
-{
- gUnknown_085934C4,
-};
-
-const struct SpriteTemplate gUnknown_085934D8 =
-{
- .tileTag = ANIM_TAG_COIN,
- .paletteTag = ANIM_TAG_COIN,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_085934C0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104088,
-};
-
-const struct SpriteTemplate gUnknown_085934F0 =
-{
- .tileTag = ANIM_TAG_COIN,
- .paletteTag = ANIM_TAG_COIN,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_085934C0,
- .images = NULL,
- .affineAnims = gUnknown_085934D4,
- .callback = sub_810413C,
-};
-
-const union AffineAnimCmd gUnknown_08593508[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 20, 1),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd *const gUnknown_08593518[] =
-{
- gUnknown_08593508,
-};
-
-const struct SpriteTemplate gUnknown_0859351C =
-{
- .tileTag = ANIM_TAG_SEED,
- .paletteTag = ANIM_TAG_SEED,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593518,
- .callback = sub_81041C4,
-};
-
-const union AffineAnimCmd gUnknown_08593534[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x4, 0x0, 0, 40),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_0859354C[] =
-{
- gUnknown_08593534,
-};
-
-const struct SpriteTemplate gUnknown_08593550 =
-{
- .tileTag = ANIM_TAG_GUST,
- .paletteTag = ANIM_TAG_GUST,
- .oam = &gUnknown_085249BC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859354C,
- .callback = sub_8104304,
-};
-
-const union AnimCmd gUnknown_08593568[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(32, 20),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593578[] =
-{
- ANIMCMD_FRAME(0, 3, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 3, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 20, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593588[] =
-{
- gUnknown_08593568,
- gUnknown_08593578,
-};
-
-const struct SpriteTemplate gUnknown_08593590 =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_08593588,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104364,
-};
-
-const union AnimCmd gUnknown_085935A8[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(16, 2),
- ANIMCMD_FRAME(32, 1),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085935B8[] =
-{
- ANIMCMD_FRAME(0, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 2, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 1, .vFlip = TRUE, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085935C8[] =
-{
- gUnknown_085935A8,
- gUnknown_085935B8,
-};
-
-const struct SpriteTemplate gUnknown_085935D0 =
-{
- .tileTag = ANIM_TAG_CUT,
- .paletteTag = ANIM_TAG_CUT,
- .oam = &gUnknown_08524A34,
- .anims = gUnknown_085935C8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104414,
-};
-
-const union AffineAnimCmd gUnknown_085935E8[] =
-{
- AFFINEANIMCMD_FRAME(-6, 4, 0, 8),
- AFFINEANIMCMD_FRAME(10, -10, 0, 8),
- AFFINEANIMCMD_FRAME(-4, 6, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593608[] =
-{
- AFFINEANIMCMD_FRAME(-4, -5, 0, 12),
- AFFINEANIMCMD_FRAME(0, 0, 0, 24),
- AFFINEANIMCMD_FRAME(4, 5, 0, 12),
- AFFINEANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593628[] =
-{
- ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(4, 40, .hFlip = TRUE),
- ANIMCMD_FRAME(8, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(12, 4, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_0859363C[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(4, 40),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(12, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593650[] =
-{
- gUnknown_08593628,
- gUnknown_0859363C,
-};
-
-const struct SpriteTemplate gUnknown_08593658 =
-{
- .tileTag = ANIM_TAG_BREATH,
- .paletteTag = ANIM_TAG_BREATH,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08593650,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8104B1C,
-};
-
-const union AffineAnimCmd gUnknown_08593670[] =
-{
- AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF5, 0xFFF5, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593688[] =
-{
- gUnknown_08593670,
-};
-
-const struct SpriteTemplate gUnknown_0859368C =
-{
- .tileTag = ANIM_TAG_ANGER,
- .paletteTag = ANIM_TAG_ANGER,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593688,
- .callback = sub_8104BAC,
-};
-
-const union AffineAnimCmd gUnknown_085936A4[] =
-{
- AFFINEANIMCMD_FRAME(-10, 9, 0, 7),
- AFFINEANIMCMD_FRAME(20, -20, 0, 7),
- AFFINEANIMCMD_FRAME(-20, 20, 0, 7),
- AFFINEANIMCMD_FRAME(10, -9, 0, 7),
- AFFINEANIMCMD_LOOP(2),
- AFFINEANIMCMD_END,
-};
-
-const struct SpriteTemplate gUnknown_085936D4 =
-{
- .tileTag = ANIM_TAG_PENCIL,
- .paletteTag = ANIM_TAG_PENCIL,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810501C,
-};
-
-const struct SpriteTemplate gUnknown_085936EC =
-{
- .tileTag = ANIM_TAG_SNORE_Z,
- .paletteTag = ANIM_TAG_SNORE_Z,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A7938,
-};
-
-const union AnimCmd gUnknown_08593704[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_FRAME(48, 5),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593718[] =
-{
- gUnknown_08593704,
-};
-//*
-const struct SpriteTemplate gBattleAnimSpriteTemplate_859371C =
-{
- .tileTag = ANIM_TAG_EXPLOSION,
- .paletteTag = ANIM_TAG_EXPLOSION,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593718,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const union AffineAnimCmd gUnknown_08593734[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 4),
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 2),
- AFFINEANIMCMD_JUMP(0),
-};
-
-const union AffineAnimCmd gUnknown_08593754[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593764[] =
-{
- AFFINEANIMCMD_FRAME(0xFFF8, 0x4, 0, 8),
- AFFINEANIMCMD_LOOP(0),
- AFFINEANIMCMD_FRAME(0x10, 0xFFF8, 0, 8),
- AFFINEANIMCMD_FRAME(0xFFF0, 0x8, 0, 8),
- AFFINEANIMCMD_LOOP(1),
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 15),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_085937A4[] =
-{
- gUnknown_08593734,
- gUnknown_08593754,
- gUnknown_08593764,
-};
-//*
-const struct SpriteTemplate gUnknown_085937B0 =
-{
- .tileTag = ANIM_TAG_BREAKING_EGG,
- .paletteTag = ANIM_TAG_BREAKING_EGG,
- .oam = &gUnknown_08524AF4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_085937A4,
- .callback = sub_8105538,
-};
-
-const union AffineAnimCmd gUnknown_085937C8[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 30),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd gUnknown_085937E0[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0x20, 0x20, 0, 15),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd gUnknown_085937F8[] =
-{
- AFFINEANIMCMD_FRAME(0x10, 0x10, 0, 0),
- AFFINEANIMCMD_FRAME(0xB, 0xB, 0, 45),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593810[] =
-{
- gUnknown_085937C8,
- gUnknown_085937E0,
-};
-
-const union AffineAnimCmd *const gUnknown_08593818[] =
-{
- gUnknown_085937F8,
-};
-
-const struct SpriteTemplate gUnknown_0859381C =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_085249DC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_80A77C8,
-};
-//*
-const union AffineAnimCmd gUnknown_08593834[] =
-{
- AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
- AFFINEANIMCMD_FRAME(0xFFF0, 0xFFF0, 0, 30),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd *const gUnknown_0859384C[] =
-{
- gUnknown_08593834,
-};
-
-const struct SpriteTemplate gUnknown_08593850 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_0859384C,
- .callback = sub_80A77C8,
-};
-
-const struct SpriteTemplate gUnknown_08593868 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_81051C4,
-};
-
-const struct SpriteTemplate gUnknown_08593880 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593818,
- .callback = sub_81052A4,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593898 =
-{
- .tileTag = ANIM_TAG_THIN_RING,
- .paletteTag = ANIM_TAG_THIN_RING,
- .oam = &gUnknown_08524AFC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593810,
- .callback = sub_81054E8,
-};
-
-const union AffineAnimCmd gUnknown_085938B0[] =
-{
- AFFINEANIMCMD_FRAME(96, -13, 0, 8),
- AFFINEANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_085938C0[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(4, 3),
- ANIMCMD_FRAME(8, 3),
- ANIMCMD_FRAME(4, 3),
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_085938D8[] =
-{
- gUnknown_085938C0,
-};
-
-const struct SpriteTemplate gUnknown_085938DC =
-{
- .tileTag = ANIM_TAG_SPEED_DUST,
- .paletteTag = ANIM_TAG_SPEED_DUST,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_085938D8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105C48,
-};
-
-const s8 gUnknown_085938F4[][2] =
-{
- {30, 28},
- {-20, 24},
- {16, 26},
- {-10, 28},
-};
-
-const union AnimCmd gUnknown_085938FC[] =
-{
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(32, 15),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 15, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 6, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(32, 15),
- ANIMCMD_FRAME(16, 6),
- ANIMCMD_FRAME(0, 6),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593934[] =
-{
- gUnknown_085938FC,
-};
-
-const struct SpriteTemplate gUnknown_08593938 =
-{
- .tileTag = ANIM_TAG_BELL,
- .paletteTag = ANIM_TAG_BELL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593934,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80A77C8,
-};
-
-const u16 gUnknown_08593950[] =
-{
- 10206,
- 9999,
- 9998,
- 0,
-};
-
-const struct SpriteTemplate gUnknown_08593958 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES_2,
- .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105DE8,
-};
-
-const struct SpriteTemplate gUnknown_08593970 =
-{
- .tileTag = ANIM_TAG_MAGENTA_HEART,
- .paletteTag = ANIM_TAG_MAGENTA_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8105E60,
-};
-
-const union AffineAnimCmd gUnknown_08593988[] =
-{
- AFFINEANIMCMD_FRAME(0x000A, 0xFFF3, 0x00, 0x0A),
- AFFINEANIMCMD_FRAME(0xFFF6, 0x000D, 0x00, 0x0A),
- AFFINEANIMCMD_END,
-};
-
-const struct SpriteTemplate gUnknown_085939A0 =
-{
- .tileTag = ANIM_TAG_RED_HEART,
- .paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106140,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_85939B8 =
-{
- .tileTag = ANIM_TAG_RED_HEART,
- .paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81061C4,
-};
-
-const struct SpriteTemplate gUnknown_085939D0 =
-{
- .tileTag = ANIM_TAG_RED_HEART,
- .paletteTag = ANIM_TAG_RED_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_810624C,
-};
-
-const union AffineAnimCmd gUnknown_085939E8[] =
-{
- AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593A00[] =
-{
- gUnknown_085939E8,
-};
-
-const struct SpriteTemplate gHiddenPowerOrbSpriteTemplate =
-{
- .tileTag = ANIM_TAG_RED_ORB,
- .paletteTag = ANIM_TAG_RED_ORB,
- .oam = &gUnknown_0852496C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593A00,
- .callback = sub_810673C,
-};
-
-const struct SpriteTemplate gHiddenPowerOrbScatterSpriteTemplate =
-{
- .tileTag = ANIM_TAG_RED_ORB,
- .paletteTag = ANIM_TAG_RED_ORB,
- .oam = &gUnknown_085249CC,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593A00,
- .callback = sub_8106878,
-};
-
-const union AffineAnimCmd gUnknown_08593A34[] =
-{
- AFFINEANIMCMD_FRAME(0x80, 0x80, 0, 0),
- AFFINEANIMCMD_FRAME(0x8, 0x8, 0, 1),
- AFFINEANIMCMD_JUMP(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593A4C[] =
-{
- gUnknown_08593A34,
-};
-
-const struct SpriteTemplate gUnknown_08593A50 =
-{
- .tileTag = ANIM_TAG_RED_ORB_2,
- .paletteTag = ANIM_TAG_RED_ORB_2,
- .oam = &gUnknown_085249C4,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593A4C,
- .callback = sub_8106944,
-};
-
-const union AnimCmd gUnknown_08593A68[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593A80[] =
-{
- gUnknown_08593A68,
-};
-
-const struct SpriteTemplate gUnknown_08593A84 =
-{
- .tileTag = ANIM_TAG_EYE_SPARKLE,
- .paletteTag = ANIM_TAG_EYE_SPARKLE,
- .oam = &gUnknown_0852490C,
- .anims = gUnknown_08593A80,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81069B8,
-};
-
-const union AnimCmd gUnknown_08593A9C[] =
-{
- ANIMCMD_FRAME(0, 24),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593AA4[] =
-{
- gUnknown_08593A9C,
-};
-
-const struct SpriteTemplate gUnknown_08593AA8 =
-{
- .tileTag = ANIM_TAG_ANGEL,
- .paletteTag = ANIM_TAG_ANGEL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593AA4,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_81069D0,
-};
-
-const struct SpriteTemplate gUnknown_08593AC0 =
-{
- .tileTag = ANIM_TAG_PINK_HEART,
- .paletteTag = ANIM_TAG_PINK_HEART,
- .oam = &gUnknown_0852490C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106AD0,
-};
-
-const union AnimCmd gUnknown_08593AD8[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd gUnknown_08593AE0[] =
-{
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gUnknown_08593AE8[] =
-{
- gUnknown_08593AD8,
- gUnknown_08593AE0,
-};
-
-const struct SpriteTemplate gUnknown_08593AF0 =
-{
- .tileTag = ANIM_TAG_DEVIL,
- .paletteTag = ANIM_TAG_DEVIL,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593AE8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106B54,
-};
-
-const union AnimCmd gUnknown_08593B08[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_FRAME(48, 4),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593B1C[] =
-{
- ANIMCMD_FRAME(0, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 4, .hFlip = TRUE),
- ANIMCMD_FRAME(48, 4, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593B30[] =
-{
- gUnknown_08593B08,
- gUnknown_08593B1C,
-};
-
-const struct SpriteTemplate gUnknown_08593B38 =
-{
- .tileTag = ANIM_TAG_SWIPE,
- .paletteTag = ANIM_TAG_SWIPE,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593B30,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106C80,
-};
-
-const union AnimCmd gUnknown_08593B50[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_FRAME(16, 8),
- ANIMCMD_FRAME(32, 8),
- ANIMCMD_FRAME(16, 8),
- ANIMCMD_END,
-};
-
-const union AnimCmd gUnknown_08593B64[] =
-{
- ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 8, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 8, .hFlip = TRUE),
- ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gUnknown_08593B78[] =
-{
- gUnknown_08593B50,
- gUnknown_08593B64,
-};
-
-const struct SpriteTemplate gUnknown_08593B80 =
-{
- .tileTag = ANIM_TAG_MOVEMENT_WAVES,
- .paletteTag = ANIM_TAG_MOVEMENT_WAVES,
- .oam = &gUnknown_08524914,
- .anims = gUnknown_08593B78,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106CD0,
-};
-
-const union AffineAnimCmd gUnknown_08593B98[] =
-{
- AFFINEANIMCMD_FRAME(-12, 8, 0, 4),
- AFFINEANIMCMD_FRAME(20, -20, 0, 4),
- AFFINEANIMCMD_FRAME(-8, 12, 0, 4),
- AFFINEANIMCMD_END,
-};
-
-const struct SpriteTemplate gBattleAnimSpriteTemplate_8593BB8 =
-{
- .tileTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
- .paletteTag = ANIM_TAG_JAGGED_MUSIC_NOTE,
- .oam = &gUnknown_08524914,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8106E00,
-};
-
-const union AffineAnimCmd gUnknown_08593BD0[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 5),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593BE0[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 16),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd gUnknown_08593BF0[] =
-{
- AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 16),
- AFFINEANIMCMD_END_ALT(1),
-};
-
-const union AffineAnimCmd *const gUnknown_08593C00[] =
-{
- gUnknown_08593BD0,
- gUnknown_08593BE0,
- gUnknown_08593BF0,
-};
-
-extern const union AnimCmd *const gUnknown_08592FCC[];
-const struct SpriteTemplate gUnknown_08593C0C =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES_2,
- .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593C00,
- .callback = sub_8106F60,
-};
-
-const struct SpriteTemplate gUnknown_08593C24 =
-{
- .tileTag = ANIM_TAG_MUSIC_NOTES_2,
- .paletteTag = ANIM_TAG_MUSIC_NOTES_2,
- .oam = &gUnknown_0852496C,
- .anims = gUnknown_08592FCC,
- .images = NULL,
- .affineAnims = gUnknown_08593C00,
- .callback = sub_8106F00,
-};
-
-const union AffineAnimCmd gUnknown_08593C3C[] =
-{
- AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd gUnknown_08593C4C[] =
-{
- AFFINEANIMCMD_FRAME(0x200, 0x100, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-const union AffineAnimCmd *const gUnknown_08593C5C[] =
-{
- gUnknown_08593C3C,
- gUnknown_08593C4C,
-};
-
-const struct SpriteTemplate gUnknown_08593C64 =
-{
- .tileTag = ANIM_TAG_GUARD_RING,
- .paletteTag = ANIM_TAG_GUARD_RING,
- .oam = &gUnknown_08524B1C,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gUnknown_08593C5C,
- .callback = sub_81070AC,
-};
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 97c264d49..360dd2466 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -30,8 +30,8 @@
#include "field_weather.h"
#include "international_string_util.h"
#include "naming_screen.h"
-#include "field_screen.h"
#include "pokemon_storage_system.h"
+#include "field_screen_effect.h"
#include "battle.h" // to get rid of later
struct EggHatchData
@@ -61,8 +61,6 @@ extern const u32 gUnknown_08331F60[]; // tilemap gameboy circle
extern const u8 gText_HatchedFromEgg[];
extern const u8 gText_NickHatchPrompt[];
-extern void play_some_sound(void);
-
static void Task_EggHatch(u8 taskID);
static void CB2_EggHatch_0(void);
static void CB2_EggHatch_1(void);
@@ -580,7 +578,7 @@ static void Task_EggHatchPlayBGM(u8 taskID)
if (gTasks[taskID].data[0] == 0)
{
StopMapMusic();
- play_some_sound();
+ PlayRainSoundEffect();
}
if (gTasks[taskID].data[0] == 1)
PlayBGM(MUS_ME_SHINKA);
diff --git a/src/electric.c b/src/electric.c
index 5d65915b2..ed495fa59 100644
--- a/src/electric.c
+++ b/src/electric.c
@@ -1,24 +1,43 @@
#include "global.h"
#include "battle_anim.h"
#include "constants/rgb.h"
+#include "trig.h"
+#include "constants/songs.h"
+#include "sound.h"
-extern void sub_810A1A8(struct Sprite *);
-extern void sub_810A214(struct Sprite *);
-extern void sub_810A274(struct Sprite *);
-extern void sub_810A308(struct Sprite *);
+extern void sub_810E2C8(struct Sprite *);
+extern bool8 sub_810B614(struct Task *task, u8 taskId);
extern void TranslateAnimSpriteToTargetMonLocation(struct Sprite *);
-extern void sub_810A46C(struct Sprite *);
-extern void sub_810A5BC(struct Sprite *);
-extern void sub_810A628(struct Sprite *);
-extern void sub_810A75C(struct Sprite *);
-extern void sub_810A9DC(struct Sprite *);
-extern void sub_810AA2C(struct Sprite *);
-extern void sub_810ACD8(struct Sprite *);
-extern void sub_810AD30(struct Sprite *);
-extern void sub_810AD98(struct Sprite *);
-extern void sub_810B1F0(struct Sprite *);
-extern void sub_810B23C(struct Sprite *);
-extern void sub_810B51C(struct Sprite *);
+
+static void sub_810A1A8(struct Sprite *);
+static void sub_810A1F8(struct Sprite *);
+static void sub_810A214(struct Sprite *);
+static void sub_810A258(struct Sprite *);
+static void sub_810A274(struct Sprite *);
+static void sub_810A308(struct Sprite *);
+static void sub_810A46C(struct Sprite *);
+static void sub_810A4F4(struct Sprite *);
+static void sub_810A56C(struct Sprite *);
+static void sub_810A5BC(struct Sprite *);
+static void sub_810A628(struct Sprite *);
+static void sub_810A6EC(struct Sprite *);
+static void sub_810A75C(struct Sprite *);
+static void sub_810A834(u8 taskId);
+static void sub_810A9DC(struct Sprite *);
+static void sub_810AA2C(struct Sprite *);
+static void sub_810AAB0(struct Sprite *);
+static void sub_810AB78(u8 taskId);
+static void sub_810AC8C(struct Sprite *);
+static void sub_810ACC0(struct Sprite *);
+static void sub_810ACD8(struct Sprite *);
+static void sub_810AD30(struct Sprite *);
+static void sub_810AD98(struct Sprite *);
+static void sub_810ADF8(struct Sprite *);
+static bool8 sub_810B154(struct Task *task, u8 taskId);
+static void sub_810B1F0(struct Sprite *);
+static void sub_810B23C(struct Sprite *);
+static bool8 sub_810B430(struct Task *task, u8 taskId);
+static void sub_810B51C(struct Sprite *);
const union AnimCmd gUnknown_085956A4[] =
{
@@ -436,3 +455,1041 @@ const struct SpriteTemplate gUnknown_08595A30 =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_810B51C,
};
+
+static void sub_810A1A8(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->pos1.y += gBattleAnimArgs[1];
+ sprite->callback = sub_810A1F8;
+}
+
+static void sub_810A1F8(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_810A214(struct Sprite *sprite)
+{
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ else
+ sprite->pos1.x += gBattleAnimArgs[0];
+
+ sprite->callback = sub_810A258;
+}
+
+static void sub_810A258(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ DestroySpriteAndMatrix(sprite);
+}
+
+static void sub_810A274(struct Sprite *sprite)
+{
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x -= gBattleAnimArgs[0];
+ sprite->pos1.y -= gBattleAnimArgs[1];
+ }
+ else
+ {
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ }
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[2];
+ sprite->data[2] = gBattleAnimArgs[3];
+ sprite->data[3] = gBattleAnimArgs[4];
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = TranslateSpriteInCircleOverDuration;
+}
+
+static void sub_810A308(struct Sprite *sprite)
+{
+ u8 battler;
+ u32 matrixNum;
+ s16 sineVal;
+
+ switch (gBattleAnimArgs[4])
+ {
+ case 0:
+ battler = gBattleAnimAttacker;
+ break;
+ case 1:
+ default:
+ battler = gBattleAnimTarget;
+ break;
+ case 2:
+ if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ battler = gBattleAnimAttacker;
+ else
+ battler = BATTLE_PARTNER(gBattleAnimAttacker);
+ break;
+ case 3:
+ if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker)))
+ battler = BATTLE_PARTNER(gBattleAnimTarget);
+ else
+ battler = gBattleAnimTarget;
+ break;
+ }
+
+ if (gBattleAnimArgs[5] == 0)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+
+ sprite->pos2.x = (gSineTable[gBattleAnimArgs[0]] * gBattleAnimArgs[1]) >> 8;
+ sprite->pos2.y = (gSineTable[gBattleAnimArgs[0] + 64] * gBattleAnimArgs[1]) >> 8;
+
+ if (gBattleAnimArgs[6] & 1)
+ sprite->oam.priority = GetBattlerSpriteBGPriority(battler) + 1;
+
+ matrixNum = sprite->oam.matrixNum;
+ sineVal = gSineTable[gBattleAnimArgs[2]];
+
+ gOamMatrices[matrixNum].a = gOamMatrices[matrixNum].d = gSineTable[gBattleAnimArgs[2] + 64];
+ gOamMatrices[matrixNum].b = sineVal;
+ gOamMatrices[matrixNum].c = -sineVal;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->callback = sub_810E2C8;
+}
+
+static void sub_810A46C(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[3];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = gBattleAnimArgs[2];
+ sprite->data[6] = gBattleAnimArgs[5];
+ sprite->data[7] = gBattleAnimArgs[4];
+ sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
+ sprite->callback = sub_810A4F4;
+ sub_810A4F4(sprite);
+}
+
+static void sub_810A4F4(struct Sprite *sprite)
+{
+ if (!AnimTranslateLinear(sprite))
+ {
+ sprite->pos2.x += Sin(sprite->data[7], sprite->data[5]);
+ sprite->pos2.y += Cos(sprite->data[7], sprite->data[5]);
+ sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
+ if(!(sprite->data[7] % 3))
+ sprite->invisible ^= 1;
+ }
+ else
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_810A56C(struct Sprite *sprite)
+{
+ if (--sprite->data[5] == -1)
+ {
+ sprite->invisible ^= 1;
+ sprite->data[5] = sprite->data[4];
+ }
+ if (sprite->data[3]-- <= 0)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_810A5BC(struct Sprite *sprite)
+{
+ if (IsContest() || GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER)
+ gBattleAnimArgs[1] = -gBattleAnimArgs[1];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[1];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[2];
+ sprite->data[3] = gBattleAnimArgs[0];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->data[5] = gBattleAnimArgs[3];
+ sprite->callback = sub_810A56C;
+}
+
+static void sub_810A628(struct Sprite *sprite)
+{
+ u8 battler;
+
+ sprite->data[0] = gBattleAnimArgs[3];
+ if (gBattleAnimArgs[7] & 0x8000)
+ battler = gBattleAnimTarget;
+ else
+ battler = gBattleAnimAttacker;
+
+ if (IsContest() || GetBattlerSide(battler) == B_SIDE_PLAYER)
+ gBattleAnimArgs[0] = -gBattleAnimArgs[0];
+
+ sprite->pos1.x = GetBattlerSpriteCoord(battler, BATTLER_COORD_X_2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(battler, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[1];
+
+ sprite->data[4] = gBattleAnimArgs[7] & 0x7FFF;
+ sprite->data[5] = gBattleAnimArgs[2];
+ sprite->data[6] = gBattleAnimArgs[5];
+ sprite->data[7] = gBattleAnimArgs[4];
+
+ sprite->oam.tileNum += gBattleAnimArgs[6] * 4;
+ sprite->callback = sub_810A6EC;
+ sprite->callback(sprite);
+}
+
+static void sub_810A6EC(struct Sprite *sprite)
+{
+ sprite->pos2.x = Sin(sprite->data[7], sprite->data[5]);
+ sprite->pos2.y = Cos(sprite->data[7], sprite->data[5]);
+
+ sprite->data[7] = (sprite->data[7] + sprite->data[6]) & 0xFF;
+ if (sprite->data[7] % sprite->data[4] == 0)
+ sprite->invisible ^= 1;
+
+ if (sprite->data[0]-- <= 0)
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_810A75C(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, FALSE);
+ sprite->oam.tileNum += gBattleAnimArgs[3] * 4;
+
+ if (gBattleAnimArgs[3] == 1)
+ sprite->oam.matrixNum = 8;
+ else if (gBattleAnimArgs[3] == 2)
+ sprite->oam.matrixNum = 16;
+
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_810A7DC(u8 taskId)
+{
+ gTasks[taskId].data[0] = GetBattlerSpriteCoord(gBattleAnimTarget, 0) + gBattleAnimArgs[0];
+ gTasks[taskId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + gBattleAnimArgs[1];
+ gTasks[taskId].data[2] = gBattleAnimArgs[2];
+ gTasks[taskId].func = sub_810A834;
+}
+
+#ifdef NONMATCHING // couldn't get the proper tail merging in the "CreateSprite" switch cases.(ported from ruby)
+static void sub_810A834(u8 taskId)
+{
+ u16 r8;
+ s16 r12;
+ s16 r2;
+ u8 spriteId = 0;
+ u8 r7 = 0;
+ u8 sp = gTasks[taskId].data[2];
+ s16 r4 = gTasks[taskId].data[0];
+ s16 r6 = gTasks[taskId].data[1];
+
+ if (!gTasks[taskId].data[2])
+ {
+ r8 = 0;
+ r2 = 1;
+ r12 = 16;
+ }
+ else
+ {
+ r12 = 16;
+ r8 = 8;
+ r2 = 4;
+ }
+
+ switch (gTasks[taskId].data[10])
+ {
+ case 0:
+ r8 += r2 * 0;
+ spriteId = CreateSprite(&gUnknown_08595828, r4, r6 + (r12 * 1), 2);
+ r7++;
+ break;
+ case 2:
+ r8 += r2;
+ spriteId = CreateSprite(&gUnknown_08595828, r4, r6 + (r12 * 2), 2);
+ r7++;
+ break;
+ case 4:
+ r8 += r2 * 2;
+ spriteId = CreateSprite(&gUnknown_08595828, r4, r6 + (r12 * 3), 2);
+ r7++;
+ break;
+ case 6:
+ r8 += r2 * 3;
+ spriteId = CreateSprite(&gUnknown_08595828, r4, r6 + (r12 * 4), 2);
+ r7++;
+ break;
+ case 8:
+ spriteId = CreateSprite(&gUnknown_08595828, r4, r6 + (r12 * 5), 2);
+ r7++;
+ break;
+ case 10:
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ if (r7)
+ {
+ gSprites[spriteId].oam.tileNum += r8;
+ gSprites[spriteId].data[0] = sp;
+ gSprites[spriteId].callback(&gSprites[spriteId]);
+ }
+
+ gTasks[taskId].data[10]++;
+}
+#else
+NAKED
+static void sub_810A834(u8 taskId)
+{
+ asm_unified("\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ movs r5, 0\n\
+ movs r7, 0\n\
+ ldr r1, =gTasks\n\
+ lsls r0, 2\n\
+ add r0, r9\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldrb r2, [r0, 0xC]\n\
+ str r2, [sp]\n\
+ ldrh r4, [r0, 0x8]\n\
+ ldrh r6, [r0, 0xA]\n\
+ movs r3, 0xC\n\
+ ldrsh r0, [r0, r3]\n\
+ mov r10, r1\n\
+ cmp r0, 0\n\
+ bne _0810A878\n\
+ movs r0, 0\n\
+ mov r8, r0\n\
+ movs r2, 0x1\n\
+ movs r1, 0x10\n\
+ mov r12, r1\n\
+ b _0810A882\n\
+ .pool\n\
+_0810A878:\n\
+ movs r2, 0x10\n\
+ mov r12, r2\n\
+ movs r3, 0x8\n\
+ mov r8, r3\n\
+ movs r2, 0x4\n\
+_0810A882:\n\
+ mov r0, r9\n\
+ lsls r1, r0, 2\n\
+ adds r0, r1, r0\n\
+ lsls r0, 3\n\
+ add r0, r10\n\
+ movs r3, 0x1C\n\
+ ldrsh r0, [r0, r3]\n\
+ mov r10, r1\n\
+ cmp r0, 0xA\n\
+ bhi _0810A978\n\
+ lsls r0, 2\n\
+ ldr r1, =_0810A8A4\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .pool\n\
+ .align 2, 0\n\
+_0810A8A4:\n\
+ .4byte _0810A8D0\n\
+ .4byte _0810A978\n\
+ .4byte _0810A8E4\n\
+ .4byte _0810A978\n\
+ .4byte _0810A904\n\
+ .4byte _0810A978\n\
+ .4byte _0810A91A\n\
+ .4byte _0810A978\n\
+ .4byte _0810A93C\n\
+ .4byte _0810A978\n\
+ .4byte _0810A970\n\
+_0810A8D0:\n\
+ ldr r0, =gUnknown_08595828\n\
+ lsls r1, r4, 16\n\
+ asrs r1, 16\n\
+ lsls r2, r6, 16\n\
+ asrs r2, 16\n\
+ mov r4, r12\n\
+ lsls r3, r4, 16\n\
+ b _0810A952\n\
+ .pool\n\
+_0810A8E4:\n\
+ mov r0, r12\n\
+ lsls r3, r0, 17\n\
+ mov r1, r8\n\
+ adds r0, r1, r2\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ ldr r0, =gUnknown_08595828\n\
+ lsls r1, r4, 16\n\
+ asrs r1, 16\n\
+ lsls r2, r6, 16\n\
+ asrs r2, 16\n\
+ b _0810A952\n\
+ .pool\n\
+_0810A904:\n\
+ mov r3, r12\n\
+ lsls r0, r3, 16\n\
+ asrs r0, 16\n\
+ lsls r3, r0, 1\n\
+ adds r3, r0\n\
+ lsls r0, r2, 1\n\
+ add r0, r8\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ b _0810A946\n\
+_0810A91A:\n\
+ mov r0, r12\n\
+ lsls r3, r0, 18\n\
+ lsls r0, r2, 1\n\
+ adds r0, r2\n\
+ add r0, r8\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ ldr r0, =gUnknown_08595828\n\
+ lsls r1, r4, 16\n\
+ asrs r1, 16\n\
+ lsls r2, r6, 16\n\
+ asrs r2, 16\n\
+ b _0810A952\n\
+ .pool\n\
+_0810A93C:\n\
+ mov r1, r12\n\
+ lsls r0, r1, 16\n\
+ asrs r0, 16\n\
+ lsls r3, r0, 2\n\
+ adds r3, r0\n\
+_0810A946:\n\
+ ldr r0, =gUnknown_08595828\n\
+ lsls r1, r4, 16\n\
+ asrs r1, 16\n\
+ lsls r2, r6, 16\n\
+ asrs r2, 16\n\
+ lsls r3, 16\n\
+_0810A952:\n\
+ asrs r3, 16\n\
+ adds r2, r3\n\
+ lsls r2, 16\n\
+ asrs r2, 16\n\
+ movs r3, 0x2\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ b _0810A978\n\
+ .pool\n\
+_0810A970:\n\
+ mov r0, r9\n\
+ bl DestroyAnimVisualTask\n\
+ b _0810A9BC\n\
+_0810A978:\n\
+ cmp r7, 0\n\
+ beq _0810A9AC\n\
+ ldr r4, =gSprites\n\
+ lsls r3, r5, 4\n\
+ adds r3, r5\n\
+ lsls r3, 2\n\
+ adds r0, r3, r4\n\
+ ldrh r5, [r0, 0x4]\n\
+ lsls r2, r5, 22\n\
+ lsrs r2, 22\n\
+ add r2, r8\n\
+ ldr r6, =0x000003ff\n\
+ adds r1, r6, 0\n\
+ ands r2, r1\n\
+ ldr r1, =0xfffffc00\n\
+ ands r1, r5\n\
+ orrs r1, r2\n\
+ strh r1, [r0, 0x4]\n\
+ mov r1, sp\n\
+ ldrh r1, [r1]\n\
+ strh r1, [r0, 0x2E]\n\
+ adds r4, 0x1C\n\
+ adds r3, r4\n\
+ ldr r1, [r3]\n\
+ bl _call_via_r1\n\
+_0810A9AC:\n\
+ ldr r0, =gTasks\n\
+ mov r1, r10\n\
+ add r1, r9\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ ldrh r0, [r1, 0x1C]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0x1C]\n\
+_0810A9BC:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ ");
+}
+#endif
+
+static void sub_810A9DC(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ sprite->oam.shape = 2;
+ sprite->oam.size = 0;
+ }
+ else
+ {
+ sprite->oam.shape = 0;
+ sprite->oam.size = 1;
+ }
+ if (++sprite->data[1] == 15)
+ DestroySprite(sprite);
+}
+
+static void sub_810AA2C(struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ sprite->pos1.x += gBattleAnimArgs[0];
+ sprite->pos1.y += gBattleAnimArgs[1];
+ spriteId = CreateSprite(&gUnknown_08595840, sprite->pos1.x + 32, sprite->pos1.y, sprite->subpriority);
+ gSprites[spriteId].oam.tileNum += 8;
+ gAnimVisualTaskCount++;
+ gSprites[spriteId].callback = sub_810AAB0;
+ sprite->callback = sub_810AAB0;
+}
+
+static void sub_810AAB0(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 3)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible ^= 1;
+ }
+
+ if (++sprite->data[1] == 51)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_810AAFC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (!gBattleAnimArgs[0])
+ {
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ else
+ {
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+
+ task->data[6] = gBattleAnimArgs[1];
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 0;
+ task->data[10] = 0;
+ task->data[11] = gBattleAnimArgs[3];
+ task->data[12] = 0;
+ task->data[13] = gBattleAnimArgs[2];
+ task->func = sub_810AB78;
+}
+
+void sub_810AB78(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (task->data[6])
+ {
+ if (++task->data[12] > task->data[13])
+ {
+ u8 spriteId;
+ task->data[12] = 0;
+ spriteId = CreateSprite(&gUnknown_085958A8, task->data[14], task->data[15], 2);
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+ sprite->pos1.x += gUnknown_08595858[task->data[9]][0];
+ sprite->pos1.y += gUnknown_08595858[task->data[9]][1];
+
+ sprite->data[0] = 40 - task->data[8] * 5;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = task->data[14];
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = task->data[15];
+ sprite->data[5] = taskId;
+
+ InitAnimLinearTranslation(sprite);
+ StoreSpriteCallbackInData6(sprite, sub_810ACC0);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+
+ if (++task->data[9] > 15)
+ task->data[9] = 0;
+
+ if (++task->data[10] >= task->data[11])
+ {
+ task->data[10] = 0;
+ if (task->data[8] <= 5)
+ task->data[8]++;
+ }
+
+ task->data[7]++;
+ task->data[6]--;
+ }
+ }
+ }
+ else if(task->data[7] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_810AC8C(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ {
+ gTasks[sprite->data[5]].data[7]--;
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_810ACC0(struct Sprite *sprite)
+{
+ StartSpriteAnim(sprite, 1);
+ sprite->callback = sub_810AC8C;
+}
+
+static void sub_810ACD8(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
+}
+
+static void sub_810AD30(struct Sprite *sprite)
+{
+ if (!gBattleAnimArgs[0])
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ }
+
+ sprite->pos2.x = gBattleAnimArgs[1];
+ sprite->pos2.y = gBattleAnimArgs[2];
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+}
+
+static void sub_810AD98(struct Sprite *sprite)
+{
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ sprite->data[6] = GetAnimBattlerSpriteId(0);
+ sprite->data[7] = 16;
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ sprite->data[7] *= -1;
+
+ sprite->callback = sub_810ADF8;
+}
+
+static void sub_810ADF8(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] > 40)
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->pos1.x += sprite->data[7];
+ gSprites[sprite->data[6]].pos2.x += sprite->data[7];
+ if ((u16)(sprite->pos1.x + 80) > 400)
+ DestroySpriteAndMatrix(sprite);
+ }
+}
+
+void sub_810AE5C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[15] = GetAnimBattlerSpriteId(0);
+ task->data[14] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ task->data[14] = -32;
+ task->data[13] = 2;
+ }
+ else
+ {
+ task->data[14] = 32;
+ task->data[13] = -2;
+ }
+
+ gSprites[task->data[15]].pos2.x = task->data[14];
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ gSprites[task->data[15]].invisible ^= 1;
+
+ if (task->data[14])
+ {
+ task->data[14] += task->data[13];
+ gSprites[task->data[15]].pos2.x = task->data[14];
+ }
+ else
+ task->data[0]++;
+
+ }
+ break;
+ case 2:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ gSprites[task->data[15]].invisible ^= 1;
+
+ if (++task->data[2] == 8)
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ gSprites[task->data[15]].invisible = 0;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_810AFCC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch(task->data[0])
+ {
+ case 0:
+ task->data[1] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER ? 1 : -1;
+
+ switch (gBattleAnimArgs[0])
+ {
+ case 0:
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[5] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[4] = (task->data[1] * 128) + 120;
+ break;
+ case 4:
+ task->data[3] = 120 - (task->data[1] * 128);
+ task->data[5] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - (task->data[1] * 32);
+ break;
+ default:
+ if ((gBattleAnimArgs[0] & 1) != 0)
+ {
+ task->data[3] = 256;
+ task->data[4] = -16;
+ }
+ else
+ {
+ task->data[3] = -16;
+ task->data[4] = 256;
+ }
+
+ if (task->data[1] == 1)
+ {
+ task->data[5] = 80 - gBattleAnimArgs[0] * 10;
+ }
+ else
+ {
+ u16 temp;
+ task->data[5] = gBattleAnimArgs[0] * 10 + 40;
+ temp = task->data[3];
+ task->data[3] = task->data[4];
+ task->data[4] = temp;
+ }
+ }
+
+ if (task->data[3] < task->data[4])
+ {
+ task->data[1] = 1;
+ task->data[6] = 0;
+ }
+ else
+ {
+ task->data[1] = -1;
+ task->data[6] = 3;
+ }
+
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[2] > 0)
+ {
+ task->data[2] = 0;
+ if (sub_810B154(task, taskId) || sub_810B154(task, taskId))
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (task->data[7] == 0)
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static bool8 sub_810B154(struct Task *task, u8 taskId)
+{
+ u8 spriteId = CreateSprite(&gUnknown_08595A00, task->data[3], task->data[5], 35);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 7;
+ task->data[7]++;
+ }
+
+ task->data[6] += task->data[1];
+ if (task->data[6] < 0)
+ task->data[6] = 3;
+
+ if (task->data[6] > 3)
+ task->data[6] = 0;
+
+ task->data[3] += task->data[1] * 16;
+
+ if ((task->data[1] == 1 && task->data[3] >= task->data[4])
+ || (task->data[1] == -1 && task->data[3] <= task->data[4]))
+ {
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void sub_810B1F0(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 12)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_810B23C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->affineAnimEnded)
+ DestroySpriteAndMatrix(sprite);
+ }
+}
+
+void sub_810B29C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[6] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2);
+ task->data[7] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET);
+ task->data[8] = 4;
+ task->data[10] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[9] = (task->data[10] - task->data[6]) / 5;
+ task->data[4] = 7;
+ task->data[5] = -1;
+ task->data[11] = 12;
+ task->data[12] = BattleAnimAdjustPanning(task->data[11] - 76);
+ task->data[13] = BattleAnimAdjustPanning(SOUND_PAN_TARGET);
+ task->data[14] = task->data[12];
+ task->data[15] = (task->data[13] - task->data[12]) / 3;
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[1] > 0)
+ {
+ task->data[1] = 0;
+ if (sub_810B430(task, taskId))
+ {
+ if (task->data[2] == 5)
+ task->data[0] = 3;
+ else
+ task->data[0]++;
+ }
+ }
+
+ if (task->data[11])
+ task->data[11]--;
+ break;
+ case 2:
+ if (task->data[11])
+ task->data[11]--;
+
+ if (++task->data[1] > 4)
+ {
+ task->data[1] = 0;
+ if (task->data[2] & 1)
+ {
+ task->data[7] = 4;
+ task->data[8] = 68;
+ task->data[4] = 0;
+ task->data[5] = 1;
+ }
+ else
+ {
+ task->data[7] = 68;
+ task->data[8] = 4;
+ task->data[4] = 7;
+ task->data[5] = -1;
+ }
+
+ if (task->data[11])
+ task->data[0] = 4;
+ else
+ task->data[0] = 1;
+ }
+ break;
+ case 3:
+ if (task->data[3] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ case 4:
+ if (task->data[11])
+ task->data[11]--;
+ else
+ task->data[0] = 1;
+ break;
+ }
+}
+
+static bool8 sub_810B430(struct Task *task, u8 taskId)
+{
+ u8 spriteId = CreateSprite(&gUnknown_08595A30, task->data[6], task->data[7], 35);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.tileNum += task->data[4];
+ task->data[4] += task->data[5];
+ if (task->data[4] < 0)
+ task->data[4] = 7;
+ if (task->data[4] > 7)
+ task->data[4] = 0;
+
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 3;
+ task->data[3]++;
+ }
+
+ if (task->data[4] == 0 && task->data[5] > 0)
+ {
+ task->data[14] += task->data[15];
+ PlaySE12WithPanning(SE_W085, task->data[14]);
+ }
+
+ if ((task->data[5] < 0 && task->data[7] <= task->data[8])
+ || (task->data[5] > 0 && task->data[7] >= task->data[8]))
+ {
+ task->data[2]++;
+ task->data[6] += task->data[9];
+ return TRUE;
+ }
+ else
+ {
+ task->data[7] += task->data[5] * 8;
+ return FALSE;
+ }
+}
+
+static void sub_810B51C(struct Sprite *sprite)
+{
+ if (++sprite->data[0] > 12)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+}
+
+void sub_810B55C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[15] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) + 32;
+ task->data[14] = task->data[15];
+ while (task->data[14] > 16)
+ {
+ task->data[14] -= 32;
+ }
+
+ task->data[13] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2);
+ task->data[12] = GetBattlerSpriteSubpriority(gBattleAnimTarget) - 2;
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[1] > 1)
+ {
+ task->data[1] = 0;
+ if (sub_810B614(task, taskId))
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (task->data[10] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
diff --git a/src/event_data.c b/src/event_data.c
index 8a998fe26..f6a1cde78 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "event_data.h"
+#include "pokedex.h"
#define TEMP_FLAGS_SIZE 0x4
#define TEMP_UPPER_FLAGS_SIZE 0x8
@@ -67,7 +68,7 @@ void EnableNationalPokedex(void)
gSaveBlock2Ptr->pokedex.nationalMagic = 0xDA;
*nationalDexVar = 0x302;
FlagSet(FLAG_SYS_NATIONAL_DEX);
- gSaveBlock2Ptr->pokedex.unknown1 = 1;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_NATIONAL;
gSaveBlock2Ptr->pokedex.order = 0;
sub_80BB358();
}
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index ef125e564..ffa8f53c9 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -1144,7 +1144,7 @@ u8 GetFirstInactiveEventObjectId(void)
u8 GetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId)
{
- if (localId < 0xFF)
+ if (localId < EVENT_OBJ_ID_PLAYER)
{
return GetEventObjectIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId);
}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index c52f5190f..3774ef2b3 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -8,12 +8,11 @@
#include "event_scripts.h"
#include "fieldmap.h"
#include "field_control_avatar.h"
-#include "field_fadetransition.h"
#include "field_player_avatar.h"
#include "field_poison.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_specials.h"
-#include "fldeff_80F9BCC.h"
+#include "fldeff_misc.h"
#include "item_menu.h"
#include "link.h"
#include "metatile_behavior.h"
@@ -522,13 +521,13 @@ static bool8 TryStartMiscWalkingScripts(u16 metatileBehavior)
}
else if (MetatileBehavior_IsSecretBaseGlitterMat(metatileBehavior) == TRUE)
{
- sub_80FA9D0();
+ DoSecretBaseGlitterMatSparkle();
return FALSE;
}
else if (MetatileBehavior_IsSecretBaseSoundMat(metatileBehavior) == TRUE)
{
PlayerGetDestCoords(&x, &y);
- sub_80FA970(MapGridGetMetatileIdAt(x, y));
+ PlaySecretBaseMusicNoteMatSound(MapGridGetMetatileIdAt(x, y));
return FALSE;
}
return FALSE;
diff --git a/src/field_effect.c b/src/field_effect.c
index 9d3eb2377..e1850d001 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -6,7 +6,7 @@
#include "field_effect.h"
#include "field_effect_helpers.h"
#include "field_player_avatar.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "fldeff_groundshake.h"
@@ -244,7 +244,7 @@ extern void pal_fill_for_maplights(void);
extern void sub_80E1558(u8);
extern void sub_80E1570(void);
extern bool8 sub_80E1584(void);
-extern void sub_80AF0B4(void);
+extern void WarpFadeScreen(void);
// .rodata
const u32 gNewGameBirchPic[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
@@ -1593,8 +1593,8 @@ static void sub_80B7004(struct Task *task)
static void sub_80B7050(void)
{
- music_something();
- sub_80AF0B4();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
}
static void sub_80B7060(void)
@@ -1943,8 +1943,8 @@ static bool8 sub_80B7704(struct Task *task, struct EventObject *eventObject, str
static bool8 sub_80B77F8(struct Task *task, struct EventObject *eventObject, struct Sprite *sprite)
{
- music_something();
- sub_80AF0B4();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
task->data[0]++;
return FALSE;
}
@@ -2099,8 +2099,8 @@ static bool8 sub_80B7BCC(struct Task *task, struct EventObject *eventObject, str
{
if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
{
- music_something();
- sub_80AF0B4();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
task->data[0]++;
}
return FALSE;
@@ -2161,8 +2161,8 @@ static void EscapeRopeFieldEffect_Step1(struct Task *task)
u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
if (task->data[14] != 0 && (--task->data[14]) == 0)
{
- music_something();
- sub_80AF0B4();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
}
eventObject = &gEventObjects[gPlayerAvatar.eventObjectId];
if (!EventObjectIsMovementOverridden(eventObject) || EventObjectClearHeldMovementIfFinished(eventObject))
@@ -2314,8 +2314,8 @@ static void TeleportFieldEffectTask3(struct Task *task)
if (task->data[4] >= 0xa8)
{
task->data[0]++;
- music_something();
- sub_80AF0B4();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
}
}
@@ -3123,7 +3123,7 @@ static void sub_80B9474(struct Task *task)
{
if (sub_80B9508(task->data[1]))
{
- sub_80AF0B4();
+ WarpFadeScreen();
task->data[0]++;
}
}
diff --git a/src/field_poison.c b/src/field_poison.c
index de05bc407..fac17dea9 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -4,7 +4,7 @@
#include "event_data.h"
#include "field_message_box.h"
#include "field_poison.h"
-#include "fldeff_80F9BCC.h"
+#include "fldeff_misc.h"
#include "frontier_util.h"
#include "party_menu.h"
#include "pokenav.h"
@@ -136,7 +136,7 @@ s32 DoPoisonFieldEffect(void)
}
if (numFainted != 0 || numPoisoned != 0)
{
- FldeffPoison_Start();
+ FldEffPoison_Start();
}
if (numFainted != 0)
{
diff --git a/src/field_screen.c b/src/field_screen.c
deleted file mode 100644
index 2d33d237f..000000000
--- a/src/field_screen.c
+++ /dev/null
@@ -1,15 +0,0 @@
-
-// Includes
-#include "global.h"
-
-// Static type declarations
-
-// Static RAM declarations
-IWRAM_DATA u8 *gUnknown_03000F50;
-IWRAM_DATA u32 filler_03000f54;
-
-// Static ROM declarations
-
-// .rodata
-
-// .text
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
new file mode 100644
index 000000000..b0572b393
--- /dev/null
+++ b/src/field_screen_effect.c
@@ -0,0 +1,1261 @@
+#include "global.h"
+#include "cable_club.h"
+#include "event_data.h"
+#include "fieldmap.h"
+#include "field_camera.h"
+#include "field_door.h"
+#include "field_effect.h"
+#include "event_object_movement.h"
+#include "field_player_avatar.h"
+#include "field_screen_effect.h"
+#include "field_special_scene.h"
+#include "field_weather.h"
+// #include "fldeff_flash.h"
+#include "gpu_regs.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "load_save.h"
+#include "main.h"
+#include "menu.h"
+#include "event_obj_lock.h"
+#include "metatile_behavior.h"
+#include "palette.h"
+#include "overworld.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "sound.h"
+#include "start_menu.h"
+#include "task.h"
+#include "text.h"
+#include "constants/event_object_movement_constants.h"
+#include "constants/songs.h"
+#include "constants/rgb.h"
+
+extern bool32 sub_81D6534(void);
+extern bool8 walkrun_is_standing_still(void);
+extern void ScriptUnfreezeEventObjects(void);
+extern void sub_81BE72C(void);
+extern void sub_80FB768(void);
+extern void sub_808D194(void);
+extern void sub_808D1C8(void);
+extern bool32 sub_808D1B4(void);
+extern bool32 sub_808D1E8(void);
+extern void sub_80B6B68(void);
+extern void sub_80B6E4C(u8, u8);
+extern void sub_80B75D8(u8);
+extern void sub_80B7A74(u8);
+extern void sub_808C0A8(u8);
+extern u8 GetMapPairFadeToType(u8, u8);
+extern u8 GetMapPairFadeFromType(u8, u8);
+
+extern const u16 gUnknown_82EC7CC[];
+
+// This file's functions.
+static void sub_8080B9C(u8);
+static void task_map_chg_seq_0807E20C(u8);
+static void task_map_chg_seq_0807E2CC(u8);
+static void task0A_fade_n_map_maybe(u8);
+static void sub_808115C(u8);
+static void palette_bg_faded_fill_white(void);
+static void sub_80AF438(u8);
+static bool32 sub_80AF71C(void);
+static void task0A_mpl_807E31C(u8 taskId);
+static void sub_80AFA0C(u8 taskId);
+static void sub_80AFA88(u8 taskId);
+static void task50_0807F0C8(u8);
+
+// const
+const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
+const s32 gMaxFlashLevel = 8;
+
+const struct ScanlineEffectParams sFlashEffectParams =
+{
+ (void *)REG_ADDR_WIN0H,
+ ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
+ 1
+};
+
+// code
+static void palette_bg_faded_fill_white(void)
+{
+ CpuFastFill16(RGB_WHITE, gPlttBufferFaded, PLTT_SIZE);
+}
+
+static void palette_bg_faded_fill_black(void)
+{
+ CpuFastFill16(RGB_BLACK, gPlttBufferFaded, PLTT_SIZE);
+}
+
+void pal_fill_for_maplights(void)
+{
+ u8 previousMapType = GetLastUsedWarpMapType();
+ switch (GetMapPairFadeFromType(previousMapType, Overworld_GetMapTypeOfSaveblockLocation()))
+ {
+ case 0:
+ palette_bg_faded_fill_black();
+ FadeScreen(FADE_FROM_BLACK, 0);
+ break;
+ case 1:
+ palette_bg_faded_fill_white();
+ FadeScreen(FADE_FROM_WHITE, 0);
+ }
+}
+
+static void sub_80AF08C(void)
+{
+ palette_bg_faded_fill_white();
+ FadeScreen(FADE_FROM_WHITE, 8);
+}
+
+void pal_fill_black(void)
+{
+ palette_bg_faded_fill_black();
+ FadeScreen(FADE_FROM_BLACK, 0);
+}
+
+void WarpFadeScreen(void)
+{
+ u8 currentMapType = Overworld_GetMapTypeOfSaveblockLocation();
+ switch (GetMapPairFadeToType(currentMapType, GetDestinationWarpMapHeader()->mapType))
+ {
+ case 0:
+ FadeScreen(FADE_TO_BLACK, 0);
+ break;
+ case 1:
+ FadeScreen(FADE_TO_WHITE, 0);
+ }
+}
+
+static void sub_80AF0F4(u8 arg)
+{
+ sub_808C0A8(!arg);
+}
+
+static void task0A_nop_for_a_while(u8 taskId)
+{
+ if (sub_80AF71C() == TRUE)
+ DestroyTask(taskId);
+}
+
+void sub_80AF128(void)
+{
+ ScriptContext2_Enable();
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_black();
+ CreateTask(task0A_nop_for_a_while, 10);
+}
+
+static void task0A_asap_script_env_2_enable_and_set_ctx_running(u8 taskID)
+{
+ if (sub_80AF71C() == TRUE)
+ {
+ DestroyTask(taskID);
+ EnableBothScriptContexts();
+ }
+}
+
+void sub_80AF168(void)
+{
+ ScriptContext2_Enable();
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_black();
+ CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
+}
+
+void sub_80AF188(void)
+{
+ ScriptContext2_Enable();
+ pal_fill_black();
+ CreateTask(task0A_asap_script_env_2_enable_and_set_ctx_running, 10);
+}
+
+static void task_mpl_807DD60(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ task->data[1] = sub_80B3050();
+ task->data[0]++;
+ break;
+ case 1:
+ if (gTasks[task->data[1]].isActive != TRUE)
+ {
+ pal_fill_for_maplights();
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (sub_80AF71C() == TRUE)
+ {
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80AF214(void)
+{
+ ScriptContext2_Enable();
+ Overworld_PlaySpecialMapMusic();
+ palette_bg_faded_fill_black();
+ CreateTask(task_mpl_807DD60, 10);
+}
+
+static void sub_80AF234(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_800ADF8();
+ task->data[0]++;
+ break;
+ case 1:
+ if (!sub_800A520())
+ {
+ if (++task->data[1] > 1800)
+ sub_8011170(0x6000);
+ }
+ else
+ {
+ pal_fill_for_maplights();
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (sub_80AF71C() == TRUE)
+ {
+ sub_8009F18();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80AF2B4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_800ADF8();
+ task->data[0]++;
+ break;
+ case 1:
+ if (sub_800A520())
+ {
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ sub_8009F18();
+ sub_8086C2C();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80AF314(void)
+{
+ ScriptContext2_Enable();
+ Overworld_PlaySpecialMapMusic();
+ palette_bg_faded_fill_black();
+ CreateTask(sub_80AF234, 10);
+}
+
+static void sub_80AF334(void)
+{
+ s16 x, y;
+ u8 behavior;
+ TaskFunc func;
+
+ PlayerGetDestCoords(&x, &y);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ if (MetatileBehavior_IsDoor(behavior) == TRUE)
+ func = sub_80AF438;
+ else if (MetatileBehavior_IsNonAnimDoor(behavior) == TRUE)
+ func = task_map_chg_seq_0807E20C;
+ else
+ func = task_map_chg_seq_0807E2CC;
+ CreateTask(func, 10);
+}
+
+void mapldr_default(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ sub_80AF334();
+ ScriptContext2_Enable();
+}
+
+void sub_80AF3B0(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ sub_80AF08C();
+ sub_80AF334();
+ ScriptContext2_Enable();
+}
+
+void sub_80AF3C8(void)
+{
+ if (!sub_81D6534())
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_black();
+ sub_80AF334();
+ ScriptContext2_Enable();
+}
+
+void sub_80AF3E8(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ PlaySE(SE_TK_WARPOUT);
+ CreateTask(task0A_mpl_807E31C, 10);
+ ScriptContext2_Enable();
+}
+
+void sub_80AF40C(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ PlaySE(SE_TK_WARPOUT);
+ CreateTask(task_map_chg_seq_0807E2CC, 10);
+ ScriptContext2_Enable();
+ sub_8085540(0xE);
+}
+
+static void sub_80AF438(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ s16 *x = &task->data[2];
+ s16 *y = &task->data[3];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80AF0F4(0);
+ FreezeEventObjects();
+ PlayerGetDestCoords(x, y);
+ FieldSetDoorOpened(*x, *y);
+ task->data[0] = 1;
+ break;
+ case 1:
+ if (sub_80AF71C())
+ {
+ u8 eventObjId;
+ sub_80AF0F4(1);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ EventObjectSetHeldMovement(&gEventObjects[eventObjId], MOVEMENT_ACTION_WALK_NORMAL_DOWN);
+ task->data[0] = 2;
+ }
+ break;
+ case 2:
+ if (walkrun_is_standing_still())
+ {
+ u8 eventObjId;
+ task->data[1] = FieldAnimateDoorClose(*x, *y);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[eventObjId]);
+ task->data[0] = 3;
+ }
+ break;
+ case 3:
+ if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE)
+ {
+ UnfreezeEventObjects();
+ task->data[0] = 4;
+ }
+ break;
+ case 4:
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void task_map_chg_seq_0807E20C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ s16 *x = &task->data[2];
+ s16 *y = &task->data[3];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80AF0F4(0);
+ FreezeEventObjects();
+ PlayerGetDestCoords(x, y);
+ task->data[0] = 1;
+ break;
+ case 1:
+ if (sub_80AF71C())
+ {
+ u8 eventObjId;
+ sub_80AF0F4(1);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ EventObjectSetHeldMovement(&gEventObjects[eventObjId], GetWalkNormalMovementAction(GetPlayerFacingDirection()));
+ task->data[0] = 2;
+ }
+ break;
+ case 2:
+ if (walkrun_is_standing_still())
+ {
+ UnfreezeEventObjects();
+ task->data[0] = 3;
+ }
+ break;
+ case 3:
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void task_map_chg_seq_0807E2CC(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ FreezeEventObjects();
+ ScriptContext2_Enable();
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (sub_80AF71C())
+ {
+ UnfreezeEventObjects();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static void sub_80AF660(u8 taskId)
+{
+ if (sub_80AF71C() == TRUE)
+ {
+ DestroyTask(taskId);
+ CreateTask(sub_809FA34, 80);
+ }
+}
+
+void sub_80AF688(void)
+{
+ pal_fill_black();
+ CreateTask(sub_80AF660, 0x50);
+ ScriptContext2_Enable();
+}
+
+bool8 sub_80AF6A4(void)
+{
+ sub_809FA18();
+ return FALSE;
+}
+
+static void task_mpl_807E3C8(u8 taskId)
+{
+ if (sub_80AF71C() == 1)
+ {
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ ScriptUnfreezeEventObjects();
+ }
+}
+
+void sub_80AF6D4(void)
+{
+ ScriptContext2_Enable();
+ pal_fill_black();
+ CreateTask(task_mpl_807E3C8, 10);
+}
+
+void sub_80AF6F0(void)
+{
+ ScriptContext2_Enable();
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_black();
+ CreateTask(task_mpl_807E3C8, 10);
+}
+
+static bool32 PaletteFadeActive(void)
+{
+ return gPaletteFade.active;
+}
+
+static bool32 sub_80AF71C(void)
+{
+ if (IsWeatherNotFadingIn() == TRUE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_80AF734(void)
+{
+ ScriptContext2_Enable();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
+ PlayRainSoundEffect();
+ PlaySE(SE_KAIDAN);
+ gFieldCallback = mapldr_default;
+ CreateTask(sub_80AFA0C, 10);
+}
+
+void sp13E_warp_to_last_warp(void)
+{
+ ScriptContext2_Enable();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
+ PlayRainSoundEffect();
+ gFieldCallback = mapldr_default;
+ CreateTask(sub_80AFA0C, 10);
+}
+
+void sub_80AF79C(void)
+{
+ ScriptContext2_Enable();
+ TryFadeOutOldMapMusic();
+ FadeScreen(FADE_TO_WHITE, 8);
+ PlayRainSoundEffect();
+ gFieldCallback = sub_80AF3B0;
+ CreateTask(sub_80AFA0C, 10);
+}
+
+void sub_80AF7D0(void)
+{
+ ScriptContext2_Enable();
+ gFieldCallback = mapldr_default;
+ CreateTask(sub_80AFA88, 10);
+}
+
+void sp13F_fall_to_last_warp(void)
+{
+ sp13E_warp_to_last_warp();
+ gFieldCallback = sub_80B6B68;
+}
+
+void sub_80AF80C(u8 metatileBehavior)
+{
+ ScriptContext2_Enable();
+ sub_80B6E4C(metatileBehavior, 10);
+}
+
+void sub_80AF828(void)
+{
+ ScriptContext2_Enable();
+ sub_80B75D8(10);
+}
+
+void sub_80AF838(void)
+{
+ ScriptContext2_Enable();
+ sub_80B7A74(10);
+}
+
+void sub_80AF848(void)
+{
+ ScriptContext2_Enable();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
+ PlaySE(SE_TK_WARPIN);
+ CreateTask(sub_80AFA0C, 10);
+ gFieldCallback = sub_80AF3E8;
+}
+
+void sub_80AF87C(void)
+{
+ sub_8085540(1);
+ ScriptContext2_Enable();
+ SaveEventObjects();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
+ PlaySE(SE_TK_WARPIN);
+ CreateTask(sub_80AFA0C, 10);
+ gFieldCallback = sub_80AF40C;
+}
+
+void sub_80AF8B8(void)
+{
+ ScriptContext2_Enable();
+ WarpFadeScreen();
+ CreateTask(sub_80AFA0C, 10);
+ gFieldCallback = sub_80FB768;
+}
+
+static void sub_80AF8E0(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ ScriptContext2_Enable();
+ task->data[0]++;
+ break;
+ case 1:
+ if (!PaletteFadeActive() && BGMusicStopped())
+ task->data[0]++;
+ break;
+ case 2:
+ WarpIntoMap();
+ SetMainCallback2(sub_8086074);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80AF948(void)
+{
+ ScriptContext2_Enable();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
+ PlaySE(SE_KAIDAN);
+ CreateTask(sub_80AF8E0, 10);
+}
+
+static void sub_80AF96C(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ ClearLinkCallback_2();
+ FadeScreen(FADE_TO_BLACK, 0);
+ TryFadeOutOldMapMusic();
+ PlaySE(SE_KAIDAN);
+ data[0]++;
+ break;
+ case 1:
+ if (!PaletteFadeActive() && BGMusicStopped())
+ {
+ sub_800AC34();
+ data[0]++;
+ }
+ break;
+ case 2:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80AF9F8(void)
+{
+ CreateTask(sub_80AF96C, 10);
+}
+
+static void sub_80AFA0C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ FreezeEventObjects();
+ ScriptContext2_Enable();
+ task->data[0]++;
+ break;
+ case 1:
+ if (!PaletteFadeActive())
+ {
+ if (task->data[1] == 0)
+ {
+ sub_81BE72C();
+ task->data[1] = 1;
+ }
+ if (BGMusicStopped())
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void sub_80AFA88(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ s16 *x = &task->data[2];
+ s16 *y = &task->data[3];
+
+ switch (task->data[0])
+ {
+ case 0:
+ FreezeEventObjects();
+ PlayerGetDestCoords(x, y);
+ PlaySE(GetDoorSoundEffect(*x, *y - 1));
+ task->data[1] = FieldAnimateDoorOpen(*x, *y - 1);
+ task->data[0] = 1;
+ break;
+ case 1:
+ if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE)
+ {
+ u8 eventObjId;
+ eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ EventObjectClearHeldMovementIfActive(&gEventObjects[eventObjId]);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ EventObjectSetHeldMovement(&gEventObjects[eventObjId], MOVEMENT_ACTION_WALK_NORMAL_UP);
+ task->data[0] = 2;
+ }
+ break;
+ case 2:
+ if (walkrun_is_standing_still())
+ {
+ u8 eventObjId;
+ task->data[1] = FieldAnimateDoorClose(*x, *y - 1);
+ eventObjId = GetEventObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ EventObjectClearHeldMovementIfFinished(&gEventObjects[eventObjId]);
+ sub_80AF0F4(0);
+ task->data[0] = 3;
+ }
+ break;
+ case 3:
+ if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE)
+ {
+ task->data[0] = 4;
+ }
+ break;
+ case 4:
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
+ PlayRainSoundEffect();
+ task->data[0] = 0;
+ task->func = sub_80AFA0C;
+ break;
+ }
+}
+
+static void task0A_fade_n_map_maybe(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ FreezeEventObjects();
+ ScriptContext2_Enable();
+ task->data[0]++;
+ break;
+ case 1:
+ if (!PaletteFadeActive() && BGMusicStopped())
+ {
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ WarpIntoMap();
+ SetMainCallback2(sub_8086024);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80AFC60(void)
+{
+ ScriptContext2_Enable();
+ TryFadeOutOldMapMusic();
+ WarpFadeScreen();
+ PlayRainSoundEffect();
+ PlaySE(SE_KAIDAN);
+ gFieldCallback = sub_80AF3C8;
+ CreateTask(task0A_fade_n_map_maybe, 10);
+}
+
+static void SetFlashScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right)
+{
+ if (y <= 160)
+ {
+ if (left < 0)
+ left = 0;
+ if (left > 255)
+ left = 255;
+ if (right < 0)
+ right = 0;
+ if (right > 255)
+ right = 255;
+ dest[y] = (left << 8) | right;
+ }
+}
+
+static void SetFlashScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 centerY, s32 radius)
+{
+ s32 r = radius;
+ s32 v2 = radius;
+ s32 v3 = 0;
+ while (r >= v3)
+ {
+ SetFlashScanlineEffectWindowBoundary(dest, centerY - v3, centerX - r, centerX + r);
+ SetFlashScanlineEffectWindowBoundary(dest, centerY + v3, centerX - r, centerX + r);
+ SetFlashScanlineEffectWindowBoundary(dest, centerY - r, centerX - v3, centerX + v3);
+ SetFlashScanlineEffectWindowBoundary(dest, centerY + r, centerX - v3, centerX + v3);
+ v2 -= (v3 * 2) - 1;
+ v3++;
+ if (v2 < 0)
+ {
+ v2 += 2 * (r - 1);
+ r--;
+ }
+ }
+}
+
+static void SetFlash2ScanlineEffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right)
+{
+ if (y <= 160)
+ {
+ if (left < 0)
+ left = 0;
+ if (left > 240)
+ left = 240;
+ if (right < 0)
+ right = 0;
+ if (right > 240)
+ right = 240;
+ dest[y] = (left << 8) | right;
+ }
+}
+
+static void SetFlash2ScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 centerY, s32 radius)
+{
+ s32 r = radius;
+ s32 v2 = radius;
+ s32 v3 = 0;
+ while (r >= v3)
+ {
+ SetFlash2ScanlineEffectWindowBoundary(dest, centerY - v3, centerX - r, centerX + r);
+ SetFlash2ScanlineEffectWindowBoundary(dest, centerY + v3, centerX - r, centerX + r);
+ SetFlash2ScanlineEffectWindowBoundary(dest, centerY - r, centerX - v3, centerX + v3);
+ SetFlash2ScanlineEffectWindowBoundary(dest, centerY + r, centerX - v3, centerX + v3);
+ v2 -= (v3 * 2) - 1;
+ v3++;
+ if (v2 < 0)
+ {
+ v2 += 2 * (r - 1);
+ r--;
+ }
+ }
+}
+
+#define tFlashCenterX data[1]
+#define tFlashCenterY data[2]
+#define tCurFlashRadius data[3]
+#define tDestFlashRadius data[4]
+#define tFlashRadiusDelta data[5]
+#define tClearScanlineEffect data[6]
+
+static void UpdateFlashLevelEffect(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
+ data[0] = 1;
+ break;
+ case 1:
+ SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
+ data[0] = 0;
+ tCurFlashRadius += tFlashRadiusDelta;
+ if (tCurFlashRadius > tDestFlashRadius)
+ {
+ if (tClearScanlineEffect == 1)
+ {
+ ScanlineEffect_Stop();
+ data[0] = 2;
+ }
+ else
+ {
+ DestroyTask(taskId);
+ }
+ }
+ break;
+ case 2:
+ ScanlineEffect_Clear();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void UpdateFlash2LevelEffect(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ SetFlash2ScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
+ data[0] = 1;
+ break;
+ case 1:
+ SetFlash2ScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
+ data[0] = 0;
+ tCurFlashRadius += tFlashRadiusDelta;
+ if (tCurFlashRadius > tDestFlashRadius)
+ {
+ if (tClearScanlineEffect == 1)
+ {
+ ScanlineEffect_Stop();
+ data[0] = 2;
+ }
+ else
+ {
+ DestroyTask(taskId);
+ }
+ }
+ break;
+ case 2:
+ ScanlineEffect_Clear();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void sub_80AFF90(u8 taskId)
+{
+ if (!FuncIsActiveTask(UpdateFlashLevelEffect))
+ {
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80AFFB8(void)
+{
+ if (!FuncIsActiveTask(sub_80AFF90))
+ CreateTask(sub_80AFF90, 80);
+}
+
+static u8 sub_80AFFDC(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta)
+{
+ u8 taskId = CreateTask(UpdateFlashLevelEffect, 80);
+ s16 *data = gTasks[taskId].data;
+
+ tCurFlashRadius = initialFlashRadius;
+ tDestFlashRadius = destFlashRadius;
+ tFlashCenterX = centerX;
+ tFlashCenterY = centerY;
+ tClearScanlineEffect = clearScanlineEffect;
+
+ if (initialFlashRadius < destFlashRadius)
+ tFlashRadiusDelta = delta;
+ else
+ tFlashRadiusDelta = -delta;
+
+ return taskId;
+}
+
+static u8 sub_80B003C(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta)
+{
+ u8 taskId = CreateTask(UpdateFlash2LevelEffect, 80);
+ s16 *data = gTasks[taskId].data;
+
+ tCurFlashRadius = initialFlashRadius;
+ tDestFlashRadius = destFlashRadius;
+ tFlashCenterX = centerX;
+ tFlashCenterY = centerY;
+ tClearScanlineEffect = clearScanlineEffect;
+
+ if (initialFlashRadius < destFlashRadius)
+ tFlashRadiusDelta = delta;
+ else
+ tFlashRadiusDelta = -delta;
+
+ return taskId;
+}
+
+#undef tCurFlashRadius
+#undef tDestFlashRadius
+#undef tFlashRadiusDelta
+#undef tClearScanlineEffect
+
+void sub_80B009C(u8 flashLevel)
+{
+ u8 curFlashLevel = Overworld_GetFlashLevel();
+ u8 value = 0;
+ if (!flashLevel)
+ value = 1;
+ sub_80AFFDC(120, 80, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1);
+ sub_80AFFB8();
+ ScriptContext2_Enable();
+}
+
+void WriteFlashScanlineEffectBuffer(u8 flashLevel)
+{
+ if (flashLevel)
+ {
+ SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, sFlashLevelPixelRadii[flashLevel]);
+ CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
+ }
+}
+
+void door_upload_tiles(void)
+{
+ SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, gSaveBlock2Ptr->frontier.field_E68);
+ CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
+}
+
+static void task0A_mpl_807E31C(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ FreezeEventObjects();
+ ScriptContext2_Enable();
+ sub_808D194();
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (sub_80AF71C() && sub_808D1B4() != TRUE)
+ {
+ UnfreezeEventObjects();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static void sub_80B01BC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ FreezeEventObjects();
+ ScriptContext2_Enable();
+ PlaySE(SE_TK_WARPIN);
+ sub_808D1C8();
+ task->data[0]++;
+ break;
+ case 1:
+ if (!sub_808D1E8())
+ {
+ WarpFadeScreen();
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (!PaletteFadeActive() && BGMusicStopped())
+ task->data[0]++;
+ break;
+ case 3:
+ WarpIntoMap();
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80B0244(void)
+{
+ ScriptContext2_Enable();
+ CreateTask(sub_80AFA0C, 10);
+ gFieldCallback = sub_80AF3E8;
+}
+
+void sub_80B0268(void)
+{
+ ScriptContext2_Enable();
+ gFieldCallback = mapldr_default;
+ CreateTask(sub_80B01BC, 10);
+}
+
+static void sub_80B028C(u8 a1)
+{
+ int i;
+ u16 color[1];
+
+ if (!a1)
+ color[0] = RGB_RED;
+ else
+ color[0] = RGB_BLUE;
+
+ for (i = 0; i < 16; i++)
+ {
+ LoadPalette(color, 0xF0 + i, 2);
+ }
+}
+
+static bool8 sub_80B02C8(u16 a1)
+{
+ u8 lo = REG_BLDALPHA & 0xFF;
+ u8 hi = REG_BLDALPHA >> 8;
+
+ if (a1)
+ {
+ if (lo)
+ {
+ lo--;
+ }
+ }
+ else
+ {
+ if (hi < 0x10)
+ {
+ hi++;
+ }
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(lo, hi));
+
+ if (lo == 0 && hi == 0x10)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void sub_80B0318(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ data[6] = REG_DISPCNT;
+ data[7] = REG_BLDCNT;
+ data[8] = REG_BLDALPHA;
+ data[9] = REG_WININ;
+ data[10] = REG_WINOUT;
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN1_ON);
+ SetGpuRegBits(REG_OFFSET_BLDCNT, gUnknown_82EC7CC[0]);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(12, 7));
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
+ SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ);
+ sub_8199C30(0, 0, 0, 0x1E, 0x14, 0xF);
+ schedule_bg_copy_tilemap_to_vram(0);
+ SetFlash2ScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], data[2], data[3], 1);
+ CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
+ ScanlineEffect_SetParams(sFlashEffectParams);
+ data[0] = 1;
+ break;
+ case 1:
+ sub_8199DF0(0, 17, 0, 1);
+ sub_80B028C(data[1]);
+ sub_80B003C(data[2], data[3], 1, 160, 1, 2);
+ data[0] = 2;
+ break;
+ case 2:
+ if (!FuncIsActiveTask(UpdateFlash2LevelEffect))
+ {
+ EnableBothScriptContexts();
+ data[0] = 3;
+ }
+ break;
+ case 3:
+ InstallCameraPanAheadCallback();
+ SetCameraPanningCallback(NULL);
+ data[5] = 0;
+ data[4] = 4;
+ data[0] = 4;
+ break;
+ case 4:
+ data[4]--;
+ if (!data[4])
+ {
+ s32 panning;
+ data[4] = 4;
+ data[5] ^= 1;
+ if (data[5])
+ panning = 4;
+ else
+ panning = -4;
+ SetCameraPanning(0, panning);
+ }
+ break;
+ case 6:
+ InstallCameraPanAheadCallback();
+ data[4] = 8;
+ data[0] = 7;
+ break;
+ case 7:
+ data[4]--;
+ if (!data[4])
+ {
+ data[4] = 8;
+ data[5] ^= 1;
+ if (sub_80B02C8(data[5]) == TRUE)
+ {
+ data[0] = 5;
+ sub_8199DF0(0, 0, 0, 1);
+ }
+ }
+ break;
+ case 5:
+ SetGpuReg(REG_OFFSET_WIN0H, 255);
+ SetGpuReg(REG_OFFSET_DISPCNT, data[6]);
+ SetGpuReg(REG_OFFSET_BLDCNT, data[7]);
+ SetGpuReg(REG_OFFSET_BLDALPHA, data[8]);
+ SetGpuReg(REG_OFFSET_WININ, data[9]);
+ SetGpuReg(REG_OFFSET_WINOUT, data[10]);
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+void sub_80B0534(void)
+{
+ u8 taskId = CreateTask(sub_80B0318, 80);
+ s16 *data = gTasks[taskId].data;
+
+ if (gSpecialVar_Result == 0)
+ {
+ data[1] = 0;
+ data[2] = 104;
+ }
+ else if (gSpecialVar_Result == 1)
+ {
+ data[1] = 1;
+ data[2] = 136;
+ }
+ else if (gSpecialVar_Result == 2)
+ {
+ data[1] = 0;
+ data[2] = 120;
+ }
+ else
+ {
+ data[1] = 1;
+ data[2] = 120;
+ }
+
+ data[3] = 80;
+}
+
+void sub_80B058C(void)
+{
+ u8 taskId = FindTaskIdByFunc(sub_80B0318);
+ gTasks[taskId].data[0] = 6;
+}
+
+void sub_80B05B4(void)
+{
+ Overworld_FadeOutMapMusic();
+ CreateTask(task50_0807F0C8, 80);
+}
+
+static void task50_0807F0C8(u8 taskId)
+{
+ if (BGMusicStopped() == TRUE)
+ {
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+}
diff --git a/src/field_specials.c b/src/field_specials.c
index 34be71f30..64ff46ce2 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -12,7 +12,7 @@
#include "field_effect.h"
#include "field_message_box.h"
#include "field_player_avatar.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_specials.h"
#include "field_weather.h"
#include "international_string_util.h"
@@ -1279,17 +1279,17 @@ void IsGrassTypeInParty(void)
gSpecialVar_Result = FALSE;
}
-void SpawnScriptEventObject(void)
+void SpawnCameraObject(void)
{
- u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, 8, 0x7F, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
+ u8 obj = SpawnSpecialEventObjectParameterized(EVENT_OBJ_GFX_BOY_1, 8, EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3);
gEventObjects[obj].invisible = TRUE;
CameraObjectSetFollowedObjectId(gEventObjects[obj].spriteId);
}
-void RemoveScriptEventObject(void)
+void RemoveCameraObject(void)
{
CameraObjectSetFollowedObjectId(GetPlayerAvatarObjectId());
- RemoveEventObjectByLocalIdAndMap(0x7F, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
+ RemoveEventObjectByLocalIdAndMap(EVENT_OBJ_ID_CAMERA, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
}
u8 GetPokeblockNameByMonNature(void)
diff --git a/src/field_weather.c b/src/field_weather.c
new file mode 100644
index 000000000..f0615dabf
--- /dev/null
+++ b/src/field_weather.c
@@ -0,0 +1,1095 @@
+#include "global.h"
+#include "constants/songs.h"
+#include "constants/weather.h"
+#include "constants/rgb.h"
+#include "util.h"
+#include "event_object_movement.h"
+#include "field_weather.h"
+#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "random.h"
+#include "script.h"
+#include "start_menu.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "gpu_regs.h"
+
+#define MACRO1(color) ((((color) >> 1) & 0xF) | (((color) >> 2) & 0xF0) | (((color) >> 3) & 0xF00))
+
+enum
+{
+ GAMMA_NONE,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+};
+
+struct RGBColor
+{
+ u16 r:5;
+ u16 g:5;
+ u16 b:5;
+};
+
+struct WeatherPaletteData
+{
+ u16 gammaShiftColors[8][0x1000]; // 0x1000 is the number of bytes that make up all palettes.
+};
+
+struct WeatherCallbacks
+{
+ void (*initVars)(void);
+ void (*main)(void);
+ void (*initAll)(void);
+ bool8 (*finish)(void);
+};
+
+// This file's functions.
+static bool8 LightenSpritePaletteInFog(u8);
+static void BuildGammaShiftTables(void);
+static void UpdateWeatherGammaShift(void);
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex);
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor);
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor);
+static bool8 FadeInScreen_RainShowShade(void);
+static bool8 FadeInScreen_Drought(void);
+static bool8 FadeInScreen_Fog1(void);
+static void FadeInScreenWithWeather(void);
+static void DoNothing(void);
+static void Task_WeatherInit(u8 taskId);
+static void Task_WeatherMain(u8 taskId);
+static void None_Init(void);
+static void None_Main(void);
+static u8 None_Finish(void);
+
+// EWRAM
+EWRAM_DATA struct Weather gWeather = {0};
+EWRAM_DATA static u8 sFieldEffectPaletteGammaTypes[32] = {0};
+
+// IWRAM bss
+IWRAM_DATA static const u8 *sPaletteGammaTypes;
+
+// CONST
+extern const u16 gUnknown_0854014C[][4096];
+
+// This is a pointer to gWeather. All code in this file accesses gWeather directly,
+// while code in other field weather files accesses gWeather through this pointer.
+// This is likely the result of compiler optimization, since using the pointer in
+// this file produces the same result as accessing gWeather directly.
+struct Weather *const gWeatherPtr = &gWeather;
+
+static const struct WeatherCallbacks sWeatherFuncs[] =
+{
+ {None_Init, None_Main, None_Init, None_Finish},
+ {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
+ {Weather2_InitVars, Weather2_Main, Weather2_InitAll, Weather2_Finish},
+ {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish},
+ {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish},
+ {MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish},
+ {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
+ {Ash_InitVars, Ash_Main, Ash_InitAll, Ash_Finish},
+ {Sandstorm_InitVars, Sandstorm_Main, Sandstorm_InitAll, Sandstorm_Finish},
+ {Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish},
+ {Fog1_InitVars, Fog1_Main, Fog1_InitAll, Fog1_Finish},
+ {Shade_InitVars, Shade_Main, Shade_InitAll, Shade_Finish},
+ {Drought_InitVars, Drought_Main, Drought_InitAll, Drought_Finish},
+ {HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish},
+ {Bubbles_InitVars, Bubbles_Main, Bubbles_InitAll, Bubbles_Finish},
+};
+
+void (*const gWeatherPalStateFuncs[])(void) =
+{
+ UpdateWeatherGammaShift, // WEATHER_PAL_STATE_CHANGING_WEATHER
+ FadeInScreenWithWeather, // WEATHER_PAL_STATE_SCREEN_FADING_IN
+ DoNothing, // WEATHER_PAL_STATE_SCREEN_FADING_OUT
+ DoNothing, // WEATHER_PAL_STATE_IDLE
+};
+
+// This table specifies which of the gamma shift tables should be
+// applied to each of the background and sprite palettes.
+static const u8 sBasePaletteGammaTypes[32] =
+{
+ // background palettes
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NONE,
+ GAMMA_NONE,
+ // sprite palettes
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_ALT,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+ GAMMA_NORMAL,
+};
+
+const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal");
+
+// code
+void StartWeather(void)
+{
+ if (!FuncIsActiveTask(Task_WeatherMain))
+ {
+ u8 index = AllocSpritePalette(0x1200);
+ CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32);
+ BuildGammaShiftTables();
+ gWeatherPtr->altGammaSpritePalIndex = index;
+ gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(0x1201);
+ gWeatherPtr->rainSpriteCount = 0;
+ gWeatherPtr->unknown_6D8 = 0;
+ gWeatherPtr->cloudSpritesCreated = 0;
+ gWeatherPtr->snowflakeSpriteCount = 0;
+ gWeatherPtr->ashSpritesCreated = 0;
+ gWeatherPtr->fog1SpritesCreated = 0;
+ gWeatherPtr->fog2SpritesCreated = 0;
+ gWeatherPtr->sandstormSprites1Created = 0;
+ gWeatherPtr->sandstormSprites2Created = 0;
+ gWeatherPtr->unknown_72E = 0;
+ gWeatherPtr->lightenedFogSpritePalsCount = 0;
+ Weather_SetBlendCoeffs(16, 0);
+ gWeatherPtr->currWeather = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ gWeatherPtr->readyForInit = FALSE;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ gWeatherPtr->taskId = CreateTask(Task_WeatherInit, 80);
+ }
+}
+
+void ChangeWeather(u8 weather)
+{
+ if (weather != WEATHER_RAIN_LIGHT && weather != WEATHER_RAIN_MED && weather != WEATHER_RAIN_HEAVY)
+ {
+ PlayRainSoundEffect();
+ }
+
+ if (gWeatherPtr->nextWeather != weather && gWeatherPtr->currWeather == weather)
+ {
+ sWeatherFuncs[weather].initVars();
+ }
+
+ gWeatherPtr->weatherChangeComplete = FALSE;
+ gWeatherPtr->nextWeather = weather;
+ gWeatherPtr->finishStep = 0;
+}
+
+void sub_80AB104(u8 weather)
+{
+ PlayRainSoundEffect();
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+}
+
+void sub_80AB130(u8 weather)
+{
+ PlayRainSoundEffect();
+ gWeatherPtr->currWeather = weather;
+ gWeatherPtr->nextWeather = weather;
+ gWeatherPtr->readyForInit = TRUE;
+}
+
+static void Task_WeatherInit(u8 taskId)
+{
+ // Waits until it's ok to initialize weather.
+ // When the screen fades in, this is set to TRUE.
+ if (gWeatherPtr->readyForInit)
+ {
+ sWeatherFuncs[gWeatherPtr->currWeather].initAll();
+ gTasks[taskId].func = Task_WeatherMain;
+ }
+}
+
+static void Task_WeatherMain(u8 taskId)
+{
+ if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather)
+ {
+ if (!sWeatherFuncs[gWeatherPtr->currWeather].finish() && gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
+ {
+ // Finished cleaning up previous weather. Now transition to next weather.
+ sWeatherFuncs[gWeatherPtr->nextWeather].initVars();
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->currWeather = gWeatherPtr->nextWeather;
+ gWeatherPtr->weatherChangeComplete = TRUE;
+ }
+ }
+ else
+ {
+ sWeatherFuncs[gWeatherPtr->currWeather].main();
+ }
+
+ gWeatherPalStateFuncs[gWeatherPtr->palProcessingState]();
+}
+
+static void None_Init(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
+}
+
+static void None_Main(void)
+{
+}
+
+static u8 None_Finish(void)
+{
+ return 0;
+}
+
+// Builds two tables that contain gamma shifts for palette colors.
+// It's unclear why the two tables aren't declared as const arrays, since
+// this function always builds the same two tables.
+static void BuildGammaShiftTables(void)
+{
+ u16 v0;
+ u8 (*gammaTable)[32];
+ u16 v2;
+ u16 v4;
+ u16 v5;
+ u16 gammaIndex;
+ u16 v9;
+ u32 v10;
+ u16 v11;
+ s16 dunno;
+
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
+ for (v0 = 0; v0 <= 1; v0++)
+ {
+ if (v0 == 0)
+ gammaTable = gWeatherPtr->gammaShifts;
+ else
+ gammaTable = gWeatherPtr->altGammaShifts;
+
+ for (v2 = 0; v2 < 32; v2++)
+ {
+ v4 = v2 << 8;
+ if (v0 == 0)
+ v5 = (v2 << 8) / 16;
+ else
+ v5 = 0;
+ for (gammaIndex = 0; gammaIndex <= 2; gammaIndex++)
+ {
+ v4 = (v4 - v5);
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ }
+ v9 = v4;
+ v10 = 0x1f00 - v4;
+ if ((0x1f00 - v4) < 0)
+ {
+ v10 += 0xf;
+ }
+ v11 = v10 >> 4;
+ if (v2 < 12)
+ {
+ for (; gammaIndex < 19; gammaIndex++)
+ {
+ v4 += v11;
+ dunno = v4 - v9;
+ if (dunno > 0)
+ v4 -= (dunno + ((u16)dunno >> 15)) >> 1;
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ if (gammaTable[gammaIndex][v2] > 0x1f)
+ gammaTable[gammaIndex][v2] = 0x1f;
+ }
+ }
+ else
+ {
+ for (; gammaIndex < 19; gammaIndex++)
+ {
+ v4 += v11;
+ gammaTable[gammaIndex][v2] = v4 >> 8;
+ if (gammaTable[gammaIndex][v2] > 0x1f)
+ gammaTable[gammaIndex][v2] = 0x1f;
+ }
+ }
+ }
+ }
+}
+
+// When the weather is changing, it gradually updates the palettes
+// towards the desired gamma shift.
+static void UpdateWeatherGammaShift(void)
+{
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
+ {
+ if (gWeatherPtr->gammaIndex == gWeatherPtr->gammaTargetIndex)
+ {
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ else
+ {
+ if (++gWeatherPtr->gammaStepFrameCounter >= gWeatherPtr->gammaStepDelay)
+ {
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ if (gWeatherPtr->gammaIndex < gWeatherPtr->gammaTargetIndex)
+ gWeatherPtr->gammaIndex++;
+ else
+ gWeatherPtr->gammaIndex--;
+
+ ApplyGammaShift(0, 32, gWeatherPtr->gammaIndex);
+ }
+ }
+ }
+}
+
+static void FadeInScreenWithWeather(void)
+{
+ if (++gWeatherPtr->unknown_6CB > 1)
+ gWeatherPtr->unknown_6CA = 0;
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN_LIGHT:
+ case WEATHER_RAIN_MED:
+ case WEATHER_RAIN_HEAVY:
+ case WEATHER_SNOW:
+ case WEATHER_SHADE:
+ if (FadeInScreen_RainShowShade() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = 3;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_DROUGHT:
+ if (FadeInScreen_Drought() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = -6;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_FOG_1:
+ if (FadeInScreen_Fog1() == FALSE)
+ {
+ gWeatherPtr->gammaIndex = 0;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ case WEATHER_ASH:
+ case WEATHER_SANDSTORM:
+ case WEATHER_FOG_2:
+ case WEATHER_FOG_3:
+ default:
+ if (!gPaletteFade.active)
+ {
+ gWeatherPtr->gammaIndex = gWeatherPtr->gammaTargetIndex;
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+ }
+ break;
+ }
+}
+
+static bool8 FadeInScreen_RainShowShade(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
+ {
+ ApplyGammaShift(0, 32, 3);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
+ }
+
+ ApplyGammaShiftWithBlend(0, 32, 3, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static bool8 FadeInScreen_Drought(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ if (++gWeatherPtr->fadeScreenCounter >= 16)
+ {
+ ApplyGammaShift(0, 32, -6);
+ gWeatherPtr->fadeScreenCounter = 16;
+ return FALSE;
+ }
+
+ ApplyDroughtGammaShiftWithBlend(-6, 16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static bool8 FadeInScreen_Fog1(void)
+{
+ if (gWeatherPtr->fadeScreenCounter == 16)
+ return FALSE;
+
+ gWeatherPtr->fadeScreenCounter++;
+ ApplyFogBlend(16 - gWeatherPtr->fadeScreenCounter, gWeatherPtr->fadeDestColor);
+ return TRUE;
+}
+
+static void DoNothing(void)
+{ }
+
+static void ApplyGammaShift(u8 startPalIndex, u8 numPalettes, s8 gammaIndex)
+{
+ u16 curPalIndex;
+ u16 palOffset;
+ u8 *gammaTable;
+ u16 i;
+
+ if (gammaIndex > 0)
+ {
+ gammaIndex--;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ // Loop through the speficied palette range and apply necessary gamma shifts to the colors.
+ while (curPalIndex < numPalettes)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No palette change.
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
+ }
+ else
+ {
+ u8 r, g, b;
+
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_ALT || curPalIndex - 16 == gWeatherPtr->altGammaSpritePalIndex)
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
+ else
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+
+ for (i = 0; i < 16; i++)
+ {
+ // Apply gamma shift to the original color.
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r = gammaTable[baseColor.r];
+ g = gammaTable[baseColor.g];
+ b = gammaTable[baseColor.b];
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+
+ curPalIndex++;
+ }
+ }
+ else if (gammaIndex < 0)
+ {
+ // A negative gammIndex value means that the blending will come from the special Drought weather's palette tables.
+ gammaIndex = -gammaIndex - 1;
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No palette change.
+ CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16));
+ palOffset += 16;
+ }
+ else
+ {
+ for (i = 0; i < 16; i++)
+ {
+ gPlttBufferFaded[palOffset] = gUnknown_0854014C[gammaIndex][MACRO1(gPlttBufferUnfaded[palOffset])];
+ palOffset++;
+ }
+ }
+
+ curPalIndex++;
+ }
+ }
+ else
+ {
+ // No palette blending.
+ CpuFastCopy(gPlttBufferUnfaded + startPalIndex * 16, gPlttBufferFaded + startPalIndex * 16, numPalettes * 16 * sizeof(u16));
+ }
+}
+
+static void ApplyGammaShiftWithBlend(u8 startPalIndex, u8 numPalettes, s8 gammaIndex, u8 blendCoeff, u16 blendColor)
+{
+ u16 palOffset;
+ u16 curPalIndex;
+ u16 i;
+ struct RGBColor color = *(struct RGBColor *)&blendColor;
+ u8 rBlend = color.r;
+ u8 gBlend = color.g;
+ u8 bBlend = color.b;
+
+ palOffset = startPalIndex * 16;
+ numPalettes += startPalIndex;
+ gammaIndex--;
+ curPalIndex = startPalIndex;
+
+ while (curPalIndex < numPalettes)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
+ palOffset += 16;
+ }
+ else
+ {
+ u8 *gammaTable;
+
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NORMAL)
+ gammaTable = gWeatherPtr->gammaShifts[gammaIndex];
+ else
+ gammaTable = gWeatherPtr->altGammaShifts[gammaIndex];
+
+ for (i = 0; i < 16; i++)
+ {
+ struct RGBColor baseColor = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = gammaTable[baseColor.r];
+ u8 g = gammaTable[baseColor.g];
+ u8 b = gammaTable[baseColor.b];
+
+ // Apply gamma shift and target blend color to the original color.
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
+ gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r;
+ }
+ }
+
+ curPalIndex++;
+ }
+}
+
+static void ApplyDroughtGammaShiftWithBlend(s8 gammaIndex, u8 blendCoeff, u16 blendColor)
+{
+ struct RGBColor color;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+ u16 palOffset;
+ u16 i;
+
+ gammaIndex = -gammaIndex - 1;
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+ palOffset = 0;
+ for (curPalIndex = 0; curPalIndex < 32; curPalIndex++)
+ {
+ if (sPaletteGammaTypes[curPalIndex] == GAMMA_NONE)
+ {
+ // No gamma shift. Simply blend the colors.
+ BlendPalette(palOffset, 16, blendCoeff, blendColor);
+ palOffset += 16;
+ }
+ else
+ {
+ for (i = 0; i < 16; i++)
+ {
+ u32 offset;
+ struct RGBColor color1;
+ struct RGBColor color2;
+ u8 r1, g1, b1;
+ u8 r2, g2, b2;
+
+ color1 = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ r1 = color1.r;
+ g1 = color1.g;
+ b1 = color1.b;
+
+ offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1);
+ color2 = *(struct RGBColor *)&gUnknown_0854014C[gammaIndex][offset];
+ r2 = color2.r;
+ g2 = color2.g;
+ b2 = color2.b;
+
+ r2 += ((rBlend - r2) * blendCoeff) >> 4;
+ g2 += ((gBlend - g2) * blendCoeff) >> 4;
+ b2 += ((bBlend - b2) * blendCoeff) >> 4;
+
+ gPlttBufferFaded[palOffset++] = (b2 << 10) | (g2 << 5) | r2;
+ }
+ }
+ }
+}
+
+static void ApplyFogBlend(u8 blendCoeff, u16 blendColor)
+{
+ struct RGBColor color;
+ u8 rBlend;
+ u8 gBlend;
+ u8 bBlend;
+ u16 curPalIndex;
+
+ BlendPalette(0, 256, blendCoeff, blendColor);
+ color = *(struct RGBColor *)&blendColor;
+ rBlend = color.r;
+ gBlend = color.g;
+ bBlend = color.b;
+
+ for (curPalIndex = 16; curPalIndex < 32; curPalIndex++)
+ {
+ if (LightenSpritePaletteInFog(curPalIndex))
+ {
+ u16 palEnd = (curPalIndex + 1) * 16;
+ u16 palOffset = curPalIndex * 16;
+
+ while (palOffset < palEnd)
+ {
+ struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
+ u8 r = color.r;
+ u8 g = color.g;
+ u8 b = color.b;
+
+ r += ((28 - r) * 3) >> 2;
+ g += ((31 - g) * 3) >> 2;
+ b += ((28 - b) * 3) >> 2;
+
+ r += ((rBlend - r) * blendCoeff) >> 4;
+ g += ((gBlend - g) * blendCoeff) >> 4;
+ b += ((bBlend - b) * blendCoeff) >> 4;
+
+ gPlttBufferFaded[palOffset] = (b << 10) | (g << 5) | r;
+ palOffset++;
+ }
+ }
+ else
+ {
+ BlendPalette(curPalIndex * 16, 16, blendCoeff, blendColor);
+ }
+ }
+}
+
+static void MarkFogSpritePalToLighten(u8 paletteIndex)
+{
+ if (gWeatherPtr->lightenedFogSpritePalsCount < 6)
+ {
+ gWeatherPtr->lightenedFogSpritePals[gWeatherPtr->lightenedFogSpritePalsCount] = paletteIndex;
+ gWeatherPtr->lightenedFogSpritePalsCount++;
+ }
+}
+
+static bool8 LightenSpritePaletteInFog(u8 paletteIndex)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->lightenedFogSpritePalsCount; i++)
+ {
+ if (gWeatherPtr->lightenedFogSpritePals[i] == paletteIndex)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void sub_80ABC48(s8 gammaIndex)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ ApplyGammaShift(0, 32, gammaIndex);
+ gWeatherPtr->gammaIndex = gammaIndex;
+ }
+}
+
+void sub_80ABC7C(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE)
+ {
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_CHANGING_WEATHER;
+ gWeatherPtr->gammaIndex = gammaIndex;
+ gWeatherPtr->gammaTargetIndex = gammaTargetIndex;
+ gWeatherPtr->gammaStepFrameCounter = 0;
+ gWeatherPtr->gammaStepDelay = gammaStepDelay;
+ sub_80ABC48(gammaIndex);
+ }
+}
+
+void FadeScreen(u8 mode, s8 delay)
+{
+ u32 fadeColor;
+ bool8 fadeOut;
+ bool8 useWeatherPal;
+
+ switch (mode)
+ {
+ case FADE_FROM_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = FALSE;
+ break;
+ case FADE_FROM_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = FALSE;
+ break;
+ case FADE_TO_BLACK:
+ fadeColor = RGB_BLACK;
+ fadeOut = TRUE;
+ break;
+ case FADE_TO_WHITE:
+ fadeColor = RGB_WHITEALPHA;
+ fadeOut = TRUE;
+ break;
+ default:
+ return;
+ }
+
+ switch (gWeatherPtr->currWeather)
+ {
+ case WEATHER_RAIN_LIGHT:
+ case WEATHER_RAIN_MED:
+ case WEATHER_RAIN_HEAVY:
+ case WEATHER_SNOW:
+ case WEATHER_FOG_1:
+ case WEATHER_SHADE:
+ case WEATHER_DROUGHT:
+ useWeatherPal = TRUE;
+ break;
+ default:
+ useWeatherPal = FALSE;
+ break;
+ }
+
+ if (fadeOut)
+ {
+ if (useWeatherPal)
+ CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+ }
+ else
+ {
+ gWeatherPtr->fadeDestColor = fadeColor;
+ if (useWeatherPal)
+ gWeatherPtr->fadeScreenCounter = 0;
+ else
+ BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
+
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_IN;
+ gWeatherPtr->unknown_6CA = 1;
+ gWeatherPtr->unknown_6CB = 0;
+ Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
+ gWeatherPtr->readyForInit = TRUE;
+ }
+}
+
+bool8 IsWeatherNotFadingIn(void)
+{
+ return (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_IN);
+}
+
+void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex)
+{
+ u16 paletteIndex = 16 + spritePaletteIndex;
+ u16 i;
+
+ switch (gWeatherPtr->palProcessingState)
+ {
+ case WEATHER_PAL_STATE_SCREEN_FADING_IN:
+ if (gWeatherPtr->unknown_6CA != 0)
+ {
+ if (gWeatherPtr->currWeather == WEATHER_FOG_1)
+ MarkFogSpritePalToLighten(paletteIndex);
+ paletteIndex *= 16;
+ for (i = 0; i < 16; i++)
+ gPlttBufferFaded[paletteIndex + i] = gWeatherPtr->fadeDestColor;
+ }
+ break;
+ case WEATHER_PAL_STATE_SCREEN_FADING_OUT:
+ paletteIndex *= 16;
+ CpuFastCopy(gPlttBufferFaded + paletteIndex, gPlttBufferUnfaded + paletteIndex, 32);
+ BlendPalette(paletteIndex, 16, gPaletteFade.y, gPaletteFade.blendColor);
+ break;
+ // WEATHER_PAL_STATE_CHANGING_WEATHER
+ // WEATHER_PAL_STATE_CHANGING_IDLE
+ default:
+ if (gWeatherPtr->currWeather != WEATHER_FOG_1)
+ {
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
+ }
+ else
+ {
+ paletteIndex *= 16;
+ BlendPalette(paletteIndex, 16, 12, RGB(28, 31, 28));
+ }
+ break;
+ }
+}
+
+void ApplyWeatherGammaShiftToPal(u8 paletteIndex)
+{
+ ApplyGammaShift(paletteIndex, 1, gWeatherPtr->gammaIndex);
+}
+
+u8 sub_80ABF20(void)
+{
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_SCREEN_FADING_IN)
+ return gWeatherPtr->unknown_6CA;
+ else
+ return 0;
+}
+
+void LoadCustomWeatherSpritePalette(const u16 *palette)
+{
+ LoadPalette(palette, 0x100 + gWeatherPtr->weatherPicSpritePalIndex * 16, 32);
+ UpdateSpritePaletteWithWeather(gWeatherPtr->weatherPicSpritePalIndex);
+}
+
+static void LoadDroughtWeatherPalette(u8 *gammaIndexPtr, u8 *a1)
+{
+ *gammaIndexPtr = 0x20;
+ *a1 = 0x20;
+}
+
+void ResetDroughtWeatherPaletteLoading(void)
+{
+ gWeatherPtr->loadDroughtPalsIndex = 1;
+ gWeatherPtr->loadDroughtPalsOffset = 1;
+}
+
+bool8 LoadDroughtWeatherPalettes(void)
+{
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
+ {
+ LoadDroughtWeatherPalette(&gWeatherPtr->loadDroughtPalsIndex, &gWeatherPtr->loadDroughtPalsOffset);
+ if (gWeatherPtr->loadDroughtPalsIndex < 32)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_80ABFE0(s8 gammaIndex)
+{
+ sub_80ABC48(-gammaIndex - 1);
+}
+
+void sub_80ABFF0(void)
+{
+ gWeatherPtr->unknown_73C = 0;
+ gWeatherPtr->unknown_740 = 0;
+ gWeatherPtr->unknown_742 = 0;
+ gWeatherPtr->unknown_73E = 0;
+}
+
+void sub_80AC01C(void)
+{
+ switch (gWeatherPtr->unknown_742)
+ {
+ case 0:
+ if (++gWeatherPtr->unknown_740 > 5)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_80ABFE0(gWeatherPtr->unknown_73C++);
+ if (gWeatherPtr->unknown_73C > 5)
+ {
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ gWeatherPtr->unknown_742 = 1;
+ gWeatherPtr->unknown_740 = 0x3C;
+ }
+ }
+ break;
+ case 1:
+ gWeatherPtr->unknown_740 = (gWeatherPtr->unknown_740 + 3) & 0x7F;
+ gWeatherPtr->unknown_73C = ((gSineTable[gWeatherPtr->unknown_740] - 1) >> 6) + 2;
+ if (gWeatherPtr->unknown_73C != gWeatherPtr->unknown_73E)
+ sub_80ABFE0(gWeatherPtr->unknown_73C);
+ gWeatherPtr->unknown_73E = gWeatherPtr->unknown_73C;
+ break;
+ case 2:
+ if (++gWeatherPtr->unknown_740 > 5)
+ {
+ gWeatherPtr->unknown_740 = 0;
+ sub_80ABFE0(--gWeatherPtr->unknown_73C);
+ if (gWeatherPtr->unknown_73C == 3)
+ gWeatherPtr->unknown_742 = 0;
+ }
+ break;
+ }
+}
+
+void Weather_SetBlendCoeffs(u8 eva, u8 evb)
+{
+ gWeatherPtr->currBlendEVA = eva;
+ gWeatherPtr->currBlendEVB = evb;
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(eva, evb));
+}
+
+void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay)
+{
+ gWeatherPtr->targetBlendEVA = eva;
+ gWeatherPtr->targetBlendEVB = evb;
+ gWeatherPtr->blendDelay = delay;
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter = 0;
+}
+
+bool8 Weather_UpdateBlend(void)
+{
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ if (++gWeatherPtr->blendFrameCounter > gWeatherPtr->blendDelay)
+ {
+ gWeatherPtr->blendFrameCounter = 0;
+ gWeatherPtr->blendUpdateCounter++;
+
+ // Update currBlendEVA and currBlendEVB on alternate frames
+ if (gWeatherPtr->blendUpdateCounter & 1)
+ {
+ if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA++;
+ else if (gWeatherPtr->currBlendEVA > gWeatherPtr->targetBlendEVA)
+ gWeatherPtr->currBlendEVA--;
+ }
+ else
+ {
+ if (gWeatherPtr->currBlendEVB < gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB++;
+ else if (gWeatherPtr->currBlendEVB > gWeatherPtr->targetBlendEVB)
+ gWeatherPtr->currBlendEVB--;
+ }
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB));
+
+ if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
+ && gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
+ return TRUE;
+
+ return FALSE;
+}
+
+void sub_80AC274(u8 a)
+{
+ switch (a)
+ {
+ case 1:
+ SetWeather(WEATHER_CLOUDS);
+ break;
+ case 2:
+ SetWeather(WEATHER_SUNNY);
+ break;
+ case 3:
+ SetWeather(WEATHER_RAIN_LIGHT);
+ break;
+ case 4:
+ SetWeather(WEATHER_SNOW);
+ break;
+ case 5:
+ SetWeather(WEATHER_RAIN_MED);
+ break;
+ case 6:
+ SetWeather(WEATHER_FOG_1);
+ break;
+ case 7:
+ SetWeather(WEATHER_FOG_2);
+ break;
+ case 8:
+ SetWeather(WEATHER_ASH);
+ break;
+ case 9:
+ SetWeather(WEATHER_SANDSTORM);
+ break;
+ case 10:
+ SetWeather(WEATHER_SHADE);
+ break;
+ }
+}
+
+u8 GetCurrentWeather(void)
+{
+ return gWeatherPtr->currWeather;
+}
+
+void SetRainStrengthFromSoundEffect(u16 soundEffect)
+{
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT)
+ {
+ switch (soundEffect)
+ {
+ case SE_T_KOAME:
+ gWeatherPtr->rainStrength = 0;
+ break;
+ case SE_T_OOAME:
+ gWeatherPtr->rainStrength = 1;
+ break;
+ case SE_T_AME:
+ gWeatherPtr->rainStrength = 2;
+ break;
+ default:
+ return;
+ }
+
+ PlaySE(soundEffect);
+ }
+}
+
+void PlayRainSoundEffect(void)
+{
+ if (IsSpecialSEPlaying())
+ {
+ switch (gWeatherPtr->rainStrength)
+ {
+ case 0:
+ PlaySE(SE_T_KOAME_E);
+ break;
+ case 1:
+ PlaySE(SE_T_OOAME_E);
+ break;
+ case 2:
+ default:
+ PlaySE(SE_T_AME_E);
+ break;
+ }
+ }
+}
+
+u8 IsWeatherChangeComplete(void)
+{
+ return gWeatherPtr->weatherChangeComplete;
+}
+
+void SetWeatherScreenFadeOut(void)
+{
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_SCREEN_FADING_OUT;
+}
+
+void sub_80AC3E4(void)
+{
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
+}
+
+void PreservePaletteInWeather(u8 preservedPalIndex)
+{
+ CpuCopy16(sBasePaletteGammaTypes, sFieldEffectPaletteGammaTypes, 32);
+ sFieldEffectPaletteGammaTypes[preservedPalIndex] = GAMMA_NONE;
+ sPaletteGammaTypes = sFieldEffectPaletteGammaTypes;
+}
+
+void ResetPreservedPalettesInWeather(void)
+{
+ sPaletteGammaTypes = sBasePaletteGammaTypes;
+}
diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c
new file mode 100644
index 000000000..2ec51a722
--- /dev/null
+++ b/src/field_weather_effect.c
@@ -0,0 +1,2471 @@
+#include "global.h"
+#include "event_object_movement.h"
+#include "field_weather.h"
+#include "overworld.h"
+#include "random.h"
+#include "script.h"
+#include "constants/weather.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "gpu_regs.h"
+
+// This file's functions.
+void sub_80AC6B4(struct Sprite *);
+
+// EWRAM
+EWRAM_DATA static u8 gUnknown_02038BC4 = 0;
+EWRAM_DATA static u16 gUnknown_02038BC6 = 0;
+
+// CONST
+const u16 gUnknown_0854C290[] = INCBIN_U16("graphics/weather/1.gbapal");
+const u16 gUnknown_0854C2B0[] = INCBIN_U16("graphics/weather/2.gbapal");
+const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp");
+const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp");
+const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp");
+const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp");
+const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp");
+const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp");
+const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp");
+const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp");
+const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp");
+
+static const struct Coords16 gUnknown_0854FB50[] =
+{
+ { 0, 66},
+ { 5, 73},
+ {10, 78},
+};
+
+static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, sizeof(gWeatherCloudTiles), 0x1200};
+
+static const struct OamData gOamData_839A9DC =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 3,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839A9E4[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839A9EC[] =
+{
+ gSpriteAnim_839A9E4,
+};
+
+static const struct SpriteTemplate sCloudSpriteTemplate =
+{
+ .tileTag = 4608,
+ .paletteTag = 4609,
+ .oam = &gOamData_839A9DC,
+ .anims = gSpriteAnimTable_839A9EC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80AC6B4,
+};
+
+//------------------------------------------------------------------------------
+// Clouds
+//------------------------------------------------------------------------------
+
+void Clouds_InitVars(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->initStep = 0;
+ if (gWeatherPtr->cloudSpritesCreated == FALSE)
+ Weather_SetBlendCoeffs(0, 16);
+}
+
+void Clouds_InitAll(void)
+{
+ Clouds_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Clouds_Main();
+}
+
+void CreateCloudSprites(void);
+
+void Clouds_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateCloudSprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+void sub_807E0A0(void);
+
+bool8 Clouds_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ return TRUE;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ sub_807E0A0();
+ gWeatherPtr->finishStep++;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+// Weather 2
+//------------------------------------------------------------------------------
+
+void Weather2_InitVars(void)
+{
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+}
+
+void Weather2_InitAll(void)
+{
+ Weather2_InitVars();
+}
+
+void Weather2_Main(void)
+{
+}
+
+bool8 Weather2_Finish(void)
+{
+ return 0;
+}
+
+void CreateCloudSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->cloudSpritesCreated == TRUE)
+ return;
+ LoadSpriteSheet(&sCloudSpriteSheet);
+ LoadCustomWeatherSpritePalette(gUnknown_0854C290);
+ for (i = 0; i < 3; i++)
+ {
+ u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite;
+
+ gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId];
+ sprite = gWeatherPtr->sprites.s1.cloudSprites[i];
+ sub_8093038(gUnknown_0854FB50[i].x + 7, gUnknown_0854FB50[i].y + 7, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.cloudSprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->cloudSpritesCreated = TRUE;
+}
+
+void sub_807E0A0(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->cloudSpritesCreated == FALSE)
+ return;
+ for (i = 0; i < 3; i++)
+ {
+ if (gWeatherPtr->sprites.s1.cloudSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.cloudSprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1200);
+ gWeatherPtr->cloudSpritesCreated = FALSE;
+}
+
+void sub_80AC6B4(struct Sprite *sprite)
+{
+ sprite->data[0] = (sprite->data[0] + 1) & 1;
+ if (sprite->data[0] != 0)
+ sprite->pos1.x--;
+}
+
+//------------------------------------------------------------------------------
+// Drought
+//------------------------------------------------------------------------------
+
+void Drought_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 0;
+}
+
+void Drought_InitAll(void)
+{
+ Drought_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Drought_Main();
+}
+
+void Drought_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ ResetDroughtWeatherPaletteLoading();
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (LoadDroughtWeatherPalettes() == FALSE)
+ gWeatherPtr->initStep++;
+ break;
+ case 3:
+ sub_80ABFF0();
+ gWeatherPtr->initStep++;
+ break;
+ case 4:
+ sub_80AC01C();
+ if (gWeatherPtr->unknown_73C == 6)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ default:
+ sub_80AC01C();
+ break;
+ }
+}
+
+bool8 Drought_Finish(void)
+{
+ return 0;
+}
+
+void task50_0807B6D4(u8);
+
+void sub_80AC81C(void)
+{
+ CreateTask(task50_0807B6D4, 0x50);
+}
+
+#define tState data[0]
+#define tBlendY data[1]
+#define tBlendDelay data[2]
+#define tWinRange data[3]
+
+void task50_0807B6D4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->tState)
+ {
+ case 0:
+ task->tBlendY = 0;
+ task->tBlendDelay = 0;
+ task->tWinRange = REG_WININ;
+ SetGpuReg(REG_OFFSET_WININ, WIN_RANGE(63, 63));
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ task->tState++;
+ // fall through
+ case 1:
+ task->tBlendY += 3;
+ if (task->tBlendY > 16)
+ task->tBlendY = 16;
+ SetGpuReg(REG_OFFSET_BLDY, task->tBlendY);
+ if (task->tBlendY >= 16)
+ task->tState++;
+ break;
+ case 2:
+ task->tBlendDelay++;
+ if (task->tBlendDelay > 9)
+ {
+ task->tBlendDelay = 0;
+ task->tBlendY--;
+ if (task->tBlendY <= 0)
+ {
+ task->tBlendY = 0;
+ task->tState++;
+ }
+ SetGpuReg(REG_OFFSET_BLDY, task->tBlendY);
+ }
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_WININ, task->tWinRange);
+ task->tState++;
+ break;
+ case 4:
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+#undef tState
+#undef tBlendY
+#undef tBlendDelay
+#undef tWinRange
+
+//------------------------------------------------------------------------------
+// Light Rain
+//------------------------------------------------------------------------------
+
+void LightRain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6D6 = 0;
+ gWeatherPtr->unknown_6DB = 8;
+ gWeatherPtr->unknown_6DC = 0;
+ gWeatherPtr->unknown_6D9 = 10;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ SetRainStrengthFromSoundEffect(SE_T_KOAME);
+}
+
+void LightRain_InitAll(void)
+{
+ LightRain_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ LightRain_Main();
+}
+
+void LoadRainSpriteSheet(void);
+u8 CreateRainSprite(void);
+u8 sub_807E8E8(void);
+
+void LightRain_Main(void)
+{
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (CreateRainSprite() == 0)
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (sub_807E8E8() == FALSE)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+void DestroyRainSprites(void);
+
+bool8 LightRain_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
+ {
+ gWeatherPtr->finishStep = 0xFF;
+ return FALSE;
+ }
+ else
+ {
+ gWeatherPtr->unknown_6D9 = 0;
+ gWeatherPtr->finishStep++;
+ }
+ // fall through
+ case 1:
+ if (sub_807E8E8() == FALSE)
+ {
+ DestroyRainSprites();
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+// defined below
+extern const s16 gUnknown_0839AABC[][2];
+extern const u16 gUnknown_0839AAC4[][2];
+
+void sub_807E4EC(struct Sprite *sprite)
+{
+ u32 randVal;
+ u16 r6;
+ s32 r4;
+ s32 r0;
+
+ if (sprite->data[1] == 0)
+ sprite->data[1] = 361;
+ randVal = sprite->data[1] * 1103515245 + 12345;
+ sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600;
+
+ r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0];
+
+ r4 = sprite->data[1] % 30;
+ sprite->data[2] = r4 * 8; // useless assignment
+
+ r0 = sprite->data[1] / 30;
+ sprite->data[3] = r0 * 8; // useless assignment
+
+ sprite->data[2] = r4;
+ sprite->data[2] <<= 7;
+
+ sprite->data[3] = r0;
+ sprite->data[3] <<= 7;
+
+ sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6;
+ sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6;
+
+ StartSpriteAnim(sprite, 0);
+ sprite->data[4] = 0;
+ sprite->coordOffsetEnabled = FALSE;
+ sprite->data[0] = r6;
+}
+
+void sub_807E5C0(struct Sprite *sprite)
+{
+ if (sprite->data[4] == 0)
+ {
+ sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0];
+ sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ sprite->pos1.y = sprite->data[3] >> 4;
+
+ if (sprite->data[5] != 0
+ && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248)
+ && sprite->pos1.y >= -16 && sprite->pos1.y <= 176)
+ sprite->invisible = FALSE;
+ else
+ sprite->invisible = TRUE;
+
+ sprite->data[0]--;
+ if (sprite->data[0] == 0)
+ {
+ StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1);
+ sprite->data[4] = 1;
+ sprite->pos1.x -= gSpriteCoordOffsetX;
+ sprite->pos1.y -= gSpriteCoordOffsetY;
+ sprite->coordOffsetEnabled = TRUE;
+ }
+ }
+ else if (sprite->animEnded)
+ {
+ sprite->invisible = TRUE;
+ sub_807E4EC(sprite);
+ }
+}
+
+void sub_807E6C4(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sub_807E4EC(sprite);
+ sprite->callback = sub_807E5C0;
+ }
+ else
+ {
+ sprite->data[0]--;
+ }
+}
+
+void sub_807E6F0(struct Sprite *sprite, u16 b)
+{
+ u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0];
+ u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8);
+ u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8);
+
+ while (--r6 != 0xFFFF)
+ sub_807E4EC(sprite);
+ if (r4 < r8)
+ {
+ while (--r4 != 0xFFFF)
+ sub_807E5C0(sprite);
+ sprite->data[6] = 0;
+ }
+ else
+ {
+ sprite->data[0] = r4 - r8;
+ sprite->invisible = TRUE;
+ sprite->data[6] = 1;
+ }
+}
+
+extern const struct SpriteSheet sRainSpriteSheet; // defined below
+
+void LoadRainSpriteSheet(void)
+{
+ LoadSpriteSheet(&sRainSpriteSheet);
+}
+
+static const struct Coords16 sRainSpriteCoords[] =
+{
+ { 0, 0},
+ { 0, 160},
+ { 0, 64},
+ {144, 224},
+ {144, 128},
+ { 32, 32},
+ { 32, 192},
+ { 32, 96},
+ { 72, 128},
+ { 72, 32},
+ { 72, 192},
+ {216, 96},
+ {216, 0},
+ {104, 160},
+ {104, 64},
+ {104, 224},
+ {144, 0},
+ {144, 160},
+ {144, 64},
+ { 32, 224},
+ { 32, 128},
+ { 72, 32},
+ { 72, 192},
+ { 48, 96},
+};
+
+static const struct OamData gOamData_839AA68 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 2,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839AA70[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gSpriteAnim_839AA78[] =
+{
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(40, 2),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AA88[] =
+{
+ ANIMCMD_FRAME(8, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AA98[] =
+{
+ gSpriteAnim_839AA70,
+ gSpriteAnim_839AA78,
+ gSpriteAnim_839AA88,
+};
+
+static const struct SpriteTemplate sRainSpriteTemplate =
+{
+ .tileTag = 4614,
+ .paletteTag = 4608,
+ .oam = &gOamData_839AA68,
+ .anims = gSpriteAnimTable_839AA98,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807E5C0,
+};
+
+const s16 gUnknown_0839AABC[][2] =
+{
+ {-104, 208},
+ {-160, 320},
+};
+
+const u16 gUnknown_0839AAC4[][2] =
+{
+ {18, 7},
+ {12, 10},
+};
+
+static const struct SpriteSheet sRainSpriteSheet = {gWeatherRainTiles, sizeof(gWeatherRainTiles), 0x1206};
+
+static const struct OamData gOamData_839AAD4 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteFrameImage gSpriteImageTable_839AADC[] =
+{
+ {gWeatherSnow1Tiles, sizeof(gWeatherSnow1Tiles)},
+ {gWeatherSnow2Tiles, sizeof(gWeatherSnow2Tiles)},
+};
+
+static const union AnimCmd gSpriteAnim_839AAEC[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AAF4[] =
+{
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AAFC[] =
+{
+ gSpriteAnim_839AAEC,
+ gSpriteAnim_839AAF4,
+};
+
+void sub_807ED48(struct Sprite *);
+static const struct SpriteTemplate sSnowflakeSpriteTemplate =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4608,
+ .oam = &gOamData_839AAD4,
+ .anims = gSpriteAnimTable_839AAFC,
+ .images = gSpriteImageTable_839AADC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807ED48,
+};
+
+// unused data
+static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300};
+
+static const struct OamData gOamData_839AB2C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gSpriteAnim_839AB34[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB3C[] =
+{
+ ANIMCMD_FRAME(32, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB44[] =
+{
+ ANIMCMD_FRAME(64, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB4C[] =
+{
+ ANIMCMD_FRAME(96, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB54[] =
+{
+ ANIMCMD_FRAME(128, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gSpriteAnim_839AB5C[] =
+{
+ ANIMCMD_FRAME(160, 16),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_839AB64[] =
+{
+ gSpriteAnim_839AB34,
+ gSpriteAnim_839AB3C,
+ gSpriteAnim_839AB44,
+ gSpriteAnim_839AB4C,
+ gSpriteAnim_839AB54,
+ gSpriteAnim_839AB5C,
+};
+
+static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] =
+{
+ AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] =
+{
+ gSpriteAffineAnim_839AB7C,
+};
+
+static void Fog1SpriteCallback(struct Sprite *);
+static const struct SpriteTemplate sFog1SpriteTemplate =
+{
+ .tileTag = 4609,
+ .paletteTag = 4608,
+ .oam = &gOamData_839AB2C,
+ .anims = gSpriteAnimTable_839AB64,
+ .images = NULL,
+ .affineAnims = gSpriteAffineAnimTable_839AB8C,
+ .callback = Fog1SpriteCallback,
+};
+
+bool8 CreateRainSprite(void)
+{
+ u8 spriteNum;
+ u8 spriteId;
+
+ if (gWeatherPtr->rainSpriteCount == 24)
+ return FALSE;
+
+ spriteNum = gWeatherPtr->rainSpriteCount;
+ spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate,
+ sRainSpriteCoords[spriteNum].x, sRainSpriteCoords[spriteNum].y, 78);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[5] = 0;
+ gSprites[spriteId].data[1] = spriteNum * 145;
+ while (gSprites[spriteId].data[1] >= 600)
+ gSprites[spriteId].data[1] -= 600;
+ sub_807E4EC(&gSprites[spriteId]);
+ sub_807E6F0(&gSprites[spriteId], spriteNum * 9);
+ gSprites[spriteId].invisible = TRUE;
+ gWeatherPtr->sprites.s1.rainSprites[spriteNum] = &gSprites[spriteId];
+ }
+ else
+ {
+ gWeatherPtr->sprites.s1.rainSprites[spriteNum] = NULL;
+ }
+
+ if (++gWeatherPtr->rainSpriteCount == 24)
+ {
+ u16 i;
+
+ for (i = 0; i < 24; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i]->data[6] == 0)
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E5C0;
+ else
+ gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E6C4;
+ }
+ }
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool8 sub_807E8E8(void)
+{
+ if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9)
+ return FALSE;
+
+ if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB)
+ {
+ gWeatherPtr->unknown_6D6 = 0;
+ if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9)
+ {
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1;
+ }
+ else
+ {
+ gWeatherPtr->unknown_6D8--;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0;
+ gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE;
+ }
+ }
+ return TRUE;
+}
+
+void DestroyRainSprites(void)
+{
+ u16 i;
+
+ for (i = 0; i < gWeatherPtr->rainSpriteCount; i++)
+ {
+ if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]);
+ }
+ gWeatherPtr->rainSpriteCount = 0;
+ FreeSpriteTilesByTag(0x1206);
+}
+
+//------------------------------------------------------------------------------
+// Snow
+//------------------------------------------------------------------------------
+
+void Snow_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->unknown_6E5 = 16;
+ gWeatherPtr->unknown_6E0 = 0;
+}
+
+void Snow_Main(void);
+void sub_807ED48(struct Sprite *);
+
+void Snow_InitAll(void)
+{
+ Snow_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ {
+ u16 i;
+
+ Snow_Main();
+ for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++)
+ {
+ sub_807ED48(gWeatherPtr->sprites.s1.snowflakeSprites[i]);
+ }
+ }
+}
+
+u8 snowflakes_progress(void);
+
+void Snow_Main(void)
+{
+ if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE)
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+}
+
+bool8 Snow_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->unknown_6E5 = 0;
+ gWeatherPtr->unknown_6E0 = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ if (snowflakes_progress() == FALSE)
+ {
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 CreateSnowflakeSprite(void);
+bool8 RemoveSnowflakeSprite(void);
+
+bool8 snowflakes_progress(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5)
+ return FALSE;
+
+ gWeatherPtr->unknown_6E0++;
+ if (gWeatherPtr->unknown_6E0 > 36)
+ {
+ gWeatherPtr->unknown_6E0 = 0;
+ if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5)
+ CreateSnowflakeSprite();
+ else
+ RemoveSnowflakeSprite();
+ }
+ return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5);
+}
+
+void sub_807EC40(struct Sprite *);
+
+bool8 CreateSnowflakeSprite(void)
+{
+ u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78);
+
+ if (spriteId == MAX_SPRITES)
+ return FALSE;
+ gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount;
+ sub_807EC40(&gSprites[spriteId]);
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gWeatherPtr->sprites.s1.snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId];
+ return TRUE;
+}
+
+bool8 RemoveSnowflakeSprite(void)
+{
+ if (gWeatherPtr->snowflakeSpriteCount != 0)
+ {
+ DestroySprite(gWeatherPtr->sprites.s1.snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_807EC40(struct Sprite *sprite)
+{
+ u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30);
+ u16 r6;
+
+ sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ sprite->data[0] = sprite->pos1.y * 128;
+ sprite->pos2.x = 0;
+ r6 = Random();
+ sprite->data[1] = (r6 & 3) * 5 + 64;
+ sprite->data[7] = (r6 & 3) * 5 + 64;
+ StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1);
+ sprite->data[3] = 0;
+ sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1;
+ sprite->data[6] = (r6 & 0x1F) + 210;
+ sprite->data[5] = 0;
+}
+
+void sub_807ECEC(struct Sprite *sprite)
+{
+ if (gWeatherPtr->unknown_6E2 > 18)
+ {
+ sprite->invisible = FALSE;
+ sprite->callback = sub_807ED48;
+ sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->data[0] = sprite->pos1.y * 128;
+ gWeatherPtr->unknown_6E2 = 0;
+ }
+}
+
+void sub_807ED48(struct Sprite *sprite)
+{
+ s16 r3;
+ s16 r2;
+
+ sprite->data[0] += sprite->data[1];
+ sprite->pos1.y = sprite->data[0] >> 7;
+ sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF;
+ sprite->pos2.x = gSineTable[sprite->data[3]] / 64;
+
+ r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF;
+ if (r3 & 0x100)
+ r3 |= -0x100; // hmm... what is this?
+ if (r3 < -3)
+ sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+ else if (r3 > 242)
+ sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
+
+ r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF;
+ if (r2 > 163 && r2 < 171)
+ {
+ sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
+ sprite->data[0] = sprite->pos1.y * 128;
+ sprite->data[5] = 0;
+ sprite->data[6] = 220;
+ }
+ else if (r2 > 242 && r2 < 250)
+ {
+ sprite->pos1.y = 163;
+ sprite->data[0] = sprite->pos1.y * 128;
+ sprite->data[5] = 0;
+ sprite->data[6] = 220;
+ sprite->invisible = TRUE;
+ sprite->callback = sub_807ECEC;
+ }
+
+ sprite->data[5]++;
+ if (sprite->data[5] == sprite->data[6])
+ {
+ sub_807EC40(sprite);
+ sprite->pos1.y = 250;
+ sprite->invisible = TRUE;
+ sprite->callback = sub_807ECEC;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Medium Rain
+//------------------------------------------------------------------------------
+
+void MedRain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6D6 = 0;
+ gWeatherPtr->unknown_6DB = 4;
+ gWeatherPtr->unknown_6DC = 0;
+ gWeatherPtr->unknown_6D9 = 16;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ gWeatherPtr->unknown_6ED = 0;
+ SetRainStrengthFromSoundEffect(SE_T_AME);
+}
+
+void Rain_Main(void);
+
+void MedRain_InitAll(void)
+{
+ MedRain_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Rain_Main();
+}
+
+//------------------------------------------------------------------------------
+// Heavy Rain
+//------------------------------------------------------------------------------
+
+void HeavyRain_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->unknown_6D6 = 0;
+ gWeatherPtr->unknown_6DB = 4;
+ gWeatherPtr->unknown_6DC = 1;
+ gWeatherPtr->unknown_6D9 = 24;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
+ SetRainStrengthFromSoundEffect(SE_T_OOAME);
+}
+
+void HeavyRain_InitAll(void)
+{
+ HeavyRain_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Rain_Main();
+}
+
+void UpdateThunderSound(void);
+void SetThunderCounter(u16);
+
+void Rain_Main(void)
+{
+ UpdateThunderSound();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadRainSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (CreateRainSprite())
+ break;
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (sub_807E8E8())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ case 3:
+ if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_CHANGING_WEATHER)
+ break;
+ gWeatherPtr->initStep = 6;
+ break;
+ case 4:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6E6 = (Random() % 360) + 360;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 5:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ gWeatherPtr->initStep++;
+ break;
+ case 6:
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->unknown_6EB = Random() % 2;
+ gWeatherPtr->initStep++;
+ break;
+ case 7:
+ gWeatherPtr->unknown_6EC = (Random() & 1) + 1;
+ gWeatherPtr->initStep++;
+ // fall through
+ case 8:
+ sub_80ABC48(19);
+ if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1)
+ SetThunderCounter(20);
+ gWeatherPtr->unknown_6E6 = (Random() % 3) + 6;
+ gWeatherPtr->initStep++;
+ break;
+ case 9:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ sub_80ABC48(3);
+ gWeatherPtr->unknown_6EA = 1;
+ if (--gWeatherPtr->unknown_6EC != 0)
+ {
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep = 10;
+ }
+ else if (gWeatherPtr->unknown_6EB == 0)
+ {
+ gWeatherPtr->initStep = 4;
+ }
+ else
+ {
+ gWeatherPtr->initStep = 11;
+ }
+ break;
+ case 10:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ gWeatherPtr->initStep = 8;
+ break;
+ case 11:
+ gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
+ gWeatherPtr->initStep++;
+ break;
+ case 12:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ SetThunderCounter(100);
+ sub_80ABC48(19);
+ // Why use "% 16" everywhere else and "& 0xF" here. So dumb.
+ gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30;
+ gWeatherPtr->initStep++;
+ break;
+ case 13:
+ if (--gWeatherPtr->unknown_6E6 != 0)
+ break;
+ sub_80ABC7C(19, 3, 5);
+ gWeatherPtr->initStep++;
+ break;
+ case 14:
+ if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_IDLE)
+ break;
+ gWeatherPtr->unknown_6EA = 1;
+ gWeatherPtr->initStep = 4;
+ break;
+ }
+}
+
+bool8 Rain_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ gWeatherPtr->unknown_6EA = 0;
+ gWeatherPtr->finishStep++;
+ // fall through
+ case 1:
+ Rain_Main();
+ if (gWeatherPtr->unknown_6EA != 0)
+ {
+ if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
+ || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
+ return FALSE;
+ gWeatherPtr->unknown_6D9 = 0;
+ gWeatherPtr->finishStep++;
+ }
+ break;
+ case 2:
+ if (sub_807E8E8())
+ break;
+ DestroyRainSprites();
+ gWeatherPtr->unknown_6ED = 0;
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void SetThunderCounter(u16 max)
+{
+ if (gWeatherPtr->unknown_6ED == 0)
+ {
+ gWeatherPtr->thunderCounter = Random() % max;
+ gWeatherPtr->unknown_6ED = 1;
+ }
+}
+
+void UpdateThunderSound(void)
+{
+ if (gWeatherPtr->unknown_6ED == 1)
+ {
+ if (gWeatherPtr->thunderCounter == 0)
+ {
+ if (IsSEPlaying())
+ return;
+ if (Random() & 1)
+ PlaySE(SE_T_KAMI);
+ else
+ PlaySE(SE_T_KAMI2);
+ gWeatherPtr->unknown_6ED = 0;
+ }
+ else
+ {
+ gWeatherPtr->thunderCounter--;
+ }
+ }
+}
+
+//------------------------------------------------------------------------------
+// Fog 1
+//------------------------------------------------------------------------------
+
+void Fog1_Main(void);
+static void CreateFog1Sprites(void);
+static void DestroyFog1Sprites(void);
+
+void Fog1_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ if (gWeatherPtr->fog1SpritesCreated == 0)
+ {
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2 = 0;
+ gWeatherPtr->fog1ScrollPosX = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Fog1_InitAll(void)
+{
+ Fog1_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Fog1_Main();
+}
+
+void Fog1_Main(void)
+{
+ gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF;
+ if (++gWeatherPtr->unknown_6F0 > 3)
+ {
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2++;
+ }
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFog1Sprites();
+ if (gWeatherPtr->currWeather == WEATHER_FOG_1)
+ Weather_SetTargetBlendCoeffs(12, 8, 3);
+ else
+ Weather_SetTargetBlendCoeffs(4, 16, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (Weather_UpdateBlend())
+ {
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ }
+ break;
+ }
+}
+
+bool8 Fog1_Finish(void)
+{
+ gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF;
+ if (++gWeatherPtr->unknown_6F0 > 3)
+ {
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2++;
+ }
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 3);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFog1Sprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+#define sprColumn data[0]
+
+static void Fog1SpriteCallback(struct Sprite *sprite)
+{
+ sprite->pos2.y = (u8)gSpriteCoordOffsetY;
+ sprite->pos1.x = gWeatherPtr->fog1ScrollPosX + 32 + sprite->sprColumn * 64;
+ if (sprite->pos1.x > 0x10F)
+ {
+ sprite->pos1.x = 480 + gWeatherPtr->fog1ScrollPosX - (4 - sprite->sprColumn) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+static void CreateFog1Sprites(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->fog1SpritesCreated)
+ {
+ struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201};
+
+ LoadSpriteSheet(&fog1SpriteSheet);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->sprColumn = i % 5;
+ sprite->pos1.x = (i % 5) * 64 + 32;
+ sprite->pos1.y = (i / 5) * 64 + 32;
+ gWeatherPtr->sprites.s2.fog1Sprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fog1Sprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->fog1SpritesCreated = TRUE;
+ }
+}
+
+#undef sprColumn
+
+static void DestroyFog1Sprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fog1SpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fog1Sprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.fog1Sprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1201);
+ gWeatherPtr->fog1SpritesCreated = 0;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Volcanic ash
+//------------------------------------------------------------------------------
+
+void Ash_Main(void);
+void LoadAshSpriteSheet(void);
+void CreateAshSprites(void);
+void DestroyAshSprites(void);
+
+void Ash_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = FALSE;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->unknown_6FE = 20;
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ Weather_SetBlendCoeffs(0, 16);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(64, 63)); // Those aren't even valid coefficients!
+ }
+}
+
+void Ash_InitAll(void)
+{
+ Ash_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Ash_Main();
+}
+
+void Ash_Main(void)
+{
+ gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF;
+ while (gWeatherPtr->unknown_6FC > 0xEF)
+ gWeatherPtr->unknown_6FC -= 0xF0;
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ LoadAshSpriteSheet();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ if (!gWeatherPtr->ashSpritesCreated)
+ CreateAshSprites();
+ Weather_SetTargetBlendCoeffs(16, 0, 1);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ default:
+ Weather_UpdateBlend();
+ break;
+ }
+}
+
+bool8 Ash_Finish(void)
+{
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ DestroyAshSprites();
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ gWeatherPtr->finishStep++;
+ return FALSE;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static const struct SpriteSheet sAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202};
+
+void LoadAshSpriteSheet(void)
+{
+ LoadSpriteSheet(&sAshSpriteSheet);
+}
+
+const struct OamData gOamData_839ABB8 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 15,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_839ABC0[] =
+{
+ ANIMCMD_FRAME(0, 60),
+ ANIMCMD_FRAME(64, 60),
+ ANIMCMD_JUMP(0),
+};
+
+const union AnimCmd *const gSpriteAnimTable_839ABCC[] =
+{
+ gSpriteAnim_839ABC0,
+};
+
+void sub_807FAA8(struct Sprite *);
+static const struct SpriteTemplate sAshSpriteTemplate =
+{
+ .tileTag = 4610,
+ .paletteTag = 4608,
+ .oam = &gOamData_839ABB8,
+ .anims = gSpriteAnimTable_839ABCC,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_807FAA8,
+};
+
+void CreateAshSprites(void)
+{
+ u8 i;
+
+ if (!gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->data[1] = 0;
+ sprite->data[2] = (u8)(i % 5);
+ sprite->data[3] = (u8)(i / 5);
+ sprite->data[0] = sprite->data[3] * 64 + 32;
+ gWeatherPtr->sprites.s2.ashSprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->ashSpritesCreated = TRUE;
+ }
+}
+
+void DestroyAshSprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->ashSpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.ashSprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1202);
+ gWeatherPtr->ashSpritesCreated = FALSE;
+ }
+}
+
+void sub_807FAA8(struct Sprite *sprite)
+{
+ sprite->data[1]++;
+ if (sprite->data[1] > 5)
+ {
+ sprite->data[1] = 0;
+ sprite->data[0]++;
+ }
+ sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0];
+ sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Fog 2
+//------------------------------------------------------------------------------
+
+void Fog2_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ gWeatherPtr->unknown_6F0 = 0;
+ gWeatherPtr->unknown_6F2 = 1;
+ if (gWeatherPtr->fog2SpritesCreated == 0)
+ {
+ gWeatherPtr->unknown_71C = 0;
+ gWeatherPtr->unknown_71E = 0;
+ gWeatherPtr->unknown_720 = 0;
+ gWeatherPtr->unknown_722 = 0;
+ gWeatherPtr->unknown_718 = 0;
+ gWeatherPtr->unknown_71A = 0;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Fog2_Main(void);
+
+void Fog2_InitAll(void)
+{
+ Fog2_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Fog2_Main();
+}
+
+void sub_807FC9C(void);
+void CreateFog2Sprites(void);
+
+void Fog2_Main(void)
+{
+ sub_807FC9C();
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateFog2Sprites();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(12, 8, 8);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ }
+}
+
+void DestroyFog2Sprites(void);
+
+bool8 Fog2_Finish(void)
+{
+ sub_807FC9C();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 1);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ DestroyFog2Sprites();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_807FC9C(void)
+{
+ if (++gWeatherPtr->unknown_71C > 2)
+ {
+ gWeatherPtr->unknown_720++;
+ gWeatherPtr->unknown_71C = 0;
+ }
+
+ if (++gWeatherPtr->unknown_71E > 4)
+ {
+ gWeatherPtr->unknown_722++;
+ gWeatherPtr->unknown_71E = 0;
+ }
+
+ gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF;
+ gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722;
+}
+
+extern const struct SpriteTemplate sFog2SpriteTemplate; // defined below
+
+void CreateFog2Sprites(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->fog2SpritesCreated)
+ {
+ struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1203};
+
+ LoadSpriteSheet(&fog2SpriteSheet);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, (i / 5) * 64, 0xFF);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+
+ sprite->data[0] = i % 5;
+ sprite->data[1] = i / 5;
+ gWeatherPtr->sprites.s2.fog2Sprites[i] = sprite;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.fog2Sprites[i] = NULL;
+ }
+ }
+ gWeatherPtr->fog2SpritesCreated = TRUE;
+ }
+}
+
+const struct OamData gOamData_839ABF0 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_839ABF8[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_839AC00[] =
+{
+ gSpriteAnim_839ABF8,
+};
+
+void Fog2SpriteCallback(struct Sprite *);
+const struct SpriteTemplate sFog2SpriteTemplate =
+{
+ .tileTag = 4611,
+ .paletteTag = 4608,
+ .oam = &gOamData_839ABF0,
+ .anims = gSpriteAnimTable_839AC00,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = Fog2SpriteCallback,
+};
+
+void DestroyFog2Sprites(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->fog2SpritesCreated)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.fog2Sprites[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.fog2Sprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1203);
+ gWeatherPtr->fog2SpritesCreated = FALSE;
+ }
+}
+
+void Fog2SpriteCallback(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->unknown_71A;
+ sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Sandstorm
+//------------------------------------------------------------------------------
+
+void Sandstorm_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->weatherGfxLoaded = 0;
+ gWeatherPtr->gammaTargetIndex = 0;
+ gWeatherPtr->gammaStepDelay = 20;
+ if (gWeatherPtr->sandstormSprites1Created == 0)
+ {
+ gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0;
+ gWeatherPtr->unknown_712 = 8;
+ gWeatherPtr->unknown_714 = 0;
+ // Dead code. How does the compiler not optimize this out?
+ if (gWeatherPtr->unknown_712 > 0x5F)
+ gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712;
+ Weather_SetBlendCoeffs(0, 16);
+ }
+}
+
+void Sandstorm_Main(void);
+
+void Sandstorm_InitAll(void)
+{
+ Sandstorm_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Sandstorm_Main();
+}
+
+void sub_808002C(void);
+void sub_8080064(void);
+void CreateSandstormSprites_1(void);
+void CreateSandstormSprites_2(void);
+
+void Sandstorm_Main(void)
+{
+ sub_8080064();
+ sub_808002C();
+ if (gWeatherPtr->unknown_712 > 0x5F)
+ gWeatherPtr->unknown_712 = 32;
+ switch (gWeatherPtr->initStep)
+ {
+ case 0:
+ CreateSandstormSprites_1();
+ CreateSandstormSprites_2();
+ gWeatherPtr->initStep++;
+ break;
+ case 1:
+ Weather_SetTargetBlendCoeffs(16, 0, 0);
+ gWeatherPtr->initStep++;
+ break;
+ case 2:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->weatherGfxLoaded = TRUE;
+ gWeatherPtr->initStep++;
+ break;
+ }
+}
+
+void sub_80800E4(void);
+
+bool8 Sandstorm_Finish(void)
+{
+ sub_8080064();
+ sub_808002C();
+ switch (gWeatherPtr->finishStep)
+ {
+ case 0:
+ Weather_SetTargetBlendCoeffs(0, 16, 0);
+ gWeatherPtr->finishStep++;
+ break;
+ case 1:
+ if (!Weather_UpdateBlend())
+ break;
+ gWeatherPtr->finishStep++;
+ break;
+ case 2:
+ sub_80800E4();
+ gWeatherPtr->finishStep++;
+ break;
+ default:
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_808002C(void)
+{
+ if (gWeatherPtr->unknown_714++ > 4)
+ {
+ gWeatherPtr->unknown_712++;
+ gWeatherPtr->unknown_714 = 0;
+ }
+}
+
+void sub_8080064(void)
+{
+ gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4;
+ gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712];
+ gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF;
+ gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8);
+}
+
+void sub_80800E4(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->sandstormSprites1Created)
+ {
+ for (i = 0; i < 20; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites1[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites1[i]);
+ }
+ gWeatherPtr->sandstormSprites1Created = FALSE;
+ FreeSpriteTilesByTag(0x1204);
+ }
+
+ if (gWeatherPtr->sandstormSprites2Created)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ if (gWeatherPtr->sprites.s2.sandstormSprites2[i] != NULL)
+ DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites2[i]);
+ }
+ gWeatherPtr->sandstormSprites2Created = FALSE;
+ }
+}
+
+const struct OamData gOamData_839AC1C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+const union AnimCmd gSpriteAnim_839AC24[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_839AC2C[] =
+{
+ ANIMCMD_FRAME(64, 3),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_839AC34[] =
+{
+ gSpriteAnim_839AC24,
+ gSpriteAnim_839AC2C,
+};
+
+void SandstormSpriteCallback1(struct Sprite *);
+const struct SpriteTemplate sSandstormSpriteTemplate =
+{
+ .tileTag = 4612,
+ .paletteTag = 4609,
+ .oam = &gOamData_839AC1C,
+ .anims = gSpriteAnimTable_839AC34,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SandstormSpriteCallback1,
+};
+
+static const struct SpriteSheet sSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204};
+
+void CreateSandstormSprites_1(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->sandstormSprites1Created)
+ {
+ LoadSpriteSheet(&sSandstormSpriteSheet);
+ LoadCustomWeatherSpritePalette(gUnknown_0854C2B0);
+ for (i = 0; i < 20; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[0] = i % 5;
+ gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[1] = i / 5;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL;
+ }
+ }
+ gWeatherPtr->sandstormSprites1Created = TRUE;
+ }
+}
+
+const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0};
+
+void SandstormSpriteCallback2(struct Sprite *);
+
+void CreateSandstormSprites_2(void)
+{
+ u16 i;
+
+ if (!gWeatherPtr->sandstormSprites2Created)
+ {
+ for (i = 0; i < 5; i++)
+ {
+ u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 24, 208, 1);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId];
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = 2;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[1] = i * 51;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[0] = 8;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[2] = 0;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730;
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[3] = gUnknown_0839AC5C[i];
+ StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1);
+ CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], 0, 2, 0);
+ gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = SandstormSpriteCallback2;
+ }
+ else
+ {
+ gWeatherPtr->sprites.s2.sandstormSprites2[i] = NULL;
+ }
+ gWeatherPtr->sandstormSprites2Created = TRUE;
+ }
+ }
+}
+
+void SandstormSpriteCallback1(struct Sprite *sprite)
+{
+ sprite->pos2.y = gWeatherPtr->unknown_710;
+ sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64;
+ if (sprite->pos1.x > 271)
+ {
+ sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64;
+ sprite->pos1.x &= 0x1FF;
+ }
+}
+
+void SandstormSpriteCallback3(struct Sprite *);
+
+void SandstormSpriteCallback2(struct Sprite *sprite)
+{
+ if (--sprite->data[3] == -1)
+ sprite->callback = SandstormSpriteCallback3;
+}
+
+void SandstormSpriteCallback3(struct Sprite *sprite)
+{
+ u32 x;
+ u32 y;
+
+ if (--sprite->pos1.y < -48)
+ {
+ sprite->pos1.y = 208;
+ sprite->data[0] = 4;
+ }
+ x = sprite->data[0] * gSineTable[sprite->data[1]];
+ y = sprite->data[0] * gSineTable[sprite->data[1] + 64];
+ sprite->pos2.x = x >> 8;
+ sprite->pos2.y = y >> 8;
+ sprite->data[1] = (sprite->data[1] + 10) & 0xFF;
+ if (++sprite->data[2] > 8)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+}
+
+//------------------------------------------------------------------------------
+// Shade
+//------------------------------------------------------------------------------
+
+void Shade_InitVars(void)
+{
+ gWeatherPtr->initStep = 0;
+ gWeatherPtr->gammaTargetIndex = 3;
+ gWeatherPtr->gammaStepDelay = 20;
+}
+
+void Shade_InitAll(void)
+{
+ Shade_InitVars();
+}
+
+void Shade_Main(void)
+{
+}
+
+bool8 Shade_Finish(void)
+{
+ return FALSE;
+}
+
+//------------------------------------------------------------------------------
+// Weather 14
+//------------------------------------------------------------------------------
+
+const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30};
+
+const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205};
+
+void Bubbles_InitVars(void)
+{
+ Fog1_InitVars();
+ if (gWeatherPtr->unknown_72E == 0)
+ {
+ LoadSpriteSheet(&gWeatherBubbleSpriteSheet);
+ gWeatherPtr->unknown_728 = 0;
+ gWeatherPtr->unknown_726 = gUnknown_0839AC68[0];
+ gWeatherPtr->unknown_72A = 0;
+ gWeatherPtr->unknown_72C = 0;
+ }
+}
+
+void Bubbles_Main(void);
+
+void Bubbles_InitAll(void)
+{
+ Bubbles_InitVars();
+ while (gWeatherPtr->weatherGfxLoaded == FALSE)
+ Bubbles_Main();
+}
+
+void sub_8080588(u16);
+
+void Bubbles_Main(void)
+{
+ Fog1_Main();
+ if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728])
+ {
+ gWeatherPtr->unknown_726 = 0;
+ if (++gWeatherPtr->unknown_728 > 7)
+ gWeatherPtr->unknown_728 = 0;
+ sub_8080588(gWeatherPtr->unknown_72A);
+ if (++gWeatherPtr->unknown_72A > 12)
+ gWeatherPtr->unknown_72A = 0;
+ }
+}
+
+void sub_8080610(void);
+
+bool8 Bubbles_Finish(void)
+{
+ if (!Fog1_Finish())
+ {
+ sub_8080610();
+ return FALSE;
+ }
+ return TRUE;
+}
+
+const s16 gUnknown_0839AC78[][2] =
+{
+ {120, 160},
+ {376, 160},
+ { 40, 140},
+ {296, 140},
+ {180, 130},
+ {436, 130},
+ { 60, 160},
+ {436, 160},
+ {220, 180},
+ {476, 180},
+ { 10, 90},
+ {266, 90},
+ {256, 160},
+};
+
+const union AnimCmd gSpriteAnim_839ACAC[] =
+{
+ ANIMCMD_FRAME(0, 16),
+ ANIMCMD_FRAME(1, 16),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_839ACB8[] =
+{
+ gSpriteAnim_839ACAC,
+};
+
+extern const struct OamData gUnknown_08524904;
+
+void unc_0807DAB4(struct Sprite *);
+const struct SpriteTemplate gSpriteTemplate_839ACBC =
+{
+ .tileTag = 4613,
+ .paletteTag = 4608,
+ .oam = &gUnknown_08524904,
+ .anims = gSpriteAnimTable_839ACB8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = unc_0807DAB4,
+};
+
+void sub_8080588(u16 a)
+{
+ s16 x = gUnknown_0839AC78[a][0];
+ s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY;
+ u8 spriteId = CreateSpriteAtEnd(
+ &gSpriteTemplate_839ACBC,
+ x,
+ y,
+ 0);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = 0;
+ gSprites[spriteId].data[2] = 0;
+ gWeatherPtr->unknown_72C++;
+ }
+}
+
+void sub_8080610(void)
+{
+ u16 i;
+
+ if (gWeatherPtr->unknown_72C != 0)
+ {
+ for (i = 0; i < 64; i++)
+ {
+ if (gSprites[i].template == &gSpriteTemplate_839ACBC)
+ DestroySprite(&gSprites[i]);
+ }
+ FreeSpriteTilesByTag(0x1205);
+ gWeatherPtr->unknown_72C = 0;
+ }
+}
+
+void unc_0807DAB4(struct Sprite *sprite)
+{
+ ++sprite->data[0];
+ if (++sprite->data[0] > 8) // double increment
+ {
+ sprite->data[0] = 0;
+ if (sprite->data[1] == 0)
+ {
+ if (++sprite->pos2.x > 4)
+ sprite->data[1] = 1;
+ }
+ else
+ {
+ if (--sprite->pos2.x <= 0)
+ sprite->data[1] = 0;
+ }
+ }
+ sprite->pos1.y -= 3;
+ if (++sprite->data[2] > 0x77)
+ DestroySprite(sprite);
+}
+
+//------------------------------------------------------------------------------
+
+static void sub_80AEC94(u32 a0, u32 a1)
+{
+ gUnknown_02038BC4 = a0;
+ gUnknown_02038BC6 = a1;
+}
+
+static void sub_80AECA8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ if (data[15]-- <= 0)
+ {
+ ChangeWeather(data[1]);
+ gUnknown_02038BC4 = data[1];
+ data[15] = 600;
+ data[0]++;
+ }
+ break;
+ case 1:
+ if (data[15]-- <= 0)
+ {
+ ChangeWeather(data[2]);
+ gUnknown_02038BC4 = data[2];
+ data[15] = 600;
+ data[0] = 0;
+ }
+ break;
+ }
+}
+
+static void sub_80AED28(void)
+{
+ u8 taskId = CreateTask(sub_80AECA8, 0);
+ s16 *data = gTasks[taskId].data;
+
+ data[15] = 600;
+ if (gUnknown_02038BC4 == WEATHER_RAIN_HEAVY)
+ {
+ data[1] = WEATHER_DROUGHT;
+ data[2] = WEATHER_RAIN_HEAVY;
+ }
+ else if (gUnknown_02038BC4 == WEATHER_DROUGHT)
+ {
+ data[1] = WEATHER_RAIN_HEAVY;
+ data[2] = WEATHER_DROUGHT;
+ }
+ else
+ {
+ gUnknown_02038BC4 = WEATHER_RAIN_HEAVY;
+ data[1] = WEATHER_DROUGHT;
+ data[2] = WEATHER_RAIN_HEAVY;
+ }
+}
+
+static u8 TranslateWeatherNum(u8);
+static void UpdateRainCounter(u8, u8);
+
+void SetSav1Weather(u32 weather)
+{
+ u8 oldWeather = gSaveBlock1Ptr->weather;
+ gSaveBlock1Ptr->weather = TranslateWeatherNum(weather);
+ UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
+}
+
+u8 GetSav1Weather(void)
+{
+ return gSaveBlock1Ptr->weather;
+}
+
+void SetSav1WeatherFromCurrMapHeader(void)
+{
+ u8 oldWeather = gSaveBlock1Ptr->weather;
+ gSaveBlock1Ptr->weather = TranslateWeatherNum(gMapHeader.weather);
+ UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
+}
+
+void SetWeather(u32 weather)
+{
+ SetSav1Weather(weather);
+ ChangeWeather(GetSav1Weather());
+}
+
+void SetWeather_Unused(u32 weather)
+{
+ SetSav1Weather(weather);
+ sub_80AB104(GetSav1Weather());
+}
+
+void DoCurrentWeather(void)
+{
+ u8 weather = GetSav1Weather();
+
+ if (weather == WEATHER_15)
+ {
+ if (!FuncIsActiveTask(sub_80AECA8))
+ sub_80AED28();
+ weather = gUnknown_02038BC4;
+ }
+ else
+ {
+ if (FuncIsActiveTask(sub_80AECA8))
+ DestroyTask(FindTaskIdByFunc(sub_80AECA8));
+ gUnknown_02038BC4 = WEATHER_RAIN_HEAVY;
+ }
+ ChangeWeather(weather);
+}
+
+void sub_80AEE84(void)
+{
+ u8 weather = GetSav1Weather();
+
+ if (weather == WEATHER_15)
+ {
+ if (!FuncIsActiveTask(sub_80AECA8))
+ sub_80AED28();
+ weather = gUnknown_02038BC4;
+ }
+ else
+ {
+ if (FuncIsActiveTask(sub_80AECA8))
+ DestroyTask(FindTaskIdByFunc(sub_80AECA8));
+ gUnknown_02038BC4 = WEATHER_RAIN_HEAVY;
+ }
+ sub_80AB104(weather);
+}
+
+static const u8 sWeatherCycleRoute119[] =
+{
+ WEATHER_SUNNY,
+ WEATHER_RAIN_LIGHT,
+ WEATHER_RAIN_MED,
+ WEATHER_RAIN_LIGHT,
+};
+static const u8 sWeatherCycleRoute123[] =
+{
+ WEATHER_SUNNY,
+ WEATHER_SUNNY,
+ WEATHER_RAIN_LIGHT,
+ WEATHER_SUNNY,
+};
+
+static u8 TranslateWeatherNum(u8 weather)
+{
+ switch (weather)
+ {
+ case WEATHER_NONE: return WEATHER_NONE;
+ case WEATHER_CLOUDS: return WEATHER_CLOUDS;
+ case WEATHER_SUNNY: return WEATHER_SUNNY;
+ case WEATHER_RAIN_LIGHT: return WEATHER_RAIN_LIGHT;
+ case WEATHER_SNOW: return WEATHER_SNOW;
+ case WEATHER_RAIN_MED: return WEATHER_RAIN_MED;
+ case WEATHER_FOG_1: return WEATHER_FOG_1;
+ case WEATHER_ASH: return WEATHER_ASH;
+ case WEATHER_SANDSTORM: return WEATHER_SANDSTORM;
+ case WEATHER_FOG_2: return WEATHER_FOG_2;
+ case WEATHER_FOG_3: return WEATHER_FOG_3;
+ case WEATHER_SHADE: return WEATHER_SHADE;
+ case WEATHER_DROUGHT: return WEATHER_DROUGHT;
+ case WEATHER_RAIN_HEAVY: return WEATHER_RAIN_HEAVY;
+ case WEATHER_BUBBLES: return WEATHER_BUBBLES;
+ case WEATHER_15: return WEATHER_15;
+ case WEATHER_ROUTE119_CYCLE: return sWeatherCycleRoute119[gSaveBlock1Ptr->weatherCycleStage];
+ case WEATHER_ROUTE123_CYCLE: return sWeatherCycleRoute123[gSaveBlock1Ptr->weatherCycleStage];
+ default: return WEATHER_NONE;
+ }
+}
+
+void UpdateWeatherPerDay(u16 increment)
+{
+ u16 weatherStage = gSaveBlock1Ptr->weatherCycleStage + increment;
+ weatherStage %= 4;
+ gSaveBlock1Ptr->weatherCycleStage = weatherStage;
+}
+
+static void UpdateRainCounter(u8 newWeather, u8 oldWeather)
+{
+ if (newWeather != oldWeather
+ && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED))
+ IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
+}
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 7e1fc03eb..11161b8df 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "bg.h"
#include "fieldmap.h"
-#include "fldeff_80F9BCC.h"
+#include "fldeff_misc.h"
#include "fldeff_cut.h"
#include "fldeff_groundshake.h"
#include "frontier_util.h"
diff --git a/src/fight.c b/src/fight.c
index c9000fae4..b7ca2e87a 100644
--- a/src/fight.c
+++ b/src/fight.c
@@ -416,7 +416,7 @@ const struct SpriteTemplate gUnknown_08596104 =
void unc_080B08A0(struct Sprite *sprite)
{
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = 15;
sprite->callback = WaitAnimForDuration;
@@ -459,9 +459,9 @@ void AnimBasicFistOrFoot(struct Sprite *sprite)
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
if (gBattleAnimArgs[3] == 0)
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
else
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = WaitAnimForDuration;
@@ -534,7 +534,7 @@ static void sub_810D0B8(struct Sprite *sprite)
void sub_810D10C(struct Sprite *sprite)
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = 30;
if (gBattleAnimArgs[2] == 0)
@@ -574,7 +574,7 @@ void sub_810D1B4(struct Sprite *sprite)
if (BATTLE_PARTNER(gBattleAnimAttacker) == gBattleAnimTarget && GetBattlerPosition(gBattleAnimTarget) < B_POSITION_PLAYER_RIGHT)
gBattleAnimArgs[0] *= -1;
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -596,7 +596,7 @@ void sub_810D1B4(struct Sprite *sprite)
static void sub_810D240(struct Sprite *sprite)
{
- if (!TranslateAnimLinear(sprite))
+ if (!AnimTranslateLinear(sprite))
{
sprite->pos2.y += Sin(sprite->data[7] >> 8, sprite->data[5]);
sprite->data[7] += sprite->data[6];
@@ -615,7 +615,7 @@ static void sub_810D240(struct Sprite *sprite)
// arg 3: spin duration
void AnimSpinningKickOrPunch(struct Sprite *sprite)
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[0] = gBattleAnimArgs[3];
@@ -639,7 +639,7 @@ static void AnimSpinningKickOrPunchFinish(struct Sprite *sprite)
// arg 2: initial wait duration
void AnimStompFoot(struct Sprite *sprite)
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[2];
sprite->callback = AnimStompFootStep;
@@ -670,7 +670,7 @@ void sub_810D37C(struct Sprite *sprite)
{
if (sprite->data[0] == 0)
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[3];
sprite->data[0]++;
@@ -800,12 +800,12 @@ void sub_810D608(struct Sprite *sprite)
{
sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
- sprite->oam.priority = sub_80A8328(gBattleAnimAttacker);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
sprite->data[7] = gBattleAnimTarget;
}
else
{
- sprite->oam.priority = sub_80A8328(gBattleAnimTarget);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
sprite->data[7] = gBattleAnimAttacker;
}
@@ -828,7 +828,7 @@ static void sub_810D6A8(struct Sprite *sprite)
sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3);
InitAnimLinearTranslation(sprite);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A6F98;
}
}
@@ -839,7 +839,7 @@ void sub_810D714(struct Sprite *sprite)
sprite->pos1.y = 120;
sprite->data[0] = gBattleAnimArgs[3];
- sub_80A8048(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8));
+ StorePointerInVars(&sprite->data[4], &sprite->data[5], (void *)(sprite->pos1.y << 8));
sprite->data[6] = gBattleAnimArgs[1];
sprite->oam.tileNum += gBattleAnimArgs[2] * 4;
@@ -853,9 +853,9 @@ static void sub_810D770(struct Sprite *sprite)
if (sprite->data[0] != 0)
{
- var0 = sub_80A8050(sprite->data[4], sprite->data[5]);
+ var0 = LoadPointerFromVars(sprite->data[4], sprite->data[5]);
var0 -= sprite->data[6];
- sub_80A8048(&sprite->data[4], &sprite->data[5], var0);
+ StorePointerInVars(&sprite->data[4], &sprite->data[5], var0);
var0 = (void *)(((intptr_t)var0) >> 8);
sprite->pos1.y = (intptr_t)var0;
@@ -903,12 +903,12 @@ void sub_810D874(struct Sprite *sprite)
sprite->pos1.x = GetBattlerSpriteCoord(gBattlerAttacker, 2);
sprite->pos1.y = GetBattlerSpriteCoord(gBattlerAttacker, 3);
battler = gBattleAnimTarget;
- sprite->oam.priority = sub_80A8328(gBattleAnimAttacker);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
}
else
{
battler = gBattleAnimAttacker;
- sprite->oam.priority = sub_80A8328(gBattleAnimTarget);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
}
if (IsContest())
@@ -965,9 +965,9 @@ void sub_810D984(struct Sprite *sprite)
void sub_810DA10(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
- InitAnimSpritePos(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, 0);
else
- sub_80A6980(sprite, FALSE);
+ InitSpritePosToAnimTarget(sprite, FALSE);
if (IsContest())
{
@@ -978,7 +978,7 @@ void sub_810DA10(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
}
- sprite->callback = sub_80A67D8;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
diff --git a/src/fire.c b/src/fire.c
index c054f154e..5f501a340 100644
--- a/src/fire.c
+++ b/src/fire.c
@@ -466,26 +466,26 @@ static void sub_8108EC8(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A634C;
+ sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback(sprite);
}
static void sub_8108F08(struct Sprite *sprite)
{
- sub_80A6864(sprite, gBattleAnimArgs[0]);
+ SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]);
sprite->pos1.y += gBattleAnimArgs[1];
sprite->data[0] = gBattleAnimArgs[4];
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[2] = gBattleAnimArgs[3];
- sprite->callback = sub_80A656C;
+ sprite->callback = AnimTranslateLinearSimple;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
static void sub_8108F4C(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
{
@@ -538,12 +538,12 @@ static void sub_8109028(struct Sprite *sprite)
}
if (sprite->data[0] == sprite->data[1])
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
static void sub_8109064(struct Sprite *sprite)
{
- sub_80A6838(sprite);
+ SetSpriteCoordsToAnimAttackerCoords(sprite);
if (GetBattlerSide(gBattleAnimAttacker))
{
@@ -588,7 +588,7 @@ static void sub_81090D8(struct Sprite *sprite)
}
else
{
- move_anim_8074EE0(sprite);
+ DestroySpriteAndMatrix(sprite);
}
}
@@ -644,7 +644,7 @@ static void sub_8109200(struct Sprite *sprite)
//void AnimFireRing(struct Sprite *sprite)
void AnimFireRing(struct Sprite *sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[7] = gBattleAnimArgs[2];
sprite->data[0] = 0;
@@ -672,7 +672,7 @@ static void AnimFireRingStep1(struct Sprite *sprite)
static void AnimFireRingStep2(struct Sprite *sprite)
{
- if (TranslateAnimLinear(sprite))
+ if (AnimTranslateLinear(sprite))
{
sprite->data[0] = 0;
@@ -726,12 +726,12 @@ static void AnimFireCross(struct Sprite *sprite)
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
- sprite->callback = sub_80A653C; //TranslateSpriteOverDuration
+ sprite->callback = TranslateSpriteOverDuration;
}
static void sub_81093A4(struct Sprite *sprite)
{
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[1] = gBattleAnimArgs[2];
sprite->data[0] = gBattleAnimArgs[3];
@@ -779,7 +779,7 @@ void sub_8109460(u8 taskId) // initialize animation task for Move_ERUPTION?
task->data[5] = GetBattlerSide(gBattleAnimAttacker);
task->data[6] = 0;
- sub_80A7270(task->data[15], 0);
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
task->func = sub_81094D0;
}
@@ -816,7 +816,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION?
if(!sub_80A80C8(task))
{
- sub_80A7E6C(task->data[15]);
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
gSprites[task->data[15]].pos2.x = 0;
task->data[1] = 0;
@@ -879,7 +879,7 @@ static void sub_81094D0(u8 taskId) // animate Move_ERUPTION?
if (!sub_80A80C8(task))
{
gSprites[task->data[15]].pos1.y = task->data[4];
- sub_80A7344(task->data[15]);
+ ResetSpriteRotScale(task->data[15]);
task->data[2] = 0;
task->data[0]++;
@@ -1054,7 +1054,7 @@ static void sub_8109AFC(struct Sprite *sprite)
switch (sprite->data[0])
{
case 0:
- InitAnimSpritePos(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, 0);
StartSpriteAnim(sprite, gBattleAnimArgs[2]);
sprite->data[7] = gBattleAnimArgs[2];
@@ -1067,7 +1067,7 @@ static void sub_8109AFC(struct Sprite *sprite)
sprite->data[4] = -4;
}
- sprite->oam.priority = sub_80A8328(gBattleAnimTarget);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
sprite->data[0]++;
break;
case 1:
@@ -1119,7 +1119,7 @@ static void sub_8109C4C(struct Sprite *sprite)
s16 initialData5;
s16 newData5;
- if (!TranslateAnimLinear(sprite))
+ if (!AnimTranslateLinear(sprite))
{
sprite->pos2.x += Sin(sprite->data[5], 16);
initialData5 = sprite->data[5];
@@ -1157,9 +1157,9 @@ void sub_8109CB0(struct Sprite *sprite)
if (!IsContest())
{
if (sprite->data[1] < 64 || sprite->data[1] > 195)
- sprite->oam.priority = sub_80A8328(gBattleAnimTarget);
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget);
else
- sprite->oam.priority = sub_80A8328(gBattleAnimTarget) + 1;
+ sprite->oam.priority = GetBattlerSpriteBGPriority(gBattleAnimTarget) + 1;
}
else
{
@@ -1318,4 +1318,4 @@ void sub_810A094(u8 taskId)
gSprites[spriteId].pos2.y = 0;
DestroyAnimVisualTask(taskId);
}
-} \ No newline at end of file
+}
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index 9771232f2..8862caa9f 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -170,7 +170,7 @@ static bool8 sub_8137304(void)
return FALSE;
}
-bool8 sub_8137360(u8 a1, u8 a2)
+bool8 GetMapPairFadeToType(u8 a1, u8 a2)
{
u8 i;
u8 v0 = a1;
@@ -187,7 +187,7 @@ bool8 sub_8137360(u8 a1, u8 a2)
return FALSE;
}
-bool8 fade_type_for_given_maplight_pair(u8 a1, u8 a2)
+bool8 GetMapPairFadeFromType(u8 a1, u8 a2)
{
u8 i;
u8 v0 = a1;
diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c
index 866606a06..44ffd60f9 100644
--- a/src/fldeff_groundshake.c
+++ b/src/fldeff_groundshake.c
@@ -73,7 +73,13 @@ static const struct OamData gUnknown_08617E2C =
};
static const struct SpriteTemplate gUnknown_08617E34 = {
- 0x0FA0, 0xFFFF, &gUnknown_08617E2C, gSpriteAnimTable_8617E28, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
+ .tileTag = 0x0FA0,
+ .paletteTag = 0xFFFF,
+ .oam = &gUnknown_08617E2C,
+ .anims = gSpriteAnimTable_8617E28,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81BEAD8
};
static const union AnimCmd gSpriteAnim_8617E4C[] =
@@ -105,7 +111,13 @@ static const struct OamData gSpriteAnim_8617E58 =
};
static const struct SpriteTemplate gUnknown_08617E60 = {
- 0x0FA0, 0xFFFF, &gSpriteAnim_8617E58, gSpriteAnim_8617E54, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
+ .tileTag = 0x0FA0,
+ .paletteTag = 0xFFFF,
+ .oam = &gSpriteAnim_8617E58,
+ .anims = gSpriteAnim_8617E54,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81BEAD8
};
// ewram
diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c
new file mode 100644
index 000000000..79f0a8ede
--- /dev/null
+++ b/src/fldeff_misc.c
@@ -0,0 +1,1525 @@
+#include "global.h"
+#include "gpu_regs.h"
+#include "palette.h"
+#include "script.h"
+#include "sound.h"
+#include "task.h"
+#include "rom6.h"
+#include "strings.h"
+#include "party_menu.h"
+#include "fieldmap.h"
+#include "field_effect.h"
+#include "field_camera.h"
+#include "field_player_avatar.h"
+#include "secret_base.h"
+#include "event_data.h"
+#include "event_object_movement.h"
+#include "metatile_behavior.h"
+#include "string_util.h"
+#include "constants/field_effects.h"
+#include "constants/metatile_behaviors.h"
+#include "constants/songs.h"
+#include "constants/vars.h"
+#include "fldeff_misc.h"
+
+void sub_80F9C90(u8);
+void sub_80F9DFC(u8);
+
+void Task_SecretBasePCTurnOn(u8);
+
+void Task_PopSecretBaseBalloon(u8);
+void DoBalloonSoundEffect(s16);
+
+void Task_WateringBerryTreeAnim_1(u8);
+void Task_WateringBerryTreeAnim_2(u8);
+void Task_WateringBerryTreeAnim_3(u8);
+
+void sub_80F9C44(TaskFunc, u16, u16, u8);
+
+void FieldCallback_SecretBaseCave(void);
+static void CaveEntranceSpriteCallback1(struct Sprite *);
+static void CaveEntranceSpriteCallback2(struct Sprite *);
+static void CaveEntranceSpriteCallbackEnd(struct Sprite *);
+static void StartSecretBaseCaveFieldEffect(void);
+
+void FieldCallback_SecretBaseTree(void);
+static void TreeEntranceSpriteCallback1(struct Sprite *);
+static void TreeEntranceSpriteCallback2(struct Sprite *);
+static void TreeEntranceSpriteCallbackEnd(struct Sprite *);
+static void StartSecretBaseTreeFieldEffect(void);
+
+void FieldCallback_SecretBaseShrub(void);
+static void ShrubEntranceSpriteCallback1(struct Sprite *);
+static void ShrubEntranceSpriteCallback2(struct Sprite *);
+static void ShrubEntranceSpriteCallbackEnd(struct Sprite *);
+static void StartSecretBaseShrubFieldEffect(void);
+
+void SpriteCB_SandPillar_0(struct Sprite *);
+void SpriteCB_SandPillar_1(struct Sprite *);
+void SpriteCB_SandPillar_2(struct Sprite *);
+
+const u8 gSpriteImage_858D978[] = INCBIN_U8("graphics/unknown/858E588/0.4bpp");
+const u8 gSpriteImage_858D9F8[] = INCBIN_U8("graphics/unknown/858E588/1.4bpp");
+const u8 gSpriteImage_858DA78[] = INCBIN_U8("graphics/unknown/858E588/2.4bpp");
+const u8 gSpriteImage_858DAF8[] = INCBIN_U8("graphics/unknown/858E588/3.4bpp");
+const u8 gSpriteImage_858DB78[] = INCBIN_U8("graphics/unknown/858E588/4.4bpp");
+
+const u8 gUnusedEmptySpace_858DBF8[32] = {0};
+
+const u16 gFieldEffectObjectPalette7[] = INCBIN_U16("graphics/event_objects/palettes/field_effect_object_palette_07.gbapal");
+const u8 gSpriteImage_858DC38[] = INCBIN_U8("graphics/unknown/858E5D8/0.4bpp");
+const u8 gSpriteImage_858DCB8[] = INCBIN_U8("graphics/unknown/858E5D8/1.4bpp");
+const u8 gSpriteImage_858DD38[] = INCBIN_U8("graphics/unknown/858E5D8/2.4bpp");
+const u8 gSpriteImage_858DDB8[] = INCBIN_U8("graphics/unknown/858E5D8/3.4bpp");
+const u8 gSpriteImage_858DE38[] = INCBIN_U8("graphics/unknown/858E5D8/4.4bpp");
+const u8 gSpriteImage_858DEB8[] = INCBIN_U8("graphics/unknown/858E5B0/0.4bpp");
+const u8 gSpriteImage_858DF38[] = INCBIN_U8("graphics/unknown/858E5B0/1.4bpp");
+const u8 gSpriteImage_858DFB8[] = INCBIN_U8("graphics/unknown/858E5B0/2.4bpp");
+const u8 gSpriteImage_858E038[] = INCBIN_U8("graphics/unknown/858E5B0/3.4bpp");
+const u8 gSpriteImage_858E0B8[] = INCBIN_U8("graphics/unknown/858E5B0/4.4bpp");
+const u8 gSpriteImage_858E138[] = INCBIN_U8("graphics/unknown/858E5B0/5.4bpp");
+const u16 gFieldEffectObjectPalette8[] = INCBIN_U16("graphics/event_objects/palettes/field_effect_object_palette_08.gbapal");
+const u8 gSpriteImage_858E1D8[] = INCBIN_U8("graphics/unknown/858E674/0.4bpp");
+const u8 gSpriteImage_858E2D8[] = INCBIN_U8("graphics/unknown/858E674/1.4bpp");
+const u8 gSpriteImage_858E3D8[] = INCBIN_U8("graphics/unknown/858E674/2.4bpp");
+
+const struct OamData gOamData_858E4D8 =
+{
+ .y = 0,
+ .x = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_SQUARE,
+ .size = 1,
+ .priority = 2,
+};
+
+const union AnimCmd gSpriteAnim_858E4E0[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_858E4F8[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_858E510[] =
+{
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_858E528[] =
+{
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_858E540[] =
+{
+ ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(3, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(2, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 8, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd gSpriteAnim_858E558[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(1, 8),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(3, 8),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_858E570[] =
+{
+ gSpriteAnim_858E4E0,
+};
+
+const union AnimCmd *const gSpriteAnimTable_858E574[] =
+{
+ gSpriteAnim_858E4F8,
+ gSpriteAnim_858E510,
+ gSpriteAnim_858E528,
+ gSpriteAnim_858E540,
+};
+
+const union AnimCmd *const gSpriteAnimTable_858E584[] =
+{
+ gSpriteAnim_858E558,
+};
+
+const struct SpriteFrameImage gUnknown_858E588[] =
+{
+ {gSpriteImage_858D978, 0x80},
+ {gSpriteImage_858D9F8, 0x80},
+ {gSpriteImage_858DA78, 0x80},
+ {gSpriteImage_858DAF8, 0x80},
+ {gSpriteImage_858DB78, 0x80},
+};
+
+const struct SpriteFrameImage gUnknown_858E5B0[] =
+{
+ {gSpriteImage_858DEB8, 0x80},
+ {gSpriteImage_858DF38, 0x80},
+ {gSpriteImage_858DFB8, 0x80},
+ {gSpriteImage_858E038, 0x80},
+ {gSpriteImage_858E0B8, 0x80},
+};
+
+const struct SpriteFrameImage gUnknown_858E5D8[] =
+{
+ {gSpriteImage_858DC38, 0x80},
+ {gSpriteImage_858DCB8, 0x80},
+ {gSpriteImage_858DD38, 0x80},
+ {gSpriteImage_858DDB8, 0x80},
+ {gSpriteImage_858DE38, 0x80},
+};
+
+const struct SpriteTemplate gUnknown_0858E600 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1003,
+ .oam = &gOamData_858E4D8,
+ .anims = gSpriteAnimTable_858E570,
+ .images = gUnknown_858E588,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = CaveEntranceSpriteCallback1,
+};
+
+const struct SpriteTemplate gUnknown_0858E618 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1008,
+ .oam = &gOamData_858E4D8,
+ .anims = gSpriteAnimTable_858E574,
+ .images = gUnknown_858E5B0,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = TreeEntranceSpriteCallback1,
+};
+
+const struct SpriteTemplate gUnknown_0858E630 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1008,
+ .oam = &gOamData_858E4D8,
+ .anims = gSpriteAnimTable_858E584,
+ .images = gUnknown_858E5D8,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = ShrubEntranceSpriteCallback1,
+};
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo7 = {gFieldEffectObjectPalette7, 0x1003};
+const struct SpritePalette gFieldEffectObjectPaletteInfo8 = {gFieldEffectObjectPalette8, 0x1008};
+
+const struct OamData gOamData_858E658 =
+{
+ .x = 0,
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_OFF,
+ .objMode = ST_OAM_OBJ_NORMAL,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_V_RECTANGLE,
+ .size = 2,
+ .priority = 2,
+};
+
+const union AnimCmd gSpriteAnim_858E660[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(1, 6),
+ ANIMCMD_FRAME(2, 6),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gSpriteAnimTable_858E670[] =
+{
+ gSpriteAnim_858E660,
+};
+
+const struct SpriteFrameImage gUnknown_0858E674[] =
+{
+ {gSpriteImage_858E1D8, 0x100},
+ {gSpriteImage_858E2D8, 0x100},
+ {gSpriteImage_858E3D8, 0x100},
+};
+
+const struct SpriteTemplate gUnknown_0858E68C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x100E,
+ .oam = &gOamData_858E658,
+ .anims = gSpriteAnimTable_858E670,
+ .images = gUnknown_0858E674,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_SandPillar_0,
+};
+
+// This uses one of the secret base palettes, so there is no "field_effect_object_palette_09.pal" file.
+const struct SpritePalette gFieldEffectObjectPaletteInfo9 = {gTilesetPalettes_SecretBase[5], 0x100E};
+
+static const u8 gSpriteImage_858E6AC[] = INCBIN_U8("graphics/unknown/858E84C/0.4bpp");
+static const u8 gSpriteImage_858E72C[] = INCBIN_U8("graphics/unknown/858E84C/1.4bpp");
+static const u8 gSpriteImage_858E7AC[] = INCBIN_U8("graphics/unknown/858E84C/2.4bpp");
+static const u16 gUnknown_0858E82C[] = INCBIN_U16("graphics/unknown/unknown_58E82C.gbapal");
+
+static const struct SpriteFrameImage gUnknown_0858E84C[] =
+{
+ {gSpriteImage_858E6AC, sizeof(gSpriteImage_858E6AC)},
+ {gSpriteImage_858E72C, sizeof(gSpriteImage_858E72C)},
+ {gSpriteImage_858E7AC, sizeof(gSpriteImage_858E7AC)},
+};
+
+static const struct SpritePalette gUnknown_0858E864 = {gUnknown_0858E82C, 0x1000};
+
+static const union AnimCmd gSpriteAnim_858E86C[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_FRAME(2, 30),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gSpriteAnimTable_858E87C[] =
+{
+ gSpriteAnim_858E86C,
+};
+
+static const struct SpriteTemplate gUnknown_0858E880 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x1000,
+ .oam = &gEventObjectBaseOam_32x8,
+ .anims = gSpriteAnimTable_858E87C,
+ .images = gUnknown_0858E84C,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+void sub_80F9BCC(u16 a0, u16 a1, u8 a2)
+{
+ sub_80F9C44(sub_80F9C90, a0, a1, a2);
+}
+
+void sub_80F9BF4(u16 a0, u16 a1, u8 a2)
+{
+ sub_80F9C44(sub_80F9DFC, a0, a1, a2);
+}
+
+bool8 sub_80F9C1C(void)
+{
+ return FuncIsActiveTask(sub_80F9C90);
+}
+
+bool8 sub_80F9C30(void)
+{
+ return FuncIsActiveTask(sub_80F9DFC);
+}
+
+void sub_80F9C44(void (*taskfunc) (u8), u16 a1, u16 a2, u8 a3)
+{
+ u8 taskId = CreateTask(taskfunc, a3);
+
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = a1 == 0 ? 16 : a1;
+ gTasks[taskId].data[2] = a1 == 0 ? 20 : a1;
+ gTasks[taskId].func(taskId);
+}
+
+#ifdef NONMATCHING
+void sub_80F9C90(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch(task->data[0])
+ {
+ case 0:
+ task->data[3] = 0x78;
+ task->data[4] = 0x78;
+ task->data[5] = 0x50;
+ task->data[6] = 0x51;
+
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[5], task->data[6]));
+ SetGpuReg(REG_OFFSET_WININ, 0x3F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+
+ break;
+ case 1:
+ task->data[7] = GetGpuReg(REG_OFFSET_BLDCNT);
+ task->data[8] = GetGpuReg(REG_OFFSET_BLDY);
+
+ SetGpuReg(REG_OFFSET_BLDCNT, 0xBF);
+ SetGpuReg(REG_OFFSET_BLDY, 0x10);
+
+ break;
+ case 2:
+ task->data[3] -= task->data[1];
+ task->data[4] += task->data[1];
+
+ if (task->data[3] < 1 || task->data[4] > 0xEF)
+ {
+ task->data[3] = 0;
+ task->data[4] = 0xF0;
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
+ BlendPalettes(0xFFFFFFFF, 0, 0);
+ gPlttBufferFaded[0] = 0;
+ }
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
+
+ if (task->data[3] != 0)
+ return;
+ break;
+ case 3:
+ task->data[5] -= task->data[2];
+ task->data[6] += task->data[2];
+
+ if (task->data[5] < 1 || task->data[2] > 0x9F)
+ {
+ task->data[5] = 0;
+ task->data[6] = 0xA0;
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ }
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
+
+ if (task->data[5] != 0)
+ return;
+ break;
+ default:
+ SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
+ DestroyTask(taskId);
+ return;
+ }
+ task->data[0] += 1;
+}
+#else
+NAKED
+void sub_80F9C90(u8 taskId)
+{
+ asm_unified("\tpush {r4,r5,lr}\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tlsls r0, r5, 2\n"
+ "\tadds r0, r5\n"
+ "\tlsls r0, 3\n"
+ "\tldr r1, =gTasks\n"
+ "\tadds r4, r0, r1\n"
+ "\tmovs r1, 0x8\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "\tcmp r0, 0x1\n"
+ "\tbeq _080F9D10\n"
+ "\tcmp r0, 0x1\n"
+ "\tbgt _080F9CB8\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080F9CC2\n"
+ "\tb _080F9DDE\n"
+ "\t.pool\n"
+ "_080F9CB8:\n"
+ "\tcmp r0, 0x2\n"
+ "\tbeq _080F9D32\n"
+ "\tcmp r0, 0x3\n"
+ "\tbeq _080F9D94\n"
+ "\tb _080F9DDE\n"
+ "_080F9CC2:\n"
+ "\tmovs r0, 0x78\n"
+ "\tstrh r0, [r4, 0xE]\n"
+ "\tstrh r0, [r4, 0x10]\n"
+ "\tmovs r0, 0x50\n"
+ "\tstrh r0, [r4, 0x12]\n"
+ "\tmovs r0, 0x51\n"
+ "\tstrh r0, [r4, 0x14]\n"
+ "\tmovs r1, 0x80\n"
+ "\tlsls r1, 6\n"
+ "\tmovs r0, 0\n"
+ "\tbl SetGpuRegBits\n"
+ "\tldrh r1, [r4, 0xE]\n"
+ "\tlsls r1, 8\n"
+ "\tldrh r0, [r4, 0x10]\n"
+ "\torrs r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r1, 16\n"
+ "\tmovs r0, 0x40\n"
+ "\tbl SetGpuReg\n"
+ "\tldrh r1, [r4, 0x12]\n"
+ "\tlsls r1, 8\n"
+ "\tldrh r0, [r4, 0x14]\n"
+ "\torrs r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r1, 16\n"
+ "\tmovs r0, 0x44\n"
+ "\tbl SetGpuReg\n"
+ "\tmovs r0, 0x48\n"
+ "\tmovs r1, 0x3F\n"
+ "\tbl SetGpuReg\n"
+ "\tmovs r0, 0x4A\n"
+ "\tmovs r1, 0\n"
+ "\tbl SetGpuReg\n"
+ "\tb _080F9DEE\n"
+ "_080F9D10:\n"
+ "\tmovs r0, 0x50\n"
+ "\tbl GetGpuReg\n"
+ "\tstrh r0, [r4, 0x16]\n"
+ "\tmovs r0, 0x54\n"
+ "\tbl GetGpuReg\n"
+ "\tstrh r0, [r4, 0x18]\n"
+ "\tmovs r0, 0x50\n"
+ "\tmovs r1, 0xBF\n"
+ "\tbl SetGpuReg\n"
+ "\tmovs r0, 0x54\n"
+ "\tmovs r1, 0x10\n"
+ "\tbl SetGpuReg\n"
+ "\tb _080F9DEE\n"
+ "_080F9D32:\n"
+ "\tldrh r0, [r4, 0xE]\n"
+ "\tldrh r1, [r4, 0xA]\n"
+ "\tsubs r0, r1\n"
+ "\tmovs r5, 0\n"
+ "\tstrh r0, [r4, 0xE]\n"
+ "\tldrh r2, [r4, 0x10]\n"
+ "\tadds r1, r2\n"
+ "\tstrh r1, [r4, 0x10]\n"
+ "\tlsls r0, 16\n"
+ "\tcmp r0, 0\n"
+ "\tble _080F9D50\n"
+ "\tlsls r0, r1, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, 0xEF\n"
+ "\tble _080F9D76\n"
+ "_080F9D50:\n"
+ "\tstrh r5, [r4, 0xE]\n"
+ "\tmovs r0, 0xF0\n"
+ "\tstrh r0, [r4, 0x10]\n"
+ "\tmovs r0, 0x54\n"
+ "\tmovs r1, 0\n"
+ "\tbl SetGpuReg\n"
+ "\tldrh r1, [r4, 0x16]\n"
+ "\tmovs r0, 0x50\n"
+ "\tbl SetGpuReg\n"
+ "\tmovs r0, 0x1\n"
+ "\tnegs r0, r0\n"
+ "\tmovs r1, 0\n"
+ "\tmovs r2, 0\n"
+ "\tbl BlendPalettes\n"
+ "\tldr r0, =gPlttBufferFaded\n"
+ "\tstrh r5, [r0]\n"
+ "_080F9D76:\n"
+ "\tldrh r1, [r4, 0xE]\n"
+ "\tlsls r1, 8\n"
+ "\tldrh r0, [r4, 0x10]\n"
+ "\torrs r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r1, 16\n"
+ "\tmovs r0, 0x40\n"
+ "\tbl SetGpuReg\n"
+ "\tmovs r1, 0xE\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "\tb _080F9DD8\n"
+ "\t.pool\n"
+ "_080F9D94:\n"
+ "\tldrh r0, [r4, 0x12]\n"
+ "\tldrh r1, [r4, 0xC]\n"
+ "\tsubs r0, r1\n"
+ "\tstrh r0, [r4, 0x12]\n"
+ "\tldrh r2, [r4, 0x14]\n"
+ "\tadds r1, r2\n"
+ "\tstrh r1, [r4, 0x14]\n"
+ "\tlsls r0, 16\n"
+ "\tcmp r0, 0\n"
+ "\tble _080F9DB0\n"
+ "\tlsls r0, r1, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, 0x9F\n"
+ "\tble _080F9DC2\n"
+ "_080F9DB0:\n"
+ "\tmovs r0, 0\n"
+ "\tstrh r0, [r4, 0x12]\n"
+ "\tmovs r0, 0xA0\n"
+ "\tstrh r0, [r4, 0x14]\n"
+ "\tmovs r1, 0x80\n"
+ "\tlsls r1, 6\n"
+ "\tmovs r0, 0\n"
+ "\tbl ClearGpuRegBits\n"
+ "_080F9DC2:\n"
+ "\tldrh r1, [r4, 0x12]\n"
+ "\tlsls r1, 8\n"
+ "\tldrh r0, [r4, 0x14]\n"
+ "\torrs r1, r0\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r1, 16\n"
+ "\tmovs r0, 0x44\n"
+ "\tbl SetGpuReg\n"
+ "\tmovs r1, 0x12\n"
+ "\tldrsh r0, [r4, r1]\n"
+ "_080F9DD8:\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080F9DF4\n"
+ "\tb _080F9DEE\n"
+ "_080F9DDE:\n"
+ "\tldrh r1, [r4, 0x16]\n"
+ "\tmovs r0, 0x50\n"
+ "\tbl SetGpuReg\n"
+ "\tadds r0, r5, 0\n"
+ "\tbl DestroyTask\n"
+ "\tb _080F9DF4\n"
+ "_080F9DEE:\n"
+ "\tldrh r0, [r4, 0x8]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r4, 0x8]\n"
+ "_080F9DF4:\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif
+
+void sub_80F9DFC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ int temp = task->data[0];
+
+ switch (temp)
+ {
+ case 0:
+ gPlttBufferFaded[0] = temp;
+ break;
+ case 1:
+ task->data[3] = 0;
+ task->data[4] = 0xF0;
+ task->data[5] = 0;
+ task->data[6] = 0xA0;
+
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
+ SetGpuReg(REG_OFFSET_WININ, 0x3F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ break;
+ case 2:
+ task->data[5] += task->data[2];
+ task->data[6] -= task->data[2];
+
+ if (task->data[5] > 0x4F || task->data[6] < 0x52)
+ {
+ task->data[5] = 0x50;
+ task->data[6] = 0x51;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0xBF);
+ SetGpuReg(REG_OFFSET_BLDY, 0x10);
+ }
+ SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
+
+ if (task->data[5] != 0x50)
+ return;
+ break;
+ case 3:
+ task->data[3] += task->data[1];
+ task->data[4] -= task->data[1];
+
+ if (task->data[3] > 0x77 || task->data[4] < 0x79)
+ {
+ task->data[3] = 0x78;
+ task->data[4] = 0x78;
+ BlendPalettes(-1, 0x10, 0);
+ gPlttBufferFaded[0] = 0;
+ }
+ SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
+
+ if (task->data[3] != 0x78)
+ return;
+ break;
+ default:
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ DestroyTask(taskId);
+ return;
+ }
+ task->data[0] += 1;
+}
+
+void SetCurrentSecretBase(void)
+{
+ sub_80E9608(&gPlayerFacingPosition, gMapHeader.events);
+ sub_80E8B6C();
+}
+
+void AdjustSecretPowerSpritePixelOffsets(void)
+{
+ if (gPlayerAvatar.flags & 0x6)
+ {
+ switch (gFieldEffectArguments[1])
+ {
+ case DIR_SOUTH:
+ gFieldEffectArguments[5] = 16;
+ gFieldEffectArguments[6] = 40;
+ break;
+ case DIR_NORTH:
+ gFieldEffectArguments[5] = 16;
+ gFieldEffectArguments[6] = 8;
+ break;
+ case DIR_WEST:
+ gFieldEffectArguments[5] = -8;
+ gFieldEffectArguments[6] = 24;
+ break;
+ case DIR_EAST:
+ gFieldEffectArguments[5] = 24;
+ gFieldEffectArguments[6] = 24;
+ break;
+ }
+ }
+ else
+ {
+ switch (gFieldEffectArguments[1])
+ {
+ case DIR_SOUTH:
+ gFieldEffectArguments[5] = 8;
+ gFieldEffectArguments[6] = 40;
+ break;
+ case DIR_NORTH:
+ gFieldEffectArguments[5] = 8;
+ gFieldEffectArguments[6] = 8;
+ break;
+ case DIR_WEST:
+ gFieldEffectArguments[5] = -8;
+ gFieldEffectArguments[6] = 24;
+ break;
+ case DIR_EAST:
+ gFieldEffectArguments[5] = 24;
+ gFieldEffectArguments[6] = 24;
+ break;
+ }
+ }
+}
+
+bool8 SetUpFieldMove_SecretPower(void)
+{
+ u8 mb;
+
+ sub_80E8BC8();
+
+ if (gSpecialVar_Result == 1 || GetPlayerFacingDirection() != DIR_NORTH)
+ return FALSE;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
+ mb = MapGridGetMetatileBehaviorAt(gPlayerFacingPosition.x, gPlayerFacingPosition.y);
+
+ if (MetatileBehavior_IsSecretBaseCave(mb) == TRUE)
+ {
+ SetCurrentSecretBase();
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_SecretBaseCave;
+ return TRUE;
+ }
+
+ if (MetatileBehavior_IsSecretBaseTree(mb) == TRUE)
+ {
+ SetCurrentSecretBase();
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_SecretBaseTree;
+ return TRUE;
+ }
+
+ if (MetatileBehavior_IsSecretBaseShrub(mb) == TRUE)
+ {
+ SetCurrentSecretBase();
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = FieldCallback_SecretBaseShrub;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void FieldCallback_SecretBaseCave(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ ScriptContext1_SetupScript(EventScript_275A86);
+}
+
+bool8 FldEff_UseSecretPowerCave(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)StartSecretBaseCaveFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartSecretBaseCaveFieldEffect;
+
+ return FALSE;
+}
+
+static void StartSecretBaseCaveFieldEffect(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_CAVE);
+ FieldEffectStart(FLDEFF_SECRET_POWER_CAVE);
+}
+
+bool8 FldEff_SecretPowerCave(void)
+{
+ AdjustSecretPowerSpritePixelOffsets();
+ CreateSprite(&gUnknown_0858E600,
+ gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
+ gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
+ 148);
+ return FALSE;
+}
+
+static void CaveEntranceSpriteCallback1(struct Sprite *sprite)
+{
+ PlaySE(SE_W088);
+
+ sprite->data[0] = 0;
+ sprite->callback = CaveEntranceSpriteCallback2;
+}
+
+static void CaveEntranceSpriteCallback2(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 40)
+ {
+ sprite->data[0]++;
+
+ if (sprite->data[0] == 20)
+ sub_80E8D4C();
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ sprite->callback = CaveEntranceSpriteCallbackEnd;
+ }
+}
+
+static void CaveEntranceSpriteCallbackEnd(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SECRET_POWER_CAVE);
+ EnableBothScriptContexts();
+}
+
+void FieldCallback_SecretBaseTree(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ ScriptContext1_SetupScript(EventScript_275ADF);
+}
+
+bool8 FldEff_UseSecretPowerTree(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)StartSecretBaseTreeFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartSecretBaseTreeFieldEffect;
+
+ return FALSE;
+}
+
+static void StartSecretBaseTreeFieldEffect(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_TREE);
+ FieldEffectStart(FLDEFF_SECRET_POWER_TREE);
+}
+
+bool8 FldEff_SecretPowerTree(void)
+{
+ s16 mb = MapGridGetMetatileBehaviorAt(gPlayerFacingPosition.x, gPlayerFacingPosition.y) & 0xFFF;
+
+ if (mb == MB_SECRET_BASE_SPOT_TREE_LEFT)
+ gFieldEffectArguments[7] = 0;
+
+ if (mb == MB_SECRET_BASE_SPOT_TREE_RIGHT)
+ gFieldEffectArguments[7] = 2;
+
+ AdjustSecretPowerSpritePixelOffsets();
+
+ CreateSprite(&gUnknown_0858E618,
+ gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
+ gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
+ 148);
+
+ if (gFieldEffectArguments[7] == 1 || gFieldEffectArguments[7] == 3)
+ sub_80E8D4C();
+
+ return FALSE;
+}
+
+static void TreeEntranceSpriteCallback1(struct Sprite *sprite)
+{
+ PlaySE(SE_W010);
+
+ sprite->animNum = gFieldEffectArguments[7];
+ sprite->data[0] = 0;
+ sprite->callback = TreeEntranceSpriteCallback2;
+}
+
+static void TreeEntranceSpriteCallback2(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+
+ if (sprite->data[0] >= 40)
+ {
+ if (gFieldEffectArguments[7] == 0 || gFieldEffectArguments[7] == 2)
+ sub_80E8D4C();
+
+ sprite->data[0] = 0;
+ sprite->callback = TreeEntranceSpriteCallbackEnd;
+ }
+}
+
+static void TreeEntranceSpriteCallbackEnd(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SECRET_POWER_TREE);
+ EnableBothScriptContexts();
+}
+
+void FieldCallback_SecretBaseShrub(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ ScriptContext1_SetupScript(EventScript_275B38);
+}
+
+bool8 FldEff_UseSecretPowerShrub(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)StartSecretBaseShrubFieldEffect >> 16;
+ gTasks[taskId].data[9] = (u32)StartSecretBaseShrubFieldEffect;
+
+ return FALSE;
+}
+
+static void StartSecretBaseShrubFieldEffect(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_SECRET_POWER_SHRUB);
+ FieldEffectStart(FLDEFF_SECRET_POWER_SHRUB);
+}
+
+bool8 FldEff_SecretPowerShrub(void)
+{
+ AdjustSecretPowerSpritePixelOffsets();
+
+ CreateSprite(&gUnknown_0858E630,
+ gSprites[gPlayerAvatar.spriteId].oam.x + gFieldEffectArguments[5],
+ gSprites[gPlayerAvatar.spriteId].oam.y + gFieldEffectArguments[6],
+ 148);
+
+ return FALSE;
+}
+
+static void ShrubEntranceSpriteCallback1(struct Sprite *sprite)
+{
+ PlaySE(SE_W077);
+
+ sprite->data[0] = 0;
+ sprite->callback = ShrubEntranceSpriteCallback2;
+}
+
+static void ShrubEntranceSpriteCallback2(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 40)
+ {
+ sprite->data[0]++;
+
+ if (sprite->data[0] == 20)
+ sub_80E8D4C();
+ }
+ else
+ {
+ sprite->data[0] = 0;
+ sprite->callback = ShrubEntranceSpriteCallbackEnd;
+ }
+}
+
+static void ShrubEntranceSpriteCallbackEnd(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SECRET_POWER_SHRUB);
+ EnableBothScriptContexts();
+}
+
+u32 FldEff_SecretBasePCTurnOn(void)
+{
+ s16 x, y;
+ u8 taskId;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+
+ taskId = CreateTask(Task_SecretBasePCTurnOn, 0);
+ gTasks[taskId].data[0] = x;
+ gTasks[taskId].data[1] = y;
+ gTasks[taskId].data[2] = 0;
+
+ return 0;
+}
+
+void Task_SecretBasePCTurnOn(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[2])
+ {
+ case 4:
+ case 12:
+ MapGridSetMetatileIdAt(data[0], data[1], 548);
+ CurrentMapDrawMetatileAt(data[0], data[1]);
+ break;
+ case 8:
+ case 16:
+ MapGridSetMetatileIdAt(data[0], data[1], 544);
+ CurrentMapDrawMetatileAt(data[0], data[1]);
+ break;
+ case 20:
+ MapGridSetMetatileIdAt(data[0], data[1], 548);
+ CurrentMapDrawMetatileAt(data[0], data[1]);
+ FieldEffectActiveListRemove(FLDEFF_PCTURN_ON);
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ return;
+ }
+
+ data[2]++;
+}
+
+void DoSecretBasePCTurnOffEffect(void)
+{
+ s16 x, y;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ PlaySE(SE_PC_OFF);
+
+ if (!VarGet(VAR_CURRENT_SECRET_BASE))
+ MapGridSetMetatileIdAt(x, y, 3616);
+ else
+ MapGridSetMetatileIdAt(x, y, 3617);
+
+ CurrentMapDrawMetatileAt(x, y);
+}
+
+void PopSecretBaseBalloon(s16 metatileId, s16 x, s16 y)
+{
+ u8 taskId = CreateTask(Task_PopSecretBaseBalloon, 0);
+
+ gTasks[taskId].data[0] = metatileId;
+ gTasks[taskId].data[1] = x;
+ gTasks[taskId].data[2] = y;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[4] = 1;
+}
+
+void Task_PopSecretBaseBalloon(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[3] == 6)
+ data[3] = 0;
+ else
+ data[3]++;
+
+ if (data[3] == 0)
+ {
+ if (data[4] == 2)
+ DoBalloonSoundEffect(data[0]);
+
+ MapGridSetMetatileIdAt(data[1], data[2], data[0] + data[4]);
+ CurrentMapDrawMetatileAt(data[1], data[2]);
+
+ if (data[4] == 3)
+ DestroyTask(taskId);
+ else
+ data[4]++;
+ }
+}
+
+void DoBalloonSoundEffect(s16 metatileId)
+{
+ switch (metatileId)
+ {
+ case 824:
+ PlaySE(SE_FUUSEN1);
+ break;
+ case 828:
+ PlaySE(SE_FUUSEN2);
+ break;
+ case 832:
+ PlaySE(SE_FUUSEN3);
+ break;
+ case 552:
+ PlaySE(SE_TOY_DANGO);
+ break;
+ }
+}
+
+bool8 FldEff_NopA6FC(void)
+{
+ return FALSE;
+}
+
+bool8 FldEff_NopA700(void)
+{
+ return FALSE;
+}
+
+void DoSecretBaseBreakableDoorEffect(s16 x, s16 y)
+{
+ PlaySE(SE_TOY_KABE);
+ MapGridSetMetatileIdAt(x, y, 630);
+ MapGridSetMetatileIdAt(x, y - 1, 622);
+ CurrentMapDrawMetatileAt(x, y);
+ CurrentMapDrawMetatileAt(x, y - 1);
+}
+
+void Task_ShatterSecretBaseBreakableDoor(u8 taskId)
+{
+ if (gTasks[taskId].data[0] == 7)
+ {
+ DoSecretBaseBreakableDoorEffect(gTasks[taskId].data[1], gTasks[taskId].data[2]);
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+}
+
+void ShatterSecretBaseBreakableDoor(s16 x, s16 y)
+{
+ u8 dir = GetPlayerFacingDirection();
+
+ if (dir == DIR_SOUTH)
+ {
+ DoSecretBaseBreakableDoorEffect(x, y);
+ }
+ else if (dir == DIR_NORTH)
+ {
+ u8 taskId = CreateTask(Task_ShatterSecretBaseBreakableDoor, 5);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = x;
+ gTasks[taskId].data[2] = y;
+ }
+}
+
+#define tMetatileID data[0]
+void Task_SecretBaseMusicNoteMatSound(u8 taskId)
+{
+ if (gTasks[taskId].data[1] == 7)
+ {
+ switch (gTasks[taskId].tMetatileID)
+ {
+ case 632:
+ PlaySE(SE_TOY_C);
+ break;
+ case 633:
+ PlaySE(SE_TOY_D);
+ break;
+ case 634:
+ PlaySE(SE_TOY_E);
+ break;
+ case 635:
+ PlaySE(SE_TOY_F);
+ break;
+ case 636:
+ PlaySE(SE_TOY_G);
+ break;
+ case 637:
+ PlaySE(SE_TOY_A);
+ break;
+ case 638:
+ PlaySE(SE_TOY_B);
+ break;
+ case 691:
+ PlaySE(SE_TOY_C1);
+ break;
+ }
+
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].data[1]++;
+ }
+}
+
+void PlaySecretBaseMusicNoteMatSound(s16 metatileId)
+{
+ u8 taskId = CreateTask(Task_SecretBaseMusicNoteMatSound, 5);
+
+ gTasks[taskId].tMetatileID = metatileId;
+ gTasks[taskId].data[1] = 0;
+}
+#undef tMetatileID
+
+void SpriteCB_GlitterMatSparkle(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+
+ if (sprite->data[0] == 8)
+ PlaySE(SE_W215);
+
+ if (sprite->data[0] >= 32)
+ DestroySprite(sprite);
+}
+
+void DoSecretBaseGlitterMatSparkle(void)
+{
+ s16 x = gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.x;
+ s16 y = gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.y;
+ u8 spriteId;
+
+ sub_80930E0(&x, &y, 8, 4);
+
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].oam.paletteNum = 5;
+ gSprites[spriteId].callback = SpriteCB_GlitterMatSparkle;
+ gSprites[spriteId].data[0] = 0;
+ }
+}
+
+bool8 FldEff_SandPillar(void)
+{
+ s16 x, y;
+
+ ScriptContext2_Enable();
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+
+ gFieldEffectArguments[5] = x;
+ gFieldEffectArguments[6] = y;
+
+ switch (GetPlayerFacingDirection())
+ {
+ case DIR_SOUTH:
+ CreateSprite(&gUnknown_0858E68C,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 8,
+ gSprites[gPlayerAvatar.spriteId].oam.y + 32,
+ 0);
+
+ break;
+
+ case DIR_NORTH:
+ CreateSprite(&gUnknown_0858E68C,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 8,
+ gSprites[gPlayerAvatar.spriteId].oam.y,
+ 148);
+
+ break;
+
+ case DIR_WEST:
+ CreateSprite(&gUnknown_0858E68C,
+ gSprites[gPlayerAvatar.spriteId].oam.x - 8,
+ gSprites[gPlayerAvatar.spriteId].oam.y + 16,
+ 148);
+
+ break;
+
+ case DIR_EAST:
+ CreateSprite(&gUnknown_0858E68C,
+ gSprites[gPlayerAvatar.spriteId].oam.x + 24,
+ gSprites[gPlayerAvatar.spriteId].oam.y + 16,
+ 148);
+
+ break;
+ }
+
+ return FALSE;
+}
+
+void SpriteCB_SandPillar_0(struct Sprite *sprite)
+{
+ PlaySE(SE_W088);
+
+ if (MapGridGetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1) == 646)
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 3586);
+ else
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1, 644);
+
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 522);
+ CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6] - 1);
+ CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
+
+ sprite->data[0] = 0;
+ sprite->callback = SpriteCB_SandPillar_1;
+}
+
+void SpriteCB_SandPillar_1(struct Sprite *sprite)
+{
+ if (sprite->data[0] < 18)
+ {
+ sprite->data[0]++;
+ }
+ else
+ {
+ MapGridSetMetatileIdAt(gFieldEffectArguments[5], gFieldEffectArguments[6], 3724);
+ CurrentMapDrawMetatileAt(gFieldEffectArguments[5], gFieldEffectArguments[6]);
+ sprite->data[0] = 0;
+ sprite->callback = SpriteCB_SandPillar_2;
+ }
+}
+
+void SpriteCB_SandPillar_2(struct Sprite *sprite)
+{
+ FieldEffectStop(sprite, FLDEFF_SAND_PILLAR);
+ EnableBothScriptContexts();
+}
+
+void GetShieldToyTVDecorationInfo(void)
+{
+ s16 x, y;
+ s32 metatileId;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+
+ metatileId = MapGridGetMetatileIdAt(x, y);
+
+ switch (metatileId)
+ {
+ case 822:
+ ConvertIntToDecimalStringN(gStringVar1, 100, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gStringVar2, gText_Gold);
+
+ gSpecialVar_Result = 0;
+
+ if (!VarGet(VAR_CURRENT_SECRET_BASE))
+ return;
+
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x10);
+ break;
+ case 734:
+ ConvertIntToDecimalStringN(gStringVar1, 50, STR_CONV_MODE_LEFT_ALIGN, 2);
+ StringCopy(gStringVar2, gText_Silver);
+
+ gSpecialVar_Result = 0;
+
+ if (!VarGet(VAR_CURRENT_SECRET_BASE))
+ return;
+
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x20);
+ break;
+ case 756:
+ gSpecialVar_Result = 1;
+
+ if (!VarGet(VAR_CURRENT_SECRET_BASE))
+ return;
+
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x80);
+ break;
+ case 757:
+ gSpecialVar_Result = 2;
+
+ if (!VarGet(VAR_CURRENT_SECRET_BASE))
+ return;
+
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x80);
+ break;
+ case 758:
+ gSpecialVar_Result = 3;
+
+ if (!VarGet(VAR_CURRENT_SECRET_BASE))
+ return;
+
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x80);
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+bool8 sub_80FADE4(u16 arg0, u8 arg1)
+{
+ if (CurrentMapIsSecretBase())
+ {
+ if (arg1 == 0)
+ {
+ if ((u16)(arg0 + 0xfffffd7b) <= 1 || (arg0 == 0x237))
+ return TRUE;
+ }
+ else
+ {
+ if (arg0 == 0x28d || arg0 == 0x23f)
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+#else
+NAKED
+bool8 sub_80FADE4(u16 arg0, u8 arg1)
+{
+ asm_unified("\tpush {r4-r6,lr}\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tadds r6, r4, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r5, r1, 24\n"
+ "\tbl CurrentMapIsSecretBase\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080FAE28\n"
+ "\tcmp r5, 0\n"
+ "\tbne _080FAE1C\n"
+ "\tldr r1, =0xfffffd7b\n"
+ "\tadds r0, r4, r1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x1\n"
+ "\tbls _080FAE10\n"
+ "\tldr r0, =0x00000237\n"
+ "\tcmp r4, r0\n"
+ "\tbne _080FAE28\n"
+ "_080FAE10:\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080FAE2A\n"
+ "\t.pool\n"
+ "_080FAE1C:\n"
+ "\tldr r0, =0x0000028d\n"
+ "\tcmp r4, r0\n"
+ "\tbeq _080FAE10\n"
+ "\tldr r0, =0x0000023f\n"
+ "\tcmp r6, r0\n"
+ "\tbeq _080FAE10\n"
+ "_080FAE28:\n"
+ "\tmovs r0, 0\n"
+ "_080FAE2A:\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.pool");
+}
+#endif
+
+void Task_FieldPoisonEffect(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (data[0])
+ {
+ case 0:
+ data[1] += 2;
+ if (data[1] > 8)
+ data[0]++;
+ break;
+ case 1:
+ data[1] -= 2;
+ if (data[1] == 0)
+ data[0]++;
+ break;
+ case 2:
+ DestroyTask(taskId);
+ return;
+ }
+ SetGpuReg(REG_OFFSET_MOSAIC, (data[1] << 4) | data[1]);
+}
+
+void FldEffPoison_Start(void)
+{
+ PlaySE(SE_DOKU);
+ CreateTask(Task_FieldPoisonEffect, 80);
+}
+
+bool32 FldEffPoison_IsActive(void)
+{
+ return FuncIsActiveTask(Task_FieldPoisonEffect);
+}
+
+void Task_WateringBerryTreeAnim_0(u8 taskId)
+{
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_1;
+}
+
+void Task_WateringBerryTreeAnim_1(u8 taskId)
+{
+ struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
+
+ if (!EventObjectIsMovementOverridden(playerEventObj)
+ || EventObjectClearHeldMovementIfFinished(playerEventObj))
+ {
+ sub_808C228(GetPlayerFacingDirection());
+ EventObjectSetHeldMovement(playerEventObj, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection()));
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_2;
+ }
+}
+
+void Task_WateringBerryTreeAnim_2(u8 taskId)
+{
+ struct EventObject *playerEventObj = &gEventObjects[gPlayerAvatar.eventObjectId];
+
+ if (EventObjectClearHeldMovementIfFinished(playerEventObj))
+ {
+ s16 value = gTasks[taskId].data[1]++;
+
+ if (value < 10)
+ EventObjectSetHeldMovement(playerEventObj, GetWalkInPlaceNormalMovementAction(GetPlayerFacingDirection()));
+
+ else
+ gTasks[taskId].func = Task_WateringBerryTreeAnim_3;
+ }
+}
+
+void Task_WateringBerryTreeAnim_3(u8 taskId)
+{
+ SetPlayerAvatarTransitionFlags(sub_808BCD0());
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+void DoWateringBerryTreeAnim(void)
+{
+ CreateTask(Task_WateringBerryTreeAnim_0, 80);
+}
+
+u8 CreateRecordMixingSprite(void)
+{
+ u8 spriteId;
+
+ LoadSpritePalette(&gUnknown_0858E864);
+
+ spriteId = CreateSprite(&gUnknown_0858E880, 0, 0, 82);
+
+ if (spriteId == MAX_SPRITES)
+ {
+ return MAX_SPRITES;
+ }
+ else
+ {
+ struct Sprite *sprite = &gSprites[spriteId];
+ sub_8092FF0(16, 13, &sprite->pos1.x, &sprite->pos1.y);
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->pos1.x += 16;
+ sprite->pos1.y += 2;
+ }
+ return spriteId;
+}
+
+void DestroyRecordMixingSprite(void)
+{
+ int i;
+
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ if (gSprites[i].template == &gUnknown_0858E880)
+ {
+ FreeSpritePalette(&gSprites[i]);
+ DestroySprite(&gSprites[i]);
+ }
+ }
+}
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
index 471a83c61..adec780b3 100644
--- a/src/fldeff_softboiled.c
+++ b/src/fldeff_softboiled.c
@@ -103,7 +103,7 @@ static void sub_8161784(u8 taskId)
static void sub_81617B8(u8 taskId)
{
PlaySE(SE_SELECT);
- sub_81B1B5C(&gText_CantBeUsedOnPkmn, 0);
+ sub_81B1B5C(gText_CantBeUsedOnPkmn, 0);
schedule_bg_copy_tilemap_to_vram(2);
gTasks[taskId].func = sub_8161784;
}
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index 9951fe581..cd8fa400d 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -3,7 +3,8 @@
#include "event_scripts.h"
#include "field_effect.h"
#include "field_player_avatar.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
+#include "field_weather.h"
#include "palette.h"
#include "party_menu.h"
#include "rom6.h"
@@ -40,7 +41,7 @@ bool8 FldEff_SweetScent(void)
{
u8 taskId;
- sub_80AC3D0();
+ SetWeatherScreenFadeOut();
taskId = oei_task_add();
gTasks[taskId].data[8] = (u32)StartSweetScentFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)StartSweetScentFieldEffect;
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 528cce699..2fc58241a 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -48,8 +48,6 @@ struct FrontierBrainMon
u16 moves[4];
};
-extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
-
extern void sub_81B8558(void);
// This file's functions.
diff --git a/src/ghost.c b/src/ghost.c
index ce57df7e8..a755783b7 100644
--- a/src/ghost.c
+++ b/src/ghost.c
@@ -1,16 +1,46 @@
#include "global.h"
+#include "battle.h"
#include "battle_anim.h"
+#include "gpu_regs.h"
+#include "palette.h"
#include "constants/rgb.h"
+#include "scanline_effect.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "trig.h"
+#include "util.h"
-extern void sub_811160C(struct Sprite *);
-extern void sub_81117F4(struct Sprite *);
-extern void sub_81119E0(struct Sprite *);
-extern void sub_8111B9C(struct Sprite *);
-extern void sub_8112264(struct Sprite *);
-extern void sub_81129F0(struct Sprite *);
-extern void sub_8112B78(struct Sprite *);
-extern void sub_8112E9C(struct Sprite *);
-extern void sub_8112F60(struct Sprite *);
+static void sub_811160C(struct Sprite *);
+static void sub_8111674(struct Sprite *);
+static void sub_81116E8(struct Sprite *);
+static void sub_8111764(struct Sprite *);
+static void sub_81117F4(struct Sprite *);
+static void sub_8111814(struct Sprite *);
+static void sub_8111914(u8 taskId);
+static void sub_811196C(u8 taskId);
+static void InitAnimShadowBall(struct Sprite *);
+static void AnimShadowBallStep(struct Sprite *);
+static void sub_8111B9C(struct Sprite *);
+static void sub_8111BB4(struct Sprite *);
+static void sub_8111D78(u8 taskId);
+static void sub_8111E78(u8 taskId);
+static void sub_81120DC(u8 taskId);
+static void sub_8112170(u8 taskId);
+static void sub_8112264(struct Sprite *);
+static void sub_8112384(struct Sprite *);
+static void sub_81125E0(u8 taskId);
+static void sub_811280C(u8 taskId);
+static void sub_8112994(u8 taskId);
+static void sub_81129F0(struct Sprite *);
+static void sub_8112A4C(struct Sprite *);
+static void sub_8112ACC(struct Sprite *);
+static void sub_8112B44(struct Sprite *);
+static void sub_8112B78(struct Sprite *);
+static void sub_8112C4C(struct Sprite *);
+static void sub_8112D10(u8 taskId);
+static void sub_8112E9C(struct Sprite *);
+static void sub_8112F60(struct Sprite *);
+static void sub_8112FB8(struct Sprite *);
const union AffineAnimCmd gUnknown_08596CF8[] =
{
@@ -65,7 +95,7 @@ const struct SpriteTemplate gUnknown_08596D58 =
.anims = gDummySpriteAnimTable,
.images = NULL,
.affineAnims = gUnknown_08596D54,
- .callback = sub_81119E0,
+ .callback = InitAnimShadowBall,
};
const union AnimCmd gUnknown_08596D70[] =
@@ -184,3 +214,1114 @@ const struct SpriteTemplate gUnknown_08596E48 =
.affineAnims = gDummySpriteAffineAnimTable,
.callback = sub_8112F60,
};
+
+static void sub_811160C(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, 1);
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sub_80A6FD4(sprite);
+ sprite->callback = sub_8111674;
+ sprite->data[6] = 16;
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]);
+}
+
+static void sub_8111674(struct Sprite *sprite)
+{
+ s16 r0;
+ s16 r2;
+ sub_8111764(sprite);
+ if (AnimTranslateLinear(sprite))
+ {
+ sprite->callback = sub_81116E8;
+ return;
+ }
+
+ sprite->pos2.x += Sin(sprite->data[5], 10);
+ sprite->pos2.y += Cos(sprite->data[5], 15);
+ r2 = sprite->data[5];
+ sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
+ r0 = sprite->data[5];
+ if (r2 != 0 && r2 <= 196)
+ return;
+ if (r0 <= 0)
+ return;
+ PlaySE12WithPanning(SE_W109, gUnknown_02038440);
+}
+
+static void sub_81116E8(struct Sprite *sprite)
+{
+ s16 r2;
+ s16 r0;
+ sprite->data[0] = 1;
+ AnimTranslateLinear(sprite);
+ sprite->pos2.x += Sin(sprite->data[5], 10);
+ sprite->pos2.y += Cos(sprite->data[5], 15);
+
+ r2 = sprite->data[5];
+ sprite->data[5] = (sprite->data[5] + 5) & 0xFF;
+ r0 = sprite->data[5];
+
+ if (r2 == 0 || r2 > 196)
+ {
+ if (r0 > 0)
+ PlaySE(SE_W109);
+ }
+
+ if (sprite->data[6] == 0)
+ {
+ sprite->invisible = TRUE;
+ sprite->callback = sub_80A67F4;
+ }
+ else
+ sub_8111764(sprite);
+}
+
+static void sub_8111764(struct Sprite *sprite)
+{
+
+ s16 r0;
+ if (sprite->data[6] > 0xFF)
+ {
+ if (++sprite->data[6] == 0x10d)
+ sprite->data[6] = 0;
+ return;
+ }
+
+ r0 = sprite->data[7];
+ sprite->data[7]++;
+
+ if ((r0 & 0xFF) == 0)
+ {
+ sprite->data[7] &= 0xff00;
+ if ((sprite->data[7] & 0x100) != 0)
+ sprite->data[6]++;
+ else
+ sprite->data[6]--;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(sprite->data[6], 16 - sprite->data[6]));
+ if (sprite->data[6] == 0 || sprite->data[6] == 16)
+ sprite->data[7] ^= 0x100;
+ if (sprite->data[6] == 0)
+ sprite->data[6] = 0x100;
+ }
+}
+
+static void sub_81117F4(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->callback = sub_8111814;
+ sprite->callback(sprite);
+}
+
+static void sub_8111814(struct Sprite *sprite)
+{
+ u16 temp1;
+ sprite->pos2.x = Sin(sprite->data[0], 32);
+ sprite->pos2.y = Cos(sprite->data[0], 8);
+ temp1 = sprite->data[0] - 65;
+ if (temp1 <= 130)
+ sprite->oam.priority = 2;
+ else
+ sprite->oam.priority = 1;
+ sprite->data[0] = (sprite->data[0] + 19) & 0xFF;
+ sprite->data[2] += 80;
+ sprite->pos2.y += sprite->data[2] >> 8;
+ sprite->data[7] += 1;
+ if (sprite->data[7] == 61)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_811188C(u8 taskId)
+{
+ u8 spriteId;
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
+ spriteId = GetAnimBattlerSpriteId(0);
+ PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_BLEND);
+ SetSpriteRotScale(spriteId, 128, 128, 0);
+ gSprites[spriteId].invisible = FALSE;
+ gTasks[taskId].data[0] = 128;
+ gTasks[taskId].data[1] = *gBattleAnimArgs;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 16;
+ gTasks[taskId].func = sub_8111914;
+}
+
+static void sub_8111914(u8 taskId)
+{
+ gTasks[taskId].data[10] += 1;
+ if (gTasks[taskId].data[10] == 3)
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[2] += 1;
+ gTasks[taskId].data[3] -= 1;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[2], gTasks[taskId].data[3]));
+ if (gTasks[taskId].data[2] != 9)
+ return;
+
+ gTasks[taskId].func = sub_811196C;
+ }
+}
+
+static void sub_811196C(u8 taskId)
+{
+ u8 spriteId;
+ if (gTasks[taskId].data[1] > 0)
+ {
+ gTasks[taskId].data[1] -= 1;
+ return;
+ }
+
+ spriteId = GetAnimBattlerSpriteId(0);
+ gTasks[taskId].data[0] += 8;
+ if (gTasks[taskId].data[0] <= 0xFF)
+ {
+ SetSpriteRotScale(spriteId, gTasks[taskId].data[0], gTasks[taskId].data[0], 0);
+ }
+ else
+ {
+ ResetSpriteRotScale(spriteId);
+ DestroyAnimVisualTask(taskId);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ }
+}
+
+// Spins a sprite towards the target, pausing in the middle.
+// Used in Shadow Ball.
+// arg 0: duration step 1 (attacker -> center)
+// arg 1: duration step 2 (spin center)
+// arg 2: duration step 3 (center -> target)
+static void InitAnimShadowBall(struct Sprite *sprite)
+{
+ u16 r5, r6;
+ r5 = sprite->pos1.x;
+ r6 = sprite->pos1.y;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ sprite->data[0] = 0;
+ sprite->data[1] = gBattleAnimArgs[0];
+ sprite->data[2] = gBattleAnimArgs[1];
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sprite->data[6] = (((s16)r5 - sprite->pos1.x) << 4) / (gBattleAnimArgs[0] << 1);
+ sprite->data[7] = (((s16)r6 - sprite->pos1.y) << 4) / (gBattleAnimArgs[0] << 1);
+ sprite->callback = AnimShadowBallStep;
+}
+
+static void AnimShadowBallStep(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+ sprite->data[1] -= 1;
+ if (sprite->data[1] > 0)
+ break;
+ sprite->data[0] += 1;
+ break;
+ case 1:
+ sprite->data[2] -= 1;
+ if (sprite->data[2] > 0)
+ break;
+ sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[4] = sprite->pos1.x << 4;
+ sprite->data[5] = sprite->pos1.y << 4;
+ sprite->data[6] = ((sprite->data[1] - sprite->pos1.x) << 4) / sprite->data[3];
+ sprite->data[7] = ((sprite->data[2] - sprite->pos1.y) << 4) / sprite->data[3];
+ sprite->data[0] += 1;
+ break;
+ case 2:
+ sprite->data[4] += sprite->data[6];
+ sprite->data[5] += sprite->data[7];
+ sprite->pos1.x = sprite->data[4] >> 4;
+ sprite->pos1.y = sprite->data[5] >> 4;
+ sprite->data[3] -= 1;
+ if (sprite->data[3] > 0)
+ break;
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[0] += 1;
+ break;
+ case 3:
+ DestroySpriteAndMatrix(sprite);
+ break;
+ }
+}
+
+static void sub_8111B9C(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->callback = sub_8111BB4;
+}
+
+static void sub_8111BB4(struct Sprite *sprite) {
+
+ s8 r5 = FALSE;
+ bool8 r6 = FALSE;
+ if(sprite->animEnded)
+ {
+ if(!(sprite->invisible))
+ sprite->invisible=TRUE;
+ switch(sprite->data[0])
+ {
+ case 0:
+ if((sprite->data[1]) != 2)
+ break;
+ goto loc_08111C06;
+ case 1:
+ if((sprite->data[1]) == 4)
+ r5 = TRUE;
+ break;
+ default:
+ r6 = TRUE;
+ }
+ if(r5)
+ {
+ loc_08111C06:
+ sprite->invisible ^= 1;
+ sprite->data[2]++;
+ sprite->data[1] = 0;
+ if(sprite->data[2] == 5)
+ {
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ }
+ }
+ else if(r6)
+ DestroyAnimSprite(sprite);
+ else
+ sprite->data[1]++;
+ }
+}
+
+void sub_8111C50(u8 taskId)
+{
+ struct Task *task;
+
+ task = &gTasks[taskId];
+ task->data[0] = CloneBattlerSpriteWithBlend(1);
+ if (task->data[0] < 0)
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+ task->data[1] = 0;
+ task->data[2] = 15;
+ task->data[3] = 2;
+ task->data[4] = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3]));
+ gSprites[task->data[0]].data[0] = 80;
+ if (GetBattlerSide(gBattleAnimTarget) == 0)
+ {
+ gSprites[task->data[0]].data[1] = -144;
+ gSprites[task->data[0]].data[2] = 112;
+ }
+ else
+ {
+ gSprites[task->data[0]].data[1] = 144;
+ gSprites[task->data[0]].data[2] = -112;
+ }
+ gSprites[task->data[0]].data[3] = 0;
+ gSprites[task->data[0]].data[4] = 0;
+ StoreSpriteCallbackInData6(&gSprites[task->data[0]], SpriteCallbackDummy);
+ gSprites[task->data[0]].callback = AnimTranslateLinearSimple;
+ task->func = sub_8111D78;
+}
+
+static void sub_8111D78(u8 taskId)
+{
+ struct Task *task;
+
+ task = &gTasks[taskId];
+ switch (task->data[4])
+ {
+ case 0:
+ task->data[1] += 1;
+ task->data[5] = task->data[1] & 3;
+ if (task->data[5] == 1)
+ if (task->data[2] > 0)
+ task->data[2] -= 1;
+ if (task->data[5] == 3)
+ if (task->data[3] <= 15)
+ task->data[3] += 1;
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3]));
+ if (task->data[3] != 16 || task->data[2] != 0)
+ break;
+ if (task->data[1] <= 80)
+ break;
+ obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
+ task->data[4] = 1;
+ break;
+ case 1:
+ if (++task->data[6] <= 1)
+ break;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ task->data[4] += 1;
+ break;
+ case 2:
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+void sub_8111E50(u8 taskId)
+{
+ struct Task *task;
+
+ task = &gTasks[taskId];
+ task->data[15] = 0;
+ task->func = sub_8111E78;
+ task->func(taskId);
+}
+
+static void sub_8111E78(u8 taskId)
+{
+ s16 startLine;
+ struct Task *task = &gTasks[taskId];
+ u8 position = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
+
+ switch (task->data[15])
+ {
+ case 0:
+ task->data[14] = AllocSpritePalette(0x2771);
+ if (task->data[14] == 0xFF || task->data[14] == 0xF)
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ task->data[0] = CloneBattlerSpriteWithBlend(1);
+ if (task->data[0] < 0)
+ {
+ FreeSpritePaletteByTag(0x2771);
+ DestroyAnimVisualTask(taskId);
+ }
+ else
+ {
+ s16 mask2;
+ gSprites[task->data[0]].oam.paletteNum = task->data[14];
+ gSprites[task->data[0]].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[task->data[0]].oam.priority = 3;
+ gSprites[task->data[0]].invisible = (gBattleSpritesDataPtr->battlerData[gBattleAnimTarget].invisible);
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 16;
+ task->data[13] = GetAnimBattlerSpriteId(1);
+ task->data[4] = (gSprites[task->data[13]].oam.paletteNum + 16) * 16;
+ if (position == 1) {
+ u16 mask = DISPCNT_BG1_ON;
+ mask2 = mask;
+ }
+ else {
+ u16 mask = DISPCNT_BG2_ON;
+ mask2 = mask;
+ }
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, mask2);
+ task->data[15]++;
+ }
+ }
+ break;
+ case 1:
+ task->data[14] = (task->data[14] + 16) * 16;
+ CpuSet(&gPlttBufferUnfaded[task->data[4]], &gPlttBufferFaded[task->data[14]], 0x4000008);
+ BlendPalette(task->data[4], 16, 10, RGB(13, 0, 15));
+ task->data[15]++;
+ break;
+ case 2:
+ startLine = gSprites[task->data[13]].pos1.y + gSprites[task->data[13]].pos2.y - 32;
+ if (startLine < 0)
+ startLine = 0;
+
+ if (position == 1)
+ task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 4, 1);
+ else
+ task->data[10] = ScanlineEffect_InitWave(startLine, startLine + 64, 2, 6, 0, 8, 1);
+
+ task->data[15]++;
+ break;
+ case 3:
+ if (position == 1)
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG1));
+ else
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL | BLDCNT_TGT1_BG2));
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
+ task->data[15]++;
+ break;
+ case 4:
+ if (position == 1)
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
+ else
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+
+ task->func = sub_81120DC;
+ task->data[15]++;
+ break;
+ default:
+ task->data[15]++;
+ break;
+ }
+}
+
+static void sub_81120DC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ task->data[1]++;
+ task->data[5] = task->data[1] & 1;
+ if (task->data[5] == 0)
+ task->data[2] = gSineTable[task->data[1]] / 18;
+
+ if (task->data[5] == 1)
+ task->data[3] = 16 - (gSineTable[task->data[1]] / 18);
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3]));
+ if (task->data[1] == 128)
+ {
+ task->data[15] = 0;
+ task->func = sub_8112170;
+ task->func(taskId);
+ }
+}
+
+static void sub_8112170(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ u8 position = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget);
+
+ switch (task->data[15])
+ {
+ case 0:
+ gScanlineEffect.state = 3;
+ task->data[14] = GetAnimBattlerSpriteId(1);
+ if (position == 1)
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
+ else
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+ break;
+ case 1:
+ BlendPalette(task->data[4], 16, 0, RGB(13, 0, 15));
+ break;
+ case 2:
+ gSprites[task->data[14]].invisible = 1;
+ obj_delete_but_dont_free_vram(&gSprites[task->data[0]]);
+ FreeSpritePaletteByTag(0x2771);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ if (position == 1)
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON);
+ else
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON);
+
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+
+ task->data[15]++;
+}
+
+static void sub_8112264(struct Sprite *sprite)
+{
+ s16 battler1X, battler1Y;
+ s16 battler2X, battler2Y;
+ s16 yDiff;
+
+ if (gBattleAnimArgs[0] == 0)
+ {
+ battler1X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ battler1Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
+ battler2X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ battler2Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
+ }
+ else
+ {
+ battler1X = GetBattlerSpriteCoord(gBattleAnimTarget, 0);
+ battler1Y = GetBattlerSpriteCoord(gBattleAnimTarget, 1) + 28;
+ battler2X = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ battler2Y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1) + 28;
+ }
+
+ yDiff = battler2Y - battler1Y;
+ sprite->data[0] = battler1X * 16;
+ sprite->data[1] = battler1Y * 16;
+ sprite->data[2] = ((battler2X - battler1X) * 16) / gBattleAnimArgs[1];
+ sprite->data[3] = (yDiff * 16) / gBattleAnimArgs[1];
+ sprite->data[4] = gBattleAnimArgs[1];
+ sprite->data[5] = battler2X;
+ sprite->data[6] = battler2Y;
+ sprite->data[7] = sprite->data[4] / 2;
+ sprite->oam.priority = 2;
+ sprite->pos1.x = battler1X;
+ sprite->pos1.y = battler1Y;
+ sprite->callback = sub_8112384;
+ sprite->invisible = 1;
+}
+
+static void sub_8112384(struct Sprite *sprite)
+{
+ if (sprite->data[4])
+ {
+ sprite->data[0] += sprite->data[2];
+ sprite->data[1] += sprite->data[3];
+ sprite->pos1.x = sprite->data[0] >> 4;
+ sprite->pos1.y = sprite->data[1] >> 4;
+ if (--sprite->data[4] == 0)
+ sprite->data[0] = 0;
+ }
+}
+
+void sub_81123C4(u8 taskId)
+{
+ struct Task *task;
+ s16 battler;
+ u8 spriteId;
+ s16 baseX, baseY;
+ s16 x, y;
+
+ task = &gTasks[taskId];
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
+ task->data[5] = 0;
+ task->data[6] = 0;
+ task->data[7] = 0;
+ task->data[8] = 0;
+ task->data[9] = 16;
+ task->data[10] = gBattleAnimArgs[0];
+
+ baseX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ baseY = sub_80A861C(gBattleAnimAttacker, 3);
+ if (!IsContest())
+ {
+ for (battler = 0; battler < 4; battler++)
+ {
+ if (battler != gBattleAnimAttacker
+ && battler != (gBattleAnimAttacker ^ 2)
+ && IsBattlerSpriteVisible(battler))
+ {
+ spriteId = CreateSprite(&gUnknown_08596DB8, baseX, baseY, 55);
+ if (spriteId != MAX_SPRITES)
+ {
+ x = GetBattlerSpriteCoord(battler, 2);
+ y = sub_80A861C(battler, 3);
+ gSprites[spriteId].data[0] = baseX << 4;
+ gSprites[spriteId].data[1] = baseY << 4;
+ gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[4] = gBattleAnimArgs[1];
+ gSprites[spriteId].data[5] = x;
+ gSprites[spriteId].data[6] = y;
+ gSprites[spriteId].callback = sub_8112384;
+
+ task->data[task->data[12] + 13] = spriteId;
+ task->data[12]++;
+ }
+ }
+ }
+ }
+ else
+ {
+ spriteId = CreateSprite(&gUnknown_08596DB8, baseX, baseY, 55);
+ if (spriteId != MAX_SPRITES)
+ {
+ x = 48;
+ y = 40;
+ gSprites[spriteId].data[0] = baseX << 4;
+ gSprites[spriteId].data[1] = baseY << 4;
+ gSprites[spriteId].data[2] = ((x - baseX) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[3] = ((y - baseY) << 4) / gBattleAnimArgs[1];
+ gSprites[spriteId].data[4] = gBattleAnimArgs[1];
+ gSprites[spriteId].data[5] = x;
+ gSprites[spriteId].data[6] = y;
+ gSprites[spriteId].callback = sub_8112384;
+
+ task->data[13] = spriteId;
+ task->data[12] = 1;
+ }
+ }
+
+ task->func = sub_81125E0;
+}
+
+static void sub_81125E0(u8 taskId)
+{
+ u16 i;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (task->data[6] == 0)
+ {
+ if (++task->data[5] > 1)
+ {
+ task->data[5] = 0;
+ task->data[7]++;
+ if (task->data[7] & 1)
+ {
+ if (task->data[8] < 16)
+ task->data[8]++;
+ }
+ else
+ {
+ if (task->data[9])
+ task->data[9]--;
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[8], task->data[9]));
+ if (task->data[7] >= 24)
+ {
+ task->data[7] = 0;
+ task->data[6] = 1;
+ }
+ }
+ }
+
+ if (task->data[10])
+ task->data[10]--;
+ else if (task->data[6])
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[5] > 1)
+ {
+ task->data[5] = 0;
+ task->data[7]++;
+ if (task->data[7] & 1)
+ {
+ if (task->data[8])
+ task->data[8]--;
+ }
+ else
+ {
+ if (task->data[9] < 16)
+ task->data[9]++;
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[8], task->data[9]));
+ if (task->data[8] == 0 && task->data[9] == 16)
+ {
+ for (i = 0; i < task->data[12]; i++)
+ DestroySprite(&gSprites[task->data[i + 13]]);
+
+ task->data[0]++;
+ }
+ }
+ break;
+ case 2:
+ if (++task->data[5] > 0)
+ task->data[0]++;
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8112758(u8 taskId)
+{
+ s16 startX, startY;
+ s16 leftDistance, topDistance, bottomDistance, rightDistance;
+
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, ((WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR) |
+ (WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR)));
+ SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ) |
+ (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR)));
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_TGT1_BG3 | BLDCNT_EFFECT_DARKEN));
+ SetGpuReg(REG_OFFSET_BLDY, 0x10);
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER || IsContest())
+ startX = 40;
+ else
+ startX = 200;
+
+ gBattle_WIN0H = (startX << 8) | startX;
+ startY = 40;
+ gBattle_WIN0V = (startY << 8) | startY;
+
+ leftDistance = startX;
+ rightDistance = 240 - startX;
+ topDistance = startY;
+ bottomDistance = 72;
+ gTasks[taskId].data[1] = leftDistance;
+ gTasks[taskId].data[2] = rightDistance;
+ gTasks[taskId].data[3] = topDistance;
+ gTasks[taskId].data[4] = bottomDistance;
+ gTasks[taskId].data[5] = startX;
+ gTasks[taskId].data[6] = startY;
+ gTasks[taskId].func = sub_811280C;
+}
+
+static void sub_811280C(u8 taskId)
+{
+ s16 step;
+ s16 leftDistance, rightDistance, topDistance, bottomDistance;
+ s16 startX, startY;
+ u16 left, right, top, bottom;
+ u16 selectedPalettes;
+
+ step = gTasks[taskId].data[0];
+ gTasks[taskId].data[0]++;
+ leftDistance = gTasks[taskId].data[1];
+ rightDistance = gTasks[taskId].data[2];
+ topDistance = gTasks[taskId].data[3];
+ bottomDistance = gTasks[taskId].data[4];
+ startX = gTasks[taskId].data[5];
+ startY = gTasks[taskId].data[6];
+
+ if (step < 16)
+ {
+ left = startX - (leftDistance * 0.0625) * step;
+ right = startX + (rightDistance * 0.0625) * step;
+ top = startY - (topDistance * 0.0625) * step;
+ bottom = startY + (bottomDistance * 0.0625) * step;
+ }
+ else
+ {
+ left = 0;
+ right = 240;
+ top = 0;
+ bottom = 112;
+ selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0);
+ BeginNormalPaletteFade(selectedPalettes, 0, 16, 16, RGB(0, 0, 0));
+ gTasks[taskId].func = sub_8112994;
+ }
+
+ gBattle_WIN0H = (left << 8) | right;
+ gBattle_WIN0V = (top << 8) | bottom;
+}
+
+static void sub_8112994(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ SetGpuReg(REG_OFFSET_WININ, ((WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR) |
+ (WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR)));
+ SetGpuReg(REG_OFFSET_WINOUT, ((WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR) |
+ (WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR)));
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_81129F0(struct Sprite *sprite)
+{
+ s16 xDelta;
+ s16 xDelta2;
+
+ InitSpritePosToAnimAttacker(sprite, 1);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ xDelta = 24;
+ xDelta2 = -2;
+ sprite->oam.matrixNum = 8;
+ }
+ else
+ {
+ xDelta = -24;
+ xDelta2 = 2;
+ }
+
+ sprite->pos1.x += xDelta;
+ sprite->data[1] = xDelta2;
+ sprite->data[0] = 60;
+ sprite->callback = sub_8112A4C;
+}
+
+static void sub_8112A4C(struct Sprite *sprite)
+{
+ u16 var0;
+
+ if (sprite->data[0] > 0)
+ {
+ sprite->data[0]--;
+ }
+ else
+ {
+ sprite->pos2.x += sprite->data[1];
+ var0 = sprite->pos2.x + 7;
+ if (var0 > 14)
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos2.x = 0;
+ sprite->oam.tileNum += 8;
+ if (++sprite->data[2] == 3)
+ {
+ sprite->data[0] = 30;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, sub_8112ACC);
+ }
+ else
+ {
+ sprite->data[0] = 40;
+ }
+ }
+ }
+}
+
+static void sub_8112ACC(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0));
+ sprite->data[0]++;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ }
+ else if (sprite->data[1] < 2)
+ {
+ sprite->data[1]++;
+ }
+ else
+ {
+ sprite->data[1] = 0;
+ sprite->data[2]++;
+ SetGpuReg(REG_OFFSET_BLDALPHA, (16 - sprite->data[2]) | (sprite->data[2] << 8));
+ if (sprite->data[2] == 16)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_8112B44;
+ }
+ }
+}
+
+static void sub_8112B44(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ gBattle_WIN0H = 0;
+ gBattle_WIN0V = 0;
+ DestroyAnimSprite(sprite);
+}
+
+static void sub_8112B78(struct Sprite *sprite)
+{
+ u16 coeffB;
+ u16 coeffA;
+
+ sprite->pos2.x = Sin(sprite->data[0], 12);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ sprite->pos2.x = -sprite->pos2.x;
+
+ sprite->data[0] = (sprite->data[0] + 6) & 0xFF;
+ sprite->data[1] += 0x100;
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+
+ sprite->data[7]++;
+ if (sprite->data[7] == 1)
+ {
+ sprite->data[6] = 0x050B;
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, sprite->data[6]);
+ }
+ else if (sprite->data[7] > 30)
+ {
+ sprite->data[2]++;
+ coeffB = sprite->data[6] >> 8;
+ coeffA = sprite->data[6] & 0xFF;
+
+ if (++coeffB > 16)
+ coeffB = 16;
+ if (--(s16)coeffA < 0)
+ coeffA = 0;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(coeffA, coeffB));
+ sprite->data[6] = BLDALPHA_BLEND(coeffA, coeffB);
+ if (coeffB == 16 && coeffA == 0)
+ {
+ sprite->invisible = 1;
+ sprite->callback = sub_8112C4C;
+ }
+ }
+}
+
+static void sub_8112C4C(struct Sprite *sprite)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8112C6C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0] = 0;
+ task->data[1] = 16;
+ task->data[9] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[10] = GetBattlerYCoordWithElevation(gBattleAnimAttacker);
+ task->data[11] = (sub_80A861C(gBattleAnimAttacker, 1) / 2) + 8;
+ task->data[7] = 0;
+ task->data[5] = GetBattlerSpriteBGPriority(gBattleAnimAttacker);
+ task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 2;
+ task->data[3] = 0;
+ task->data[4] = 16;
+ SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL));
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0x10));
+ task->data[8] = 0;
+ task->func = sub_8112D10;
+}
+
+static void sub_8112D10(u8 taskId)
+{
+ u16 i;
+ u8 spriteId;
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ for (i = 0; i < 6; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08596E30, task->data[9], task->data[10], task->data[6]);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = taskId;
+ gSprites[spriteId].data[1] = GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER;
+
+ gSprites[spriteId].data[2] = (i * 42) & 0xFF;
+ gSprites[spriteId].data[3] = task->data[11];
+ gSprites[spriteId].data[5] = i * 6;
+ task->data[7]++;
+ }
+ }
+
+ task->data[0]++;
+ break;
+ case 1:
+ if (++task->data[1] & 1)
+ {
+ if (task->data[3] < 14)
+ task->data[3]++;
+ }
+ else
+ {
+ if (task->data[4] > 4)
+ task->data[4]--;
+ }
+
+ if (task->data[3] == 14 && task->data[4] == 4)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
+ break;
+ case 2:
+ if (++task->data[1] > 30)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ if (++task->data[1] & 1)
+ {
+ if (task->data[3] > 0)
+ task->data[3]--;
+ }
+ else
+ {
+ if (task->data[4] < 16)
+ task->data[4]++;
+ }
+
+ if (task->data[3] == 0 && task->data[4] == 16)
+ {
+ task->data[8] = 1;
+ task->data[0]++;
+ }
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4]));
+ break;
+ case 4:
+ if (task->data[7] == 0)
+ task->data[0]++;
+ break;
+ case 5:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+static void sub_8112E9C(struct Sprite *sprite)
+{
+ u16 index;
+
+ if (sprite->data[1] == 0)
+ sprite->data[2] += 2;
+ else
+ sprite->data[2] -= 2;
+
+ sprite->data[2] &= 0xFF;
+ sprite->pos2.x = Sin(sprite->data[2], sprite->data[3]);
+
+ index = sprite->data[2] - 65;
+ if (index < 127)
+ sprite->oam.priority = gTasks[sprite->data[0]].data[5] + 1;
+ else
+ sprite->oam.priority = gTasks[sprite->data[0]].data[5];
+
+ sprite->data[5]++;
+ sprite->data[6] = (sprite->data[5] * 8) & 0xFF;
+ sprite->pos2.y = Sin(sprite->data[6], 7);
+ if (gTasks[sprite->data[0]].data[8])
+ {
+ gTasks[sprite->data[0]].data[7]--;
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_8112F60(struct Sprite *sprite)
+{
+ sprite->invisible = 1;
+ sprite->data[5] = gBattlerSpriteIds[gBattleAnimAttacker];
+ sprite->data[0] = 128;
+ sprite->data[1] = 10;
+ sprite->data[2] = gBattleAnimArgs[0];
+ sprite->data[3] = gBattleAnimArgs[1];
+ sprite->callback = sub_8112FB8;
+
+ gSprites[sprite->data[5]].pos1.y += 8;
+}
+
+static void sub_8112FB8(struct Sprite *sprite)
+{
+ if (sprite->data[3])
+ {
+ sprite->data[3]--;
+ gSprites[sprite->data[5]].pos2.x = Sin(sprite->data[0], sprite->data[1]);
+ gSprites[sprite->data[5]].pos2.y = Cos(sprite->data[0], sprite->data[1]);
+ sprite->data[0] += sprite->data[2];
+ if (sprite->data[0] > 255)
+ sprite->data[0] -= 256;
+ }
+ else
+ {
+ gSprites[sprite->data[5]].pos2.x = 0;
+ gSprites[sprite->data[5]].pos2.y = 0;
+ gSprites[sprite->data[5]].pos1.y -= 8;
+ sprite->callback = DestroySpriteAndMatrix;
+ }
+}
diff --git a/src/graphics.c b/src/graphics.c
index b2de074bc..c0deb2883 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -897,9 +897,9 @@ const u32 gBattleStatMask6_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat6
const u32 gBattleStatMask7_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat7.gbapal.lz");
const u32 gBattleStatMask8_Pal[] = INCBIN_U32("graphics/battle_anims/masks/stat8.gbapal.lz");
-const u32 gUnknown_08C2DC68[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.4bpp.lz");
-const u32 gUnknown_08C2DDA4[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.gbapal.lz");
-const u32 gUnknown_08C2DDC4[] = INCBIN_U32("graphics/battle_anims/masks/cure_bubbles.bin.lz");
+const u8 gUnknown_08C2DC68[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.4bpp.lz");
+const u16 gUnknown_08C2DDA4[] = INCBIN_U16("graphics/battle_anims/masks/cure_bubbles.gbapal.lz");
+const u8 gUnknown_08C2DDC4[] = INCBIN_U8("graphics/battle_anims/masks/cure_bubbles.bin.lz");
const u32 gBattleAnimSpritePalette_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.gbapal.lz");
const u32 gBattleAnimSpriteSheet_245[] = INCBIN_U32("graphics/battle_anims/sprites/245.4bpp.lz");
diff --git a/src/ground.c b/src/ground.c
index 6cb7b8557..807205ad8 100644
--- a/src/ground.c
+++ b/src/ground.c
@@ -183,7 +183,7 @@ static void AnimBonemerangProjectileEnd(struct Sprite *sprite)
// arg 4: duration
void AnimBoneHitProjectile(struct Sprite *sprite)
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
gBattleAnimArgs[2] = -gBattleAnimArgs[2];
@@ -205,7 +205,7 @@ void AnimDirtScatter(struct Sprite *sprite)
u8 targetXPos, targetYPos;
s16 xOffset, yOffset;
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
targetXPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 2);
targetYPos = GetBattlerSpriteCoord2(gBattleAnimTarget, 3);
@@ -221,7 +221,7 @@ void AnimDirtScatter(struct Sprite *sprite)
sprite->data[2] = targetXPos + xOffset;
sprite->data[4] = targetYPos + yOffset;
sprite->callback = StartAnimLinearTranslation;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
// Moves a particle of dirt in the Mud Sport animation.
@@ -306,7 +306,7 @@ static void sub_8114CFC(u8 taskId)
{
case 0:
task->data[10] = GetAnimBattlerSpriteId(0);
- task->data[11] = sub_80A8364(gBattleAnimAttacker);
+ task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
if (task->data[11] == 1)
{
task->data[12] = gBattle_BG1_X;
@@ -375,7 +375,7 @@ static void sub_8114EB4(u8 taskId)
gSprites[spriteId].pos2.x = 0;
gSprites[spriteId].pos2.y = 0;
- if (sub_80A8364(gBattleAnimAttacker) == 1)
+ if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1)
gBattle_BG1_Y = 0;
else
gBattle_BG2_Y = 0;
@@ -422,7 +422,7 @@ static void sub_8114FD8(u8 taskId)
{
case 0:
task->data[10] = GetAnimBattlerSpriteId(0);
- task->data[11] = sub_80A8364(gBattleAnimAttacker);
+ task->data[11] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker);
if (task->data[11] == 1)
task->data[12] = gBattle_BG1_X;
else
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index 27a3a29f9..fc60d2b08 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -497,7 +497,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++)
{
- if (lastSavedTeam->mon[0].species == 0)
+ if (lastSavedTeam->mon[0].species == SPECIES_NONE)
break;
}
if (i >= HALL_OF_FAME_MAX_TEAMS)
diff --git a/src/item.c b/src/item.c
index 6a1f1955a..71c2dc0f7 100644
--- a/src/item.c
+++ b/src/item.c
@@ -543,7 +543,7 @@ bool8 RemoveBagItem(u16 itemId, u16 count)
VarSet(VAR_0x40ED, itemId);
}
- var = sub_81ABB2C(pocket);
+ var = GetItemListPosition(pocket);
if (itemPocket->capacity > var
&& itemPocket->itemSlots[var].itemId == itemId)
{
diff --git a/src/item_menu.c b/src/item_menu.c
index abae65a33..a220f02ef 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -57,7 +57,7 @@ bool8 load_bag_menu_graphics(void);
void setup_bag_menu_textboxes(void);
void allocate_bag_item_list_buffers(void);
void load_bag_item_list_buffers(u8);
-void bag_menu_print_pocket_names(u8*, u8*);
+void bag_menu_print_pocket_names(const u8*, const u8*);
void bag_menu_copy_pocket_name_to_window(u32);
void bag_menu_draw_pocket_indicator_square(u8, u8);
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void);
@@ -69,7 +69,6 @@ void Task_BagMenu(u8);
void get_name(s8*, u16);
u16 ItemIdToBattleMoveId(u16);
u16 BagGetItemIdByPocketPosition(u8, u16);
-void AddBagItemIconSprite(u16, u8);
void bag_menu_print_description_box_text(int);
void bag_menu_print_cursor(u8, u8);
void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
@@ -121,7 +120,7 @@ void bag_menu_leave_maybe_3(void);
void bag_menu_leave_maybe_2(void);
void bag_menu_leave_maybe(void);
void sub_81ABA6C(void);
-void sub_81ABAC4(void);
+static void SetPocketListPositions(void);
void sub_81ABAE0(void);
u8 sub_81AB1F0(u8);
void sub_81AC23C(u8);
@@ -151,7 +150,7 @@ void sub_81AD6FC(u8 taskId);
// .rodata
-const struct BgTemplate gUnknown_08613F90[3] =
+static const struct BgTemplate sBgTemplates_ItemMenu[3] =
{
{
.bg = 0,
@@ -182,7 +181,7 @@ const struct BgTemplate gUnknown_08613F90[3] =
},
};
-const struct ListMenuTemplate gUnknown_08613F9C =
+static const struct ListMenuTemplate sItemListMenu =
{
.items = NULL,
.moveCursorFunc = bag_menu_change_item_callback,
@@ -258,7 +257,8 @@ const struct ScrollArrowsTemplate gUnknown_08614094 = {SCROLL_ARROW_LEFT, 0x1C,
const u8 gUnknown_086140A4[] = INCBIN_U8("graphics/interface/select_button.4bpp");
-const u8 gUnknown_08614164[][3] = {
+static const u8 sFontColorTable[][3] = {
+// bgColor, textColor, shadowColor
{0, 1, 3},
{0, 1, 4},
{0, 3, 6},
@@ -268,7 +268,7 @@ const u8 gUnknown_08614164[][3] = {
const struct WindowTemplate gUnknown_08614174[] =
{
- {
+ { // Item names
.bg = 0,
.tilemapLeft = 14,
.tilemapTop = 2,
@@ -277,7 +277,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 1,
.baseBlock = 0x27,
},
- {
+ { // Description
.bg = 0,
.tilemapLeft = 0,
.tilemapTop = 13,
@@ -286,7 +286,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 1,
.baseBlock = 0x117,
},
- {
+ { // Pocket name
.bg = 0,
.tilemapLeft = 4,
.tilemapTop = 1,
@@ -295,7 +295,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 1,
.baseBlock = 0x1A1,
},
- {
+ { // TM/HM info icons
.bg = 0,
.tilemapLeft = 1,
.tilemapTop = 13,
@@ -304,7 +304,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 12,
.baseBlock = 0x16B,
},
- {
+ {// TM/HM info
.bg = 0,
.tilemapLeft = 7,
.tilemapTop = 13,
@@ -313,7 +313,7 @@ const struct WindowTemplate gUnknown_08614174[] =
.paletteNum = 12,
.baseBlock = 0x189,
},
- {
+ { // Field message box
.bg = 1,
.tilemapLeft = 2,
.tilemapTop = 15,
@@ -432,83 +432,81 @@ struct ListBuffer2 {
struct TempWallyStruct {
struct ItemSlot bagPocket_Items[30];
struct ItemSlot bagPocket_PokeBalls[16];
- u16 cursorPosition[5];
- u16 scrollPosition[5];
+ u16 cursorPosition[POCKETS_COUNT];
+ u16 scrollPosition[POCKETS_COUNT];
u8 filler[0x2];
u16 pocket;
};
EWRAM_DATA struct UnkBagStruct *gUnknown_0203CE54 = 0;
EWRAM_DATA struct BagStruct gUnknown_0203CE58 = {0};
-EWRAM_DATA struct ListBuffer1 *gUnknown_0203CE74 = 0;
-EWRAM_DATA struct ListBuffer2 *gUnknown_0203CE78 = 0;
+static EWRAM_DATA struct ListBuffer1 *sListBuffer1 = 0;
+static EWRAM_DATA struct ListBuffer2 *sListBuffer2 = 0;
EWRAM_DATA u16 gSpecialVar_ItemId = 0;
-EWRAM_DATA struct TempWallyStruct *gUnknown_0203CE80 = 0;
+static EWRAM_DATA struct TempWallyStruct *gUnknown_0203CE80 = 0;
-extern u8 *gPocketNamesStringsTable[];
-extern struct ListMenuTemplate gUnknown_08613F9C;
+extern u8 *const gPocketNamesStringsTable[];
extern const u8 gMoveNames[][0xD];
extern u8* gReturnToXStringsTable[];
-extern u32 gUnknown_0203CE5E[];
extern const u8 EventScript_2736B3[];
extern const u16 gUnknown_0860F074[];
void ResetBagScrollPositions(void)
{
- gUnknown_0203CE58.pocket = 0;
+ gUnknown_0203CE58.pocket = ITEMS_POCKET;
memset(gUnknown_0203CE58.cursorPosition, 0, 10);
memset(gUnknown_0203CE58.scrollPosition, 0, 10);
}
void CB2_BagMenuFromStartMenu(void)
{
- GoToBagMenu(0, 5, CB2_ReturnToFieldWithOpenMenu);
+ GoToBagMenu(RETURN_LOCATION_FIELD, POCKETS_COUNT, CB2_ReturnToFieldWithOpenMenu);
}
void sub_81AABB0(void)
{
if (!InBattlePyramid())
- GoToBagMenu(1, 5, SetCB2ToReshowScreenAfterMenu2);
+ GoToBagMenu(RETURN_LOCATION_BATTLE, POCKETS_COUNT, SetCB2ToReshowScreenAfterMenu2);
else
sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2);
}
void CB2_ChooseBerry(void)
{
- GoToBagMenu(4, 3, CB2_ReturnToFieldContinueScript);
+ GoToBagMenu(RETURN_LOCATION_FIELD_2, BERRIES_POCKET, CB2_ReturnToFieldContinueScript);
}
void sub_81AABF0(void(*callback)(void))
{
- GoToBagMenu(5, 3, callback);
+ GoToBagMenu(RETURN_LOCATION_FIELD_3, BERRIES_POCKET, callback);
}
void CB2_GoToSellMenu(void)
{
- GoToBagMenu(3, 5, CB2_ExitSellMenu);
+ GoToBagMenu(RETURN_LOCATION_SHOP, POCKETS_COUNT, CB2_ExitSellMenu);
}
void sub_81AAC14(void)
{
- GoToBagMenu(6, 5, sub_816B31C);
+ GoToBagMenu(RETURN_LOCATION_PC, POCKETS_COUNT, sub_816B31C);
}
void sub_81AAC28(void)
{
- GoToBagMenu(9, 5, bag_menu_leave_maybe_3);
+ GoToBagMenu(RETURN_LOCATION_FIELD_6, POCKETS_COUNT, bag_menu_leave_maybe_3);
gSpecialVar_0x8005 = 0;
gSpecialVar_Result = 0;
}
void sub_81AAC50(void)
{
- GoToBagMenu(7, 5, bag_menu_leave_maybe_2);
+ GoToBagMenu(RETURN_LOCATION_FIELD_4, POCKETS_COUNT, bag_menu_leave_maybe_2);
gSpecialVar_Result = 0;
}
void sub_81AAC70(void)
{
- GoToBagMenu(8, 5, bag_menu_leave_maybe);
+ GoToBagMenu(RETURN_LOCATION_FIELD_5, POCKETS_COUNT, bag_menu_leave_maybe);
gSpecialVar_Result = 0;
}
@@ -522,21 +520,21 @@ void GoToBagMenu(u8 bagMenuType, u8 pocketId, void ( *postExitMenuMainCallback2)
}
else
{
- if (bagMenuType != 12)
+ if (bagMenuType != RETURN_LOCATION_UNCHANGED)
gUnknown_0203CE58.location = bagMenuType;
if (postExitMenuMainCallback2)
gUnknown_0203CE58.bagCallback = postExitMenuMainCallback2;
- if (pocketId <= 4)
+ if (pocketId < POCKETS_COUNT)
gUnknown_0203CE58.pocket = pocketId;
- temp = gUnknown_0203CE58.location - 4;
+ temp = gUnknown_0203CE58.location - (POCKETS_COUNT - 1);
if (temp <= 1)
gUnknown_0203CE54->unk81B = 1;
- gUnknown_0203CE54->unk0 = 0;
+ gUnknown_0203CE54->mainCallback2 = 0;
gUnknown_0203CE54->unk81A = 0xFF;
gUnknown_0203CE54->unk81E = -1;
gUnknown_0203CE54->unk81F = -1;
- memset(gUnknown_0203CE54->unk804, 0xFF, sizeof(gUnknown_0203CE54->unk804));
- memset(gUnknown_0203CE54->unk810, 0xFF, 10);
+ memset(gUnknown_0203CE54->spriteId, 0xFF, sizeof(gUnknown_0203CE54->spriteId));
+ memset(gUnknown_0203CE54->windowPointers, 0xFF, 10);
SetMainCallback2(CB2_Bag);
}
}
@@ -615,7 +613,7 @@ bool8 setup_bag_menu(void)
break;
case 10:
sub_81ABA6C();
- sub_81ABAC4();
+ SetPocketListPositions();
sub_81ABAE0();
gMain.state++;
break;
@@ -677,10 +675,10 @@ bool8 setup_bag_menu(void)
void bag_menu_init_bgs(void)
{
ResetVramOamAndBgCntRegs();
- memset(gUnknown_0203CE54->unk4, 0, 0x800);
+ memset(gUnknown_0203CE54->tilemapBuffer, 0, 0x800);
ResetBgsAndClearDma3BusyFlags(0);
- InitBgsFromTemplates(0, gUnknown_08613F90, 3);
- SetBgTilemapBuffer(2, gUnknown_0203CE54->unk4);
+ InitBgsFromTemplates(0, sBgTemplates_ItemMenu, 3);
+ SetBgTilemapBuffer(2, gUnknown_0203CE54->tilemapBuffer);
ResetAllBgsCoordinates();
schedule_bg_copy_tilemap_to_vram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
@@ -702,7 +700,7 @@ bool8 load_bag_menu_graphics(void)
case 1:
if (free_temp_tile_data_buffers_if_possible() != TRUE)
{
- LZDecompressWram(gUnknown_08D9A88C, gUnknown_0203CE54->unk4);
+ LZDecompressWram(gUnknown_08D9A88C, gUnknown_0203CE54->tilemapBuffer);
gUnknown_0203CE54->unk834++;
}
break;
@@ -744,8 +742,8 @@ u8 sub_81AB1F0(u8 a)
void allocate_bag_item_list_buffers(void)
{
- gUnknown_0203CE74 = Alloc(sizeof(struct ListBuffer1));
- gUnknown_0203CE78 = Alloc(sizeof(struct ListBuffer2));
+ sListBuffer1 = Alloc(sizeof(struct ListBuffer1));
+ sListBuffer2 = Alloc(sizeof(struct ListBuffer2));
}
void load_bag_item_list_buffers(u8 pocketId)
@@ -754,41 +752,41 @@ void load_bag_item_list_buffers(u8 pocketId)
struct BagPocket *pocket = &gBagPockets[pocketId];
struct ListMenuItem *subBuffer;
- if (!gUnknown_0203CE54->unk81B_2)
+ if (!gUnknown_0203CE54->hideCloseBagText)
{
- for (i = 0; i < gUnknown_0203CE54->unk829[pocketId] - 1; i++)
+ for (i = 0; i < gUnknown_0203CE54->numItemStacks[pocketId] - 1; i++)
{
- get_name(gUnknown_0203CE78->name[i], pocket->itemSlots[i].itemId);
- subBuffer = gUnknown_0203CE74->subBuffers;
- subBuffer[i].name = gUnknown_0203CE78->name[i];
+ get_name(sListBuffer2->name[i], pocket->itemSlots[i].itemId);
+ subBuffer = sListBuffer1->subBuffers;
+ subBuffer[i].name = sListBuffer2->name[i];
subBuffer[i].id = i;
}
- StringCopy(gUnknown_0203CE78->name[i], gText_CloseBag);
- subBuffer = gUnknown_0203CE74->subBuffers;
- subBuffer[i].name = gUnknown_0203CE78->name[i];
+ StringCopy(sListBuffer2->name[i], gText_CloseBag);
+ subBuffer = sListBuffer1->subBuffers;
+ subBuffer[i].name = sListBuffer2->name[i];
subBuffer[i].id = -2;
}
else
{
- for (i = 0; i < gUnknown_0203CE54->unk829[pocketId]; i++)
+ for (i = 0; i < gUnknown_0203CE54->numItemStacks[pocketId]; i++)
{
- get_name(gUnknown_0203CE78->name[i], pocket->itemSlots[i].itemId);
- subBuffer = gUnknown_0203CE74->subBuffers;
- subBuffer[i].name = gUnknown_0203CE78->name[i];
+ get_name(sListBuffer2->name[i], pocket->itemSlots[i].itemId);
+ subBuffer = sListBuffer1->subBuffers;
+ subBuffer[i].name = sListBuffer2->name[i];
subBuffer[i].id = i;
}
}
- gMultiuseListMenuTemplate = gUnknown_08613F9C;
- gMultiuseListMenuTemplate.totalItems = gUnknown_0203CE54->unk829[pocketId];
- gMultiuseListMenuTemplate.items = gUnknown_0203CE74->subBuffers;
- gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CE54->unk82E[pocketId];
+ gMultiuseListMenuTemplate = sItemListMenu;
+ gMultiuseListMenuTemplate.totalItems = gUnknown_0203CE54->numItemStacks[pocketId];
+ gMultiuseListMenuTemplate.items = sListBuffer1->subBuffers;
+ gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CE54->numShownItems[pocketId];
}
void get_name(s8 *dest, u16 itemId)
{
switch (gUnknown_0203CE58.pocket)
{
- case 2:
+ case TMHM_POCKET:
StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(itemId)]);
if (itemId >= ITEM_HM01)
{
@@ -801,7 +799,7 @@ void get_name(s8 *dest, u16 itemId)
StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2);
}
break;
- case 3:
+ case BERRIES_POCKET:
ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_CHERI_BERRY + 1, 2, 2);
CopyItemName(itemId, gStringVar2);
StringExpandPlaceholders(dest, gText_UnkF908Var1Clear7Var2);
@@ -851,14 +849,14 @@ void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a)
itemQuantity = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, item_index_in_pocket);
if (itemId >= ITEM_HM01 && itemId <= ITEM_HM08)
BlitBitmapToWindow(rboxId, gBagMenuHMIcon_Gfx, 8, a - 1, 16, 16);
- if (gUnknown_0203CE58.pocket == 3)
+ if (gUnknown_0203CE58.pocket == BERRIES_POCKET)
{
ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 3);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
offset = GetStringRightAlignXOffset(7, gStringVar4, 0x77);
bag_menu_print(rboxId, 7, gStringVar4, offset, a, 0, 0, -1, 0);
}
- else if (gUnknown_0203CE58.pocket != 4 && (unique = ItemId_GetImportance(itemId)) == FALSE)
+ else if (gUnknown_0203CE58.pocket != KEYITEMS_POCKET && (unique = ItemId_GetImportance(itemId)) == FALSE)
{
ConvertIntToDecimalStringN(gStringVar1, itemQuantity, 1, 2);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
@@ -907,7 +905,7 @@ void bag_menu_print_cursor(u8 a, u8 b)
void bag_menu_add_pocket_scroll_arrow_indicators_maybe(void)
{
if (gUnknown_0203CE54->unk81E == 0xFF)
- gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->unk82E[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]);
+ gUnknown_0203CE54->unk81E = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0xAC, 12, 0x94, gUnknown_0203CE54->numItemStacks[gUnknown_0203CE58.pocket] - gUnknown_0203CE54->numShownItems[gUnknown_0203CE58.pocket], 0x6E, 0x6E, &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket]);
}
void sub_81AB824(void)
@@ -937,8 +935,8 @@ void sub_81AB89C(void)
void free_bag_item_list_buffers(void)
{
- Free(gUnknown_0203CE78);
- Free(gUnknown_0203CE74);
+ Free(sListBuffer2);
+ Free(sListBuffer1);
FreeAllWindowBuffers();
Free(gUnknown_0203CE54);
}
@@ -955,8 +953,8 @@ void task_close_bag_menu_2(u8 taskId)
if (!gPaletteFade.active)
{
DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
- if (gUnknown_0203CE54->unk0 != 0)
- SetMainCallback2(gUnknown_0203CE54->unk0);
+ if (gUnknown_0203CE54->mainCallback2 != 0)
+ SetMainCallback2(gUnknown_0203CE54->mainCallback2);
else
SetMainCallback2(gUnknown_0203CE58.bagCallback);
sub_81AB824();
@@ -973,52 +971,54 @@ void sub_81AB9A8(u8 pocketId)
struct BagPocket *pocket = &gBagPockets[pocketId];
switch (pocketId)
{
- case 2:
- case 3:
+ case TMHM_POCKET:
+ case BERRIES_POCKET:
SortBerriesOrTMHMs(pocket);
break;
default:
CompactItemsInBagPocket(pocket);
break;
}
- gUnknown_0203CE54->unk829[pocketId] = 0;
+ gUnknown_0203CE54->numItemStacks[pocketId] = 0;
for (i = 0; i < pocket->capacity && pocket->itemSlots[i].itemId; i++)
- gUnknown_0203CE54->unk829[pocketId]++;
- if (!gUnknown_0203CE54->unk81B_2)
- gUnknown_0203CE54->unk829[pocketId]++;
- if (gUnknown_0203CE54->unk829[pocketId] > 8)
- gUnknown_0203CE54->unk82E[pocketId] = 8;
+ gUnknown_0203CE54->numItemStacks[pocketId]++;
+
+ if (!gUnknown_0203CE54->hideCloseBagText)
+ gUnknown_0203CE54->numItemStacks[pocketId]++;
+
+ if (gUnknown_0203CE54->numItemStacks[pocketId] > 8)
+ gUnknown_0203CE54->numShownItems[pocketId] = 8;
else
- gUnknown_0203CE54->unk82E[pocketId] = gUnknown_0203CE54->unk829[pocketId];
+ gUnknown_0203CE54->numShownItems[pocketId] = gUnknown_0203CE54->numItemStacks[pocketId];
}
void sub_81ABA6C(void)
{
u8 i;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < POCKETS_COUNT; i++)
sub_81AB9A8(i);
}
-void sub_81ABA88(u8 a)
+void SetInitialScrollAndCursorPositions(u8 pocketId)
{
- sub_812225C(&gUnknown_0203CE58.scrollPosition[a], &gUnknown_0203CE58.cursorPosition[a], gUnknown_0203CE54->unk82E[a], gUnknown_0203CE54->unk829[a]);
+ sub_812225C(&gUnknown_0203CE58.scrollPosition[pocketId], &gUnknown_0203CE58.cursorPosition[pocketId], gUnknown_0203CE54->numShownItems[pocketId], gUnknown_0203CE54->numItemStacks[pocketId]);
}
-void sub_81ABAC4(void)
+static void SetPocketListPositions(void)
{
u8 i;
- for (i = 0; i < 5; i++)
- sub_81ABA88(i);
+ for (i = 0; i < POCKETS_COUNT; i++)
+ SetInitialScrollAndCursorPositions(i);
}
void sub_81ABAE0(void)
{
u8 i;
- for (i = 0; i < 5; i++)
- sub_8122298(&gUnknown_0203CE58.scrollPosition[i], &gUnknown_0203CE58.cursorPosition[i], gUnknown_0203CE54->unk82E[i], gUnknown_0203CE54->unk829[i], 8);
+ for (i = 0; i < POCKETS_COUNT; i++)
+ sub_8122298(&gUnknown_0203CE58.scrollPosition[i], &gUnknown_0203CE58.cursorPosition[i], gUnknown_0203CE54->numShownItems[i], gUnknown_0203CE54->numItemStacks[i], 8);
}
-u8 sub_81ABB2C(u8 pocketId)
+u8 GetItemListPosition(u8 pocketId)
{
return gUnknown_0203CE58.scrollPosition[pocketId] + gUnknown_0203CE58.cursorPosition[pocketId];
}
@@ -1041,7 +1041,7 @@ void bag_menu_inits_lists_menu(u8 taskId)
bag_menu_RemoveBagItem_message_window(4);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
- sub_81ABA88(gUnknown_0203CE58.pocket);
+ SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
@@ -1055,7 +1055,7 @@ void sub_81ABC3C(u8 a)
void sub_81ABC54(u8 a, s16 b)
{
- u8 r3 = (gUnknown_0203CE58.pocket == 3) ? 3 : 2;
+ u8 r3 = (gUnknown_0203CE58.pocket == BERRIES_POCKET) ? 3 : 2;
ConvertIntToDecimalStringN(gStringVar1, b, 2, r3);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
AddTextPrinterParameterized(a, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 0x28), 2, 0, 0);
@@ -1063,7 +1063,7 @@ void sub_81ABC54(u8 a, s16 b)
void sub_81ABCC0(int a, int b, int c)
{
- u8 r3 = (gUnknown_0203CE58.pocket == 3) ? 3 : 2;
+ u8 r3 = (gUnknown_0203CE58.pocket == BERRIES_POCKET) ? 3 : 2;
ConvertIntToDecimalStringN(gStringVar1, b, 2, r3);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
AddTextPrinterParameterized(a, 1, gStringVar4, 0, 1, -1, 0);
@@ -1092,7 +1092,7 @@ void Task_BagMenu(u8 taskId)
if (sub_81AC2C0() == 1)
{
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
- if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->unk829[gUnknown_0203CE58.pocket] - 1)
+ if ((*scrollPos + *cursorPos) != gUnknown_0203CE54->numItemStacks[gUnknown_0203CE58.pocket] - 1)
{
PlaySE(SE_SELECT);
bag_menu_swap_items(taskId);
@@ -1102,13 +1102,13 @@ void Task_BagMenu(u8 taskId)
}
else
{
- int r4 = ListMenuHandleInputGetItemId(data[0]);
+ int listPosition = ListMenuHandleInputGetItemId(data[0]);
ListMenuGetScrollAndRow(data[0], scrollPos, cursorPos);
- switch (r4)
+ switch (listPosition)
{
- case -1:
+ case LIST_NOTHING_CHOSEN:
break;
- case -2:
+ case LIST_B_PRESSED:
if (gUnknown_0203CE58.location == 5)
{
PlaySE(SE_HAZURE);
@@ -1118,13 +1118,13 @@ void Task_BagMenu(u8 taskId)
gSpecialVar_ItemId = select;
gTasks[taskId].func = unknown_ItemMenu_Confirm;
break;
- default:
+ default: // A_BUTTON
PlaySE(SE_SELECT);
sub_81AB824();
bag_menu_print_cursor_(data[0], 2);
- data[1] = r4;
- data[2] = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
- gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, r4);
+ data[1] = listPosition;
+ data[2] = BagGetQuantityByPocketPosition(gUnknown_0203CE58.pocket + 1, listPosition);
+ gSpecialVar_ItemId = BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, listPosition);
gUnknown_08614054[gUnknown_0203CE58.location](taskId);
break;
}
@@ -1164,10 +1164,10 @@ u8 GetSwitchBagPocketDirection(void)
void ChangeBagPocketId(u8 *bagPocketId, s8 deltaBagPocketId)
{
- if (deltaBagPocketId == 1 && *bagPocketId == 4)
+ if (deltaBagPocketId == 1 && *bagPocketId == POCKETS_COUNT - 1)
*bagPocketId = 0;
else if (deltaBagPocketId == -1 && *bagPocketId == 0)
- *bagPocketId = 4;
+ *bagPocketId = POCKETS_COUNT - 1;
else
*bagPocketId += deltaBagPocketId;
}
@@ -1186,7 +1186,7 @@ void SwitchBagPocket(u8 taskId, s16 deltaBagPocketId, u16 a3)
ClearWindowTilemap(1);
DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
schedule_bg_copy_tilemap_to_vram(0);
- gSprites[gUnknown_0203CE54->unk804[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = TRUE;
+ gSprites[gUnknown_0203CE54->spriteId[2 + (gUnknown_0203CE54->unk81B_1 ^ 1)]].invisible = TRUE;
sub_81AB824();
}
pocketId = gUnknown_0203CE58.pocket;
@@ -1444,7 +1444,7 @@ void sub_81AC644(u8 unused)
default:
if (sub_81221AC() == TRUE || InUnionRoom() == TRUE)
{
- if (gUnknown_0203CE58.pocket == 4 || !sub_8122148(gSpecialVar_ItemId))
+ if (gUnknown_0203CE58.pocket == KEYITEMS_POCKET || !sub_8122148(gSpecialVar_ItemId))
{
gUnknown_0203CE54->unk820 = &gUnknown_08614046;
gUnknown_0203CE54->unk828 = 1;
@@ -1459,14 +1459,14 @@ void sub_81AC644(u8 unused)
{
switch (gUnknown_0203CE58.pocket)
{
- case 0:
+ case ITEMS_POCKET:
gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824;
gUnknown_0203CE54->unk828 = 4;
memcpy(&gUnknown_0203CE54->unk824, &gUnknown_0861402C, 4);
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
gUnknown_0203CE54->unk824 = 6;
break;
- case 4:
+ case KEYITEMS_POCKET:
gUnknown_0203CE54->unk820 = &gUnknown_0203CE54->unk824;
gUnknown_0203CE54->unk828 = 4;
memcpy(&gUnknown_0203CE54->unk824, &gUnknown_08614030, 4);
@@ -1478,22 +1478,22 @@ void sub_81AC644(u8 unused)
gUnknown_0203CE54->unk824 = 7;
}
break;
- case 1:
+ case BALLS_POCKET:
gUnknown_0203CE54->unk820 = gUnknown_08614034;
gUnknown_0203CE54->unk828 = 4;
break;
- case 2:
+ case TMHM_POCKET:
gUnknown_0203CE54->unk820 = gUnknown_08614038;
gUnknown_0203CE54->unk828 = 4;
break;
- case 3:
+ case BERRIES_POCKET:
gUnknown_0203CE54->unk820 = gUnknown_0861403C;
gUnknown_0203CE54->unk828 = 6;
break;
}
}
}
- if (gUnknown_0203CE58.pocket == 2)
+ if (gUnknown_0203CE58.pocket == TMHM_POCKET)
{
ClearWindowTilemap(1);
PrintTMHMMoveData(gSpecialVar_ItemId);
@@ -1624,17 +1624,17 @@ bool8 sub_81ACDFC(s8 a)
void bag_menu_remove_some_window(void)
{
if (gUnknown_0203CE54->unk828 == 1)
- bag_menu_remove_window(0);
+ bag_menu_remove_window(0);
else if (gUnknown_0203CE54->unk828 == 2)
{
- bag_menu_remove_window(1);
+ bag_menu_remove_window(1);
}
else if (gUnknown_0203CE54->unk828 == 4)
{
- bag_menu_remove_window(2);
+ bag_menu_remove_window(2);
}
else
- bag_menu_remove_window(3);
+ bag_menu_remove_window(3);
}
void ItemMenu_UseOutOfBattle(u8 taskId)
@@ -1648,7 +1648,7 @@ void ItemMenu_UseOutOfBattle(u8 taskId)
{
FillWindowPixelBuffer(1, 0);
schedule_bg_copy_tilemap_to_vram(0);
- if (gUnknown_0203CE58.pocket != 3)
+ if (gUnknown_0203CE58.pocket != BERRIES_POCKET)
ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId);
else
sub_80FDD10(taskId);
@@ -1744,7 +1744,7 @@ void Task_ActuallyToss(u8 taskId)
RemoveBagItem(gSpecialVar_ItemId, data[8]);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
- sub_81ABA88(gUnknown_0203CE58.pocket);
+ SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
schedule_bg_copy_tilemap_to_vram(0);
@@ -1782,7 +1782,7 @@ void ItemMenu_Give(u8 taskId)
bag_menu_print_there_is_no_pokemon(taskId);
else
{
- gUnknown_0203CE54->unk0 = sub_81B7F60;
+ gUnknown_0203CE54->mainCallback2 = sub_81B7F60;
unknown_ItemMenu_Confirm(taskId);
}
}
@@ -1815,7 +1815,7 @@ void sub_81AD350(u8 taskId)
void ItemMenu_CheckTag(u8 taskId)
{
- gUnknown_0203CE54->unk0 = DoBerryTagScreen;
+ gUnknown_0203CE54->mainCallback2 = DoBerryTagScreen;
unknown_ItemMenu_Confirm(taskId);
}
@@ -1842,7 +1842,7 @@ void ItemMenu_UseInBattle(u8 taskId)
void bag_menu_mail_related(void)
{
- GoToBagMenu(12, 5, NULL);
+ GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL);
}
void item_menu_type_2(u8 taskId)
@@ -1857,7 +1857,7 @@ void item_menu_type_2(u8 taskId)
StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeldHere);
DisplayItemMessage(taskId, 1, gStringVar4, sub_81AD350);
}
- else if (gUnknown_0203CE58.pocket != 4 && !ItemId_GetImportance(gSpecialVar_ItemId))
+ else if (gUnknown_0203CE58.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
{
unknown_ItemMenu_Confirm(taskId);
}
@@ -1871,7 +1871,7 @@ void item_menu_type_b(u8 taskId)
{
if (ItemIsMail(gSpecialVar_ItemId) == TRUE)
DisplayItemMessage(taskId, 1, gText_CantWriteMail, sub_81AD350);
- else if (gUnknown_0203CE58.pocket != 4 && !ItemId_GetImportance(gSpecialVar_ItemId))
+ else if (gUnknown_0203CE58.pocket != KEYITEMS_POCKET && !ItemId_GetImportance(gSpecialVar_ItemId))
gTasks[taskId].func = unknown_ItemMenu_Confirm;
else
bag_menu_print_cant_be_held_msg(taskId);
@@ -2012,7 +2012,7 @@ void sub_81AD8C8(u8 taskId)
AddMoney(&gSaveBlock1Ptr->money, (ItemId_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
DestroyListMenuTask(data[0], scrollPos, cursorPos);
sub_81AB9A8(gUnknown_0203CE58.pocket);
- sub_81ABA88(gUnknown_0203CE58.pocket);
+ SetInitialScrollAndCursorPositions(gUnknown_0203CE58.pocket);
load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
bag_menu_print_cursor_(data[0], 2);
@@ -2157,7 +2157,7 @@ void DoWallyTutorialBagMenu(void)
PrepareBagForWallyTutorial();
AddBagItem(ITEM_POTION, 1);
AddBagItem(ITEM_POKE_BALL, 1);
- GoToBagMenu(10, 0, SetCB2ToReshowScreenAfterMenu2);
+ GoToBagMenu(RETURN_LOCATION_BATTLE_2, ITEMS_POCKET, SetCB2ToReshowScreenAfterMenu2);
}
void Task_WallyTutorialBagMenu(u8 taskId)
@@ -2235,7 +2235,7 @@ void bag_menu_leave_maybe(void)
SetMainCallback2(CB2_ReturnToField);
}
-void bag_menu_print_pocket_names(u8 *pocketName1, u8 *pocketName2)
+void bag_menu_print_pocket_names(const u8 *pocketName1, const u8 *pocketName2)
{
struct WindowTemplate window = {0, 0, 0, 0, 0, 0, 0};
u16 windowId;
@@ -2252,7 +2252,7 @@ void bag_menu_print_pocket_names(u8 *pocketName1, u8 *pocketName2)
offset = GetStringCenterAlignXOffset(1, pocketName2, 0x40);
bag_menu_print(windowId, 1, pocketName2, offset + 0x40, 1, 0, 0, -1, 1);
}
- CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gUnknown_0203CE54->unk844, 0x400);
+ CpuCopy32((u8*)GetWindowAttribute(windowId, WINDOW_TILE_DATA), gUnknown_0203CE54->pocketNameBuffer, 0x400);
RemoveWindow(windowId);
}
@@ -2263,7 +2263,7 @@ void bag_menu_copy_pocket_name_to_window(u32 a)
int b;
if (a > 8)
a = 8;
- r4 = &gUnknown_0203CE54->unk844;
+ r4 = &gUnknown_0203CE54->pocketNameBuffer;
windowAttribute = (u8*)GetWindowAttribute(2, WINDOW_TILE_DATA);
CpuCopy32(r4[0][a], windowAttribute, 0x100);
b = a + 16;
@@ -2292,17 +2292,17 @@ void setup_bag_menu_textboxes(void)
void bag_menu_print(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 h)
{
- AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, gUnknown_08614164[h], speed, str);
+ AddTextPrinterParameterized4(windowId, fontId, left, top, letterSpacing, lineSpacing, sFontColorTable[h], speed, str);
}
u8 sub_81AE124(u8 a)
{
- return gUnknown_0203CE54->unk810[a];
+ return gUnknown_0203CE54->windowPointers[a];
}
u8 bag_menu_add_window(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr == 0xFF)
{
*ptr = AddWindow(&gUnknown_086141AC[a]);
@@ -2314,7 +2314,7 @@ u8 bag_menu_add_window(u8 a)
void bag_menu_remove_window(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr != 0xFF)
{
sub_8198070(*ptr, 0);
@@ -2327,7 +2327,7 @@ void bag_menu_remove_window(u8 a)
u8 AddItemMessageWindow(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr == 0xFF)
*ptr = AddWindow(&gUnknown_086141AC[a]);
return *ptr;
@@ -2335,7 +2335,7 @@ u8 AddItemMessageWindow(u8 a)
void bag_menu_RemoveBagItem_message_window(u8 a)
{
- u8 *ptr = &gUnknown_0203CE54->unk810[a];
+ u8 *ptr = &gUnknown_0203CE54->windowPointers[a];
if (*ptr != 0xFF)
{
sub_8197DF8(*ptr, 0);
diff --git a/src/item_menu_icons.c b/src/item_menu_icons.c
index c68e1d29e..669195b33 100644
--- a/src/item_menu_icons.c
+++ b/src/item_menu_icons.c
@@ -1,14 +1,14 @@
#include "global.h"
-#include "sprite.h"
+#include "berry.h"
#include "decompress.h"
+#include "graphics.h"
+#include "item.h"
#include "item_menu.h"
#include "item_icon.h"
#include "item_menu_icons.h"
-#include "window.h"
#include "menu_helpers.h"
-#include "berry.h"
-#include "graphics.h"
-#include "item.h"
+#include "sprite.h"
+#include "window.h"
#include "constants/items.h"
struct CompressedTilesPal
@@ -199,7 +199,7 @@ static const struct SpritePalette gUnknown_0857FBA8 =
gUnknown_0857F564, 101
};
-static const struct SpriteTemplate gUnknown_0857FBB0 =
+static const struct SpriteTemplate gSpriteTemplate_RotatingBall =
{
.tileTag = 101,
.paletteTag = 101,
@@ -409,7 +409,7 @@ static const struct SpriteTemplate gUnknown_0857FE10 =
// code
void RemoveBagSprite(u8 id)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[id];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[id];
if (*spriteId != 0xFF)
{
FreeSpriteTilesByTag(id + 100);
@@ -422,14 +422,14 @@ void RemoveBagSprite(u8 id)
void AddBagVisualSprite(u8 bagPocketId)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[0];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[0];
*spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0);
SetBagVisualPocketId(bagPocketId, FALSE);
}
void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
{
- struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->spriteId[0]];
if (isSwitchingPockets)
{
sprite->pos2.y = -5;
@@ -458,7 +458,7 @@ static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
void ShakeBagVisual(void)
{
- struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->spriteId[0]];
if (sprite->affineAnimEnded)
{
StartSpriteAffineAnim(sprite, 1);
@@ -477,10 +477,10 @@ static void SpriteCB_ShakeBagVisual(struct Sprite *sprite)
void AddSwitchPocketRotatingBallSprite(s16 rotationDirection)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[1];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[1];
LoadSpriteSheet(&gUnknown_0857FBA0);
LoadSpritePalette(&gUnknown_0857FBA8);
- *spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0);
+ *spriteId = CreateSprite(&gSpriteTemplate_RotatingBall, 16, 16, 0);
gSprites[*spriteId].data[0] = rotationDirection;
}
@@ -515,7 +515,7 @@ static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite)
void AddBagItemIconSprite(u16 itemId, u8 id)
{
- u8 *spriteId = &gUnknown_0203CE54->unk804[id + 2];
+ u8 *spriteId = &gUnknown_0203CE54->spriteId[id + 2];
if (*spriteId == 0xFF)
{
u8 iconSpriteId;
@@ -539,17 +539,17 @@ void RemoveBagItemIconSprite(u8 id)
void sub_80D4FAC(void)
{
- sub_8122344(&gUnknown_0203CE54->unk804[4], 8);
+ sub_8122344(&gUnknown_0203CE54->spriteId[4], 8);
}
void sub_80D4FC8(u8 arg0)
{
- sub_81223FC(&gUnknown_0203CE54->unk804[4], 8, arg0);
+ sub_81223FC(&gUnknown_0203CE54->spriteId[4], 8, arg0);
}
void sub_80D4FEC(u8 arg0)
{
- sub_8122448(&gUnknown_0203CE54->unk804[4], 136, 120, (arg0 + 1) * 16);
+ sub_8122448(&gUnknown_0203CE54->spriteId[4], 136, 120, (arg0 + 1) * 16);
}
static void sub_80D5018(void *mem0, void *mem1)
diff --git a/src/item_use.c b/src/item_use.c
index 4ab9f6e23..f82071a17 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -10,7 +10,7 @@
#include "fieldmap.h"
#include "event_object_movement.h"
#include "field_player_avatar.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_weather.h"
#include "item.h"
#include "item_menu.h"
@@ -38,7 +38,7 @@
#include "constants/vars.h"
extern void(*gUnknown_0203A0F4)(u8 taskId);
-extern void (*gUnknown_03006328)(u8, u16, TaskFunc);
+extern void (*gUnknown_03006328)(u8, TaskFunc);
extern void unknown_ItemMenu_Confirm(u8 taskId);
extern void sub_81C5B14(u8 taskId);
extern void ScriptUnfreezeEventObjects(void);
@@ -52,12 +52,11 @@ extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[];
extern int sub_80247BC(void);
extern struct MapHeader* mapconnection_get_mapheader(struct MapConnection *connection);
extern void SetUpItemUseCallback(u8 taskId);
-extern void ItemUseCB_Medicine(u8, u16, TaskFunc);
+extern void ItemUseCB_Medicine(u8, TaskFunc);
extern void bag_menu_yes_no(u8, u8, const struct YesNoFuncTable*);
extern void sub_81C5924(void);
extern void sub_81C59BC(void);
extern void sub_81AB9A8(u8);
-extern void sub_81ABA88(u8);
extern void StartEscapeRopeFieldEffect(void);
extern u8* sub_806CF78(u16);
extern void sub_81B89F0(void);
@@ -128,7 +127,7 @@ void SetUpItemUseCallback(u8 taskId)
type = ItemId_GetType(gSpecialVar_ItemId) - 1;
if (!InBattlePyramid())
{
- gUnknown_0203CE54->unk0 = gUnknown_085920D8[type];
+ gUnknown_0203CE54->mainCallback2 = gUnknown_085920D8[type];
unknown_ItemMenu_Confirm(taskId);
}
else
@@ -212,7 +211,7 @@ void sub_80FD254(void)
void ItemUseOutOfBattle_Mail(u8 taskId)
{
- gUnknown_0203CE54->unk0 = sub_80FD254;
+ gUnknown_0203CE54->mainCallback2 = sub_80FD254;
unknown_ItemMenu_Confirm(taskId);
}
@@ -608,7 +607,7 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
}
else if (gTasks[taskId].data[3] != TRUE)
{
- gUnknown_0203CE54->unk0 = sub_80FDBEC;
+ gUnknown_0203CE54->mainCallback2 = sub_80FDBEC;
unknown_ItemMenu_Confirm(taskId);
}
else
@@ -670,7 +669,7 @@ void sub_80FDD10(u8 taskId)
{
gUnknown_0203A0F4 = sub_80FDD74;
gFieldCallback = MapPostLoadHook_UseItem;
- gUnknown_0203CE54->unk0 = CB2_ReturnToField;
+ gUnknown_0203CE54->mainCallback2 = CB2_ReturnToField;
unknown_ItemMenu_Confirm(taskId);
}
else
@@ -812,7 +811,7 @@ void sub_80FE058(void)
if (!InBattlePyramid())
{
sub_81AB9A8(ItemId_GetPocket(gSpecialVar_ItemId));
- sub_81ABA88(ItemId_GetPocket(gSpecialVar_ItemId));
+ SetInitialScrollAndCursorPositions(ItemId_GetPocket(gSpecialVar_ItemId));
}
else
{
@@ -993,7 +992,7 @@ void sub_80FE54C(u8 taskId)
{
if (!InBattlePyramid())
{
- gUnknown_0203CE54->unk0 = sub_81B89F0;
+ gUnknown_0203CE54->mainCallback2 = sub_81B89F0;
unknown_ItemMenu_Confirm(taskId);
}
else
diff --git a/src/learn_move.c b/src/learn_move.c
index 4e02cedd3..4db83861e 100644
--- a/src/learn_move.c
+++ b/src/learn_move.c
@@ -5,7 +5,7 @@
#include "contest_effect.h"
#include "data2.h"
#include "event_data.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "gpu_regs.h"
#include "learn_move.h"
#include "list_menu.h"
@@ -52,7 +52,7 @@ static EWRAM_DATA struct {
const u16 gUnknown_085CE9F8[] = INCBIN_U16("graphics/interface/ui_learn_move.gbapal");
const u8 gUnknown_085CEA18[] = INCBIN_U8("graphics/interface/ui_learn_move.4bpp");
-const struct OamData gUnknown_085CEB98 =
+const struct OamData gUnknown_085CEB98 =
{
.y = 0,
.affineMode = 0,
@@ -69,7 +69,7 @@ const struct OamData gUnknown_085CEB98 =
.affineParam = 0,
};
-const struct OamData gUnknown_085CEBA0 =
+const struct OamData gUnknown_085CEBA0 =
{
.y = 0,
.affineMode = 0,
@@ -86,7 +86,7 @@ const struct OamData gUnknown_085CEBA0 =
.affineParam = 0,
};
-const struct OamData gUnknown_085CEBA8 =
+const struct OamData gUnknown_085CEBA8 =
{
.y = 0,
.affineMode = 0,
@@ -103,20 +103,20 @@ const struct OamData gUnknown_085CEBA8 =
.affineParam = 0,
};
-const struct SpriteSheet gUnknown_085CEBB0 =
+const struct SpriteSheet gUnknown_085CEBB0 =
{
.data = gUnknown_085CEA18,
.size = 0x180,
.tag = 5525
};
-const struct SpritePalette gUnknown_085CEBB8 =
+const struct SpritePalette gUnknown_085CEBB8 =
{
.data = gUnknown_085CE9F8,
.tag = 5526
};
-const struct ScrollArrowsTemplate gUnknown_085CEBC0 =
+const struct ScrollArrowsTemplate gUnknown_085CEBC0 =
{
.firstArrowType = 0,
.firstX = 27,
@@ -131,7 +131,7 @@ const struct ScrollArrowsTemplate gUnknown_085CEBC0 =
.palNum = 0,
};
-const struct ScrollArrowsTemplate gUnknown_085CEBD0 =
+const struct ScrollArrowsTemplate gUnknown_085CEBD0 =
{
.firstArrowType = 2,
.firstX = 192,
@@ -146,31 +146,31 @@ const struct ScrollArrowsTemplate gUnknown_085CEBD0 =
.palNum = 0,
};
-const union AnimCmd gUnknown_085CEBE0[] =
+const union AnimCmd gUnknown_085CEBE0[] =
{
ANIMCMD_FRAME(8, 5, FALSE, FALSE),
ANIMCMD_END
};
-const union AnimCmd gUnknown_085CEBE8[] =
+const union AnimCmd gUnknown_085CEBE8[] =
{
ANIMCMD_FRAME(9, 5, FALSE, FALSE),
ANIMCMD_END
};
-const union AnimCmd gUnknown_085CEBF0[] =
+const union AnimCmd gUnknown_085CEBF0[] =
{
ANIMCMD_FRAME(10, 5, FALSE, FALSE),
ANIMCMD_END
};
-const union AnimCmd gUnknown_085CEBF8[] =
+const union AnimCmd gUnknown_085CEBF8[] =
{
ANIMCMD_FRAME(11, 5, FALSE, FALSE),
ANIMCMD_END
};
-const union AnimCmd *const gUnknown_085CEC00[] =
+const union AnimCmd *const gUnknown_085CEC00[] =
{
gUnknown_085CEBE0,
gUnknown_085CEBE8,
@@ -178,7 +178,7 @@ const union AnimCmd *const gUnknown_085CEC00[] =
gUnknown_085CEBF8,
};
-const struct SpriteTemplate gUnknown_085CEC10 =
+const struct SpriteTemplate gUnknown_085CEC10 =
{
.tileTag = 5525,
.paletteTag = 5526,
@@ -707,7 +707,7 @@ static void CreateHearts(void)
sLearnMoveStruct->scrollArrowTaskId2 = -1;
sLearnMoveStruct->scrollArrowTaskId1 = -1;
AddScrollArrows();
-
+
for (i = 0; i < 8; i++)
{
sLearnMoveStruct->spriteIds[i] = CreateSprite(&gUnknown_085CEC10, (i - (i / 4) * 4) * 8 + 104, (i / 4) * 8 + 36, 0);
@@ -791,7 +791,7 @@ void ShowHideHearts(s32 item)
else
{
numHearts = (u8)(gContestEffects[gContestMoves[item].effect].appeal / 10);
-
+
if (numHearts == 0xFF)
{
numHearts = 0;
@@ -811,7 +811,7 @@ void ShowHideHearts(s32 item)
}
numHearts = (u8)(gContestEffects[gContestMoves[item].effect].jam / 10);
-
+
if (numHearts == 0xFF)
{
numHearts = 0;
diff --git a/src/load_save.c b/src/load_save.c
index 8ecf89959..963626428 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -3,6 +3,7 @@
#include "load_save.h"
#include "main.h"
#include "pokemon.h"
+#include "pokemon_storage_system.h"
#include "random.h"
#include "alloc.h"
#include "item.h"
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
index 110ec068e..930f1f35b 100644
--- a/src/mauville_old_man.c
+++ b/src/mauville_old_man.c
@@ -62,14 +62,14 @@ static const u8 * const sGiddyAdjectives[] = {
};
static const u8 * const sGiddyQuestions[] = {
- gUnknown_08294313,
- gUnknown_08294359,
- gUnknown_08294398,
- gUnknown_082943DA,
- gUnknown_0829441C,
- gUnknown_08294460,
- gUnknown_082944A0,
- gUnknown_082944D5
+ gMauvilleManText_ISoWantToGoOnAVacation,
+ gMauvilleManText_IBoughtCrayonsWith120Colors,
+ gMauvilleManText_WouldntItBeNiceIfWeCouldFloat,
+ gMauvilleManText_WhenYouWriteOnASandyBeach,
+ gMauvilleManText_WhatsTheBottomOfTheSeaLike,
+ gMauvilleManText_WhenYouSeeTheSettingSunDoesIt,
+ gMauvilleManText_LyingBackInTheGreenGrass,
+ gMauvilleManText_SecretBasesAreSoWonderful
};
static void SetupBard(void)
diff --git a/src/normal.c b/src/normal.c
index 3de8b1157..95c99d29e 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -410,8 +410,8 @@ void sub_81159B4(struct Sprite *sprite)
sprite->data[3] = 40;
sprite->data[4] = 112;
sprite->data[5] = 0;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A634C;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = TranslateSpriteInGrowingCircleOverDuration;
sprite->callback(sprite);
}
@@ -880,11 +880,11 @@ void sub_8116388(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
else
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
- sprite->callback = sub_80A67BC;
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
}
@@ -892,12 +892,12 @@ static void sub_81163D0(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
else
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[4];
- sprite->callback = sub_80A67BC;
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
StoreSpriteCallbackInData6(sprite, sub_810E2C8);
}
@@ -916,15 +916,15 @@ void sub_8116458(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, gBattleAnimArgs[1]);
if (gBattleAnimArgs[0] == 0)
- InitAnimSpritePos(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, 0);
else
- sub_80A6980(sprite, FALSE);
+ InitSpritePosToAnimTarget(sprite, FALSE);
sprite->pos2.x += (Random2() % 48) - 24;
sprite->pos2.y += (Random2() % 24) - 12;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
void sub_81164F0(struct Sprite *sprite)
@@ -935,16 +935,16 @@ void sub_81164F0(struct Sprite *sprite)
sprite->pos2.x = gBattleAnimArgs[1];
sprite->pos2.y = gBattleAnimArgs[2];
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
- sprite->callback = sub_80A67BC;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+ sprite->callback = RunStoredCallbackWhenAffineAnimEnds;
}
void sub_8116560(struct Sprite *sprite)
{
if (gBattleAnimArgs[2] == 0)
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
else
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->data[0] = gBattleAnimArgs[3];
StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
@@ -955,9 +955,9 @@ void sub_81165A8(struct Sprite *sprite)
{
StartSpriteAffineAnim(sprite, gBattleAnimArgs[3]);
if (gBattleAnimArgs[2] == 0)
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
else
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
sprite->callback = sub_81165E4;
}
diff --git a/src/overworld.c b/src/overworld.c
index b2c7ad963..27bd0425a 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -4,18 +4,17 @@
#include "battle_setup.h"
#include "berry.h"
#include "bg.h"
-// #include "cable_club.h"
+#include "cable_club.h"
#include "clock.h"
#include "event_data.h"
#include "field_camera.h"
#include "field_control_avatar.h"
#include "field_effect.h"
-#include "field_fadetransition.h"
#include "event_object_movement.h"
#include "field_message_box.h"
#include "field_player_avatar.h"
#include "field_screen_effect.h"
-// #include "field_special_scene.h"
+#include "field_special_scene.h"
#include "field_specials.h"
#include "field_tasks.h"
#include "field_weather.h"
@@ -38,7 +37,7 @@
#include "play_time.h"
#include "random.h"
#include "roamer.h"
-// #include "rotating_gate.h"
+#include "rotating_gate.h"
#include "safari_zone.h"
#include "save.h"
#include "save_location.h"
@@ -129,7 +128,7 @@ extern void sub_80A0A38(void);
extern void trainer_hill_map_load_related(void);
extern void sub_8087D74(void);
extern void battle_pyramid_map_load_related(u8);
-extern void sub_80B00E8(u8);
+extern void WriteFlashScanlineEffectBuffer(u8);
extern void sub_80E9238(u8);
extern void sub_81AA2F8(void);
extern void sub_8195E10(void);
@@ -148,7 +147,6 @@ extern void ResetAllPicSprites(void);
extern void FieldEffectActiveListClear(void);
extern void SetUpFieldTasks(void);
extern void sub_81BE6B8(void);
-extern void sub_80AAFA4(void);
extern void ShowStartMenu(void);
extern void sub_80AEE84(void);
extern void mapldr_default(void);
@@ -1277,7 +1275,7 @@ u8 GetMapMusicFadeoutSpeed(void)
return 4;
}
-void music_something(void)
+void TryFadeOutOldMapMusic(void)
{
u16 currentMusic = GetCurrentMapMusic();
u16 warpMusic = GetWarpDestinationMusic();
@@ -1855,7 +1853,7 @@ static void InitCurrentFlashLevelScanlineEffect(void)
}
else if ((flashLevel = Overworld_GetFlashLevel()))
{
- sub_80B00E8(flashLevel);
+ WriteFlashScanlineEffectBuffer(flashLevel);
ScanlineEffect_SetParams(sFlashEffectParams);
}
}
@@ -2196,7 +2194,7 @@ static void sub_8086988(u32 a1)
InitEventObjectPalettes(1);
FieldEffectActiveListClear();
- sub_80AAFA4();
+ StartWeather();
sub_80AEE84();
if (!a1)
SetUpFieldTasks();
diff --git a/src/party_menu.c b/src/party_menu.c
new file mode 100755
index 000000000..6e12dcbf3
--- /dev/null
+++ b/src/party_menu.c
@@ -0,0 +1,7164 @@
+#include "global.h"
+#include "alloc.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_gfx_sfx_util.h"
+#include "battle_interface.h"
+#include "battle_pike.h"
+#include "battle_pyramid.h"
+#include "battle_pyramid_bag.h"
+#include "bg.h"
+#include "contest.h"
+#include "data2.h"
+#include "decompress.h"
+#include "easy_chat.h"
+#include "event_data.h"
+#include "evolution_scene.h"
+#include "field_control_avatar.h"
+#include "field_effect.h"
+#include "field_player_avatar.h"
+#include "field_screen_effect.h"
+#include "field_specials.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+#include "fldeff_softboiled.h"
+#include "frontier_util.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "international_string_util.h"
+#include "item.h"
+#include "item_menu.h"
+#include "item_use.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "mail.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "metatile_behavior.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokemon.h"
+#include "pokemon_icon.h"
+#include "pokemon_storage_system.h"
+#include "pokemon_summary_screen.h"
+#include "pokenav.h"
+#include "region_map.h"
+#include "reshow_battle_screen.h"
+#include "rom_8011DC0.h"
+#include "scanline_effect.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "start_menu.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "text.h"
+#include "text_window.h"
+#include "trade.h"
+#include "window.h"
+#include "constants/battle.h"
+#include "constants/battle_frontier.h"
+#include "constants/field_effects.h"
+#include "constants/flags.h"
+#include "constants/items.h"
+#include "constants/maps.h"
+#include "constants/moves.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "constants/vars.h"
+
+enum {
+ CAN_LEARN_MOVE,
+ CANNOT_LEARN_MOVE,
+ ALREADY_KNOWS_MOVE,
+ CANNOT_LEARN_MOVE_IS_EGG
+};
+
+struct Unk_Rodata1 {
+ void (*unk0)(u8, u8, u8, u8, u8, u8);
+ u8 unk4[24];
+ u8 unk1C;
+ u8 unk1D;
+ u8 unk1E;
+ u8 unk1F;
+};
+
+struct Struct203CEC4 {
+ TaskFunc unk0;
+ MainCallback exitCallback;
+ u32 unk8_0:1;
+ u32 unk8_1:3;
+ u32 unk8_2:7;
+ u32 unk9_0:7;
+ u32 unkA_0:14;
+ u8 unkC[3];
+ u8 unkF[8];
+ u8 unk17;
+ u16 palBuffer[0xB0];
+ u8 filler[0xA0];
+ s16 data[16];
+};
+
+struct Struct203CEDC {
+ struct Unk_Rodata1 *unk0;
+ u8 *unk4;
+ u8 windowId;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u8 unkC;
+};
+
+struct Struct8615C08 {
+ const u8 *textPtr;
+ TaskFunc func;
+};
+
+struct Struct8615D9C {
+ bool8 (*fieldMoveFunc)(void);
+ u8 msgID;
+};
+
+EWRAM_DATA struct Struct203CEC4 *gUnknown_0203CEC4 = NULL;
+EWRAM_DATA struct Struct203CEC8 gUnknown_0203CEC8 = {0};
+EWRAM_DATA struct Struct203CEDC *gUnknown_0203CEDC = NULL;
+EWRAM_DATA u8 *gUnknown_0203CEE0 = NULL;
+EWRAM_DATA u8 *gUnknown_0203CEE4 = NULL;
+EWRAM_DATA u8 gUnknown_0203CEE8 = 0;
+EWRAM_DATA u8 gUnknown_0203CEE9 = 0;
+EWRAM_DATA MainCallback gPostMenuFieldCallback = NULL;
+EWRAM_DATA u16 *gUnknown_0203CEF0 = 0;
+EWRAM_DATA u16 *gUnknown_0203CEF4 = 0;
+EWRAM_DATA u8 gSelectedOrderFromParty[4] = {0};
+EWRAM_DATA u16 gUnknown_0203CEFC = 0;
+EWRAM_DATA u16 gUnknown_0203CEFE = 0; // unused
+EWRAM_DATA u8 gUnknown_0203CF00[3] = {0};
+
+// BELOW TO BE CONVERTED TO C
+
+extern u32 gUnknown_08615048[]; // tutor compatibility table
+extern struct BgTemplate gUnknown_086156B8[];
+extern struct Unk_Rodata1 gUnknown_086156C4[2];
+// extern struct Unk_Rodata1 gUnknown_086156E4;
+extern u8 gUnknown_08615704[][6][8];
+extern u8 gUnknown_086157C4[];
+extern u8 gUnknown_086157E0[];
+extern const u8 gUnknown_086157FC[][3];
+extern struct WindowTemplate gUnknown_08615810[];
+extern struct WindowTemplate gUnknown_08615850[];
+extern struct WindowTemplate gUnknown_086158D0[];
+extern struct WindowTemplate gUnknown_08615890[];
+extern struct WindowTemplate gUnknown_08615908;
+extern struct WindowTemplate gUnknown_08615910;
+extern struct WindowTemplate gUnknown_08615918;
+extern struct WindowTemplate gUnknown_08615920;
+extern struct WindowTemplate gUnknown_08615928;
+extern struct WindowTemplate gUnknown_08615930;
+extern struct WindowTemplate gUnknown_08615938;
+extern struct WindowTemplate gUnknown_08615940;
+extern struct WindowTemplate gUnknown_08615948;
+extern struct WindowTemplate gUnknown_08615950;
+extern struct WindowTemplate gUnknown_08615958;
+extern struct WindowTemplate gUnknown_08615960;
+extern struct WindowTemplate gUnknown_08615968;
+extern struct WindowTemplate gUnknown_08615970;
+extern u8 gUnknown_08615988[];
+extern u8 gUnknown_086159CE[];
+extern u8 gUnknown_08615A14[];
+extern u8 gUnknown_08615A4A[];
+extern u8 gUnknown_08615A80[];
+extern u8 gUnknown_08615AB6[];
+extern u8 gUnknown_08615AB8[];
+extern u8 gUnknown_08615ABA[];
+extern u8 gUnknown_08615ABD[];
+extern u8 gUnknown_08615AC0[];
+extern u8 gUnknown_08615AC3[];
+extern u8 gUnknown_08615AC5[];
+extern u8 gUnknown_08615AC7[];
+extern u8 gUnknown_08615AC9[];
+extern u8 gUnknown_08615ACB[];
+extern u8 gUnknown_08615ACD[];
+extern u8 gUnknown_08615AD0[];
+extern u8 gUnknown_08615AD3[];
+extern u8 gUnknown_08615AD6[];
+extern u8 gUnknown_08615AD9[];
+extern u8 gUnknown_08615ADC[];
+extern u8 gUnknown_08615ADF[];
+extern u8 gUnknown_08615AE2[];
+extern u8 gUnknown_08615AE5[];
+extern u8 gUnknown_08615AE8[];
+extern u8 gUnknown_08615AEB[];
+extern u8 gUnknown_08615AEE[];
+extern u8 gUnknown_08615AF1[];
+extern const u8 *gUnknown_08615AF4[];
+extern const u8 *gUnknown_08615B60[];
+extern struct Struct8615C08 gUnknown_08615C08[];
+extern u8 *gUnknown_08615D38[];
+extern u8 gUnknown_08615D70[];
+extern const u16 gUnknown_08615D7E[];
+extern const struct Struct8615D9C gUnknown_08615D9C[];
+extern const u8 *gUnknown_08615E0C[];
+extern const struct SpriteSheet gUnknown_08615EB0;
+extern const struct SpritePalette gUnknown_08615EB8;
+extern struct SpriteTemplate gSpriteTemplate_8615EC0;
+extern const struct CompressedSpriteSheet gUnknown_08615EF8;
+extern const struct CompressedSpritePalette gUnknown_08615F00;
+extern struct SpriteTemplate gSpriteTemplate_8615F08;
+extern const struct CompressedSpriteSheet gUnknown_08615F70;
+extern struct SpriteTemplate gSpriteTemplate_8615F78;
+extern const struct CompressedSpriteSheet gUnknown_08615FF8;
+extern const struct CompressedSpritePalette gUnknown_08616000;
+extern struct SpriteTemplate gSpriteTemplate_8616008;
+extern u8 gUnknown_08616020[];
+extern u16 gUnknown_08616040[];
+
+// ABOVE TO BE CONVERTED TO C
+
+extern void (*gUnknown_03006328)(u8, TaskFunc);
+
+void reset_brm(void);
+void PartyMenuInitCallback(void);
+bool8 PartyMenuSetup(void);
+void sub_81B209C(void);
+void PartyMenuExit(void);
+bool8 AllocPartyMenuBg(void);
+bool8 AllocPartyMiscGfx(void);
+void sub_81B239C(u8);
+void PartyMenuInitHelperStructs(u8);
+void LoadHeldItemIcons(void);
+void LoadPartyMenuPokeballGfx(void);
+void LoadPartyMenuAilmentGfx(void);
+bool8 party_menu_add_per_mon_objects(void);
+bool8 RenderPartyMenuBoxes(void);
+void sub_81B0F28(void);
+void sub_81B2428(u8);
+void display_pokemon_menu_message(u32);
+void PartyMenuExitTask(u8);
+void FreePartyPointers(void);
+void PartyPaletteBufferCopy(u8);
+void sub_81B0CEC(u8);
+void UpdateSelectedPartyBox(struct Struct203CEDC *, u8);
+void sub_81B2720(u8);
+void DisplayPartyPokemonSelectForRelearner(u8);
+void DisplayPartyPokemonSelectForContest(u8);
+void DisplayPartyPokemonSelectForBattle(u8);
+void sub_81B0B98(u8);
+void DisplayPartyPokemonSelectHeldItemRelated(u8);
+bool8 sub_81B0BFC(u8);
+void DisplayPartyPokemonData(u8);
+void sub_81B0FCC(u8, u8);
+void DisplayPartyPokemonNickname(struct Pokemon *, struct Struct203CEDC *, u8);
+void DisplayPartyPokemonLevelCheck(struct Pokemon *, struct Struct203CEDC *, u8);
+void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *, struct Struct203CEDC *, u8);
+void DisplayPartyPokemonHPCheck(struct Pokemon *, struct Struct203CEDC *, u8);
+void DisplayPartyPokemonMaxHPCheck(struct Pokemon *, struct Struct203CEDC *, u8);
+void DisplayPartyPokemonHPBarCheck(struct Pokemon *, struct Struct203CEDC *);
+void DisplayPartyPokemonOtherText(u8, struct Struct203CEDC *, u8);
+u8 sub_81B8830(void);
+bool8 GetBattleEntryEligibility(struct Pokemon *);
+bool8 sub_81B218C(u8);
+void DisplayPartyPokemonSelectToTeachMove(u8, u16, u8);
+u8 CanPartyPokemonLearnTMTutor(struct Pokemon *, u16, u8);
+void DisplayPartyPokemonBarDetail(u8, const u8*, u8, u8*);
+void DisplayPartyPokemonLevel(u8, struct Struct203CEDC *);
+void DisplayPartyPokemonGender(u8, u16, u8*, struct Struct203CEDC *);
+void DisplayPartyPokemonHP(u16, struct Struct203CEDC *);
+void DisplayPartyPokemonMaxHP(u16, struct Struct203CEDC *);
+void DisplayPartyPokemonHPBar(u16, u16, struct Struct203CEDC *);
+void party_menu_link_mon_icon_anim(u16, u32, struct Struct203CEDC *, u8, u32);
+void party_menu_link_mon_held_item_object(u16, u16, struct Struct203CEDC *);
+void party_menu_link_mon_pokeball_object(u16, struct Struct203CEDC *);
+void party_menu_link_mon_status_condition_object(u16, u8, struct Struct203CEDC *);
+void party_menu_held_item_object(struct Pokemon *, struct Struct203CEDC *);
+void party_menu_pokeball_object(struct Pokemon *, struct Struct203CEDC *);
+void party_menu_icon_anim(struct Pokemon *, struct Struct203CEDC *, u32);
+void party_menu_status_condition_object(struct Pokemon *, struct Struct203CEDC *);
+u8 sub_81B5F74(u8, u8);
+void sub_81B120C(void);
+u8 sub_81B5F34(u8, u8);
+void AnimateSelectedPartyIcon(u8, u8);
+void sub_81B5F98(u8, u8);
+u8 GetPartyBoxPalBitfield(u8, u8);
+bool8 PartyBoxPal_ParnterOrDisqualifiedInArena(u8);
+u8 sub_81B8F38(u8);
+void c3_0811FAB4(u8);
+void sub_81B9080(void);
+void sub_81B4F88(void);
+void sub_81B15D0(u8, s8*);
+void sub_81B140C(u8, s8*);
+u16 PartyMenuButtonHandler(s8*);
+s8* sub_81B13EC(void);
+bool8 sub_81B15A4(u8*);
+void sub_81B302C(u8*);
+void sub_81B9140(void);
+void sub_81B6794(u8);
+void sub_81B7E4C(u8);
+void sub_81B8474(u8);
+void sub_81B7FAC(u8);
+void sub_81B3938(u8);
+void sub_81B21AC(u8, u8);
+void sub_81B36FC(u8);
+void sub_81B407C(u8);
+void sub_81B2210(u8);
+bool8 sub_81B1660(u8);
+const u8* sub_81B88BC(void);
+u8 sub_81B1B5C(const u8*, u8);
+void sub_81B16D4(u8);
+void sub_81B334C(void);
+void sub_81B1708(u8);
+bool8 sub_81B1BD4(void);
+void sub_81B1C1C(u8);
+void sub_81B8558(void);
+void UpdateCurrentPartySelection(s8*, s8);
+void SetNewPartySelectTarget1(s8*, s8);
+void SetNewPartySelectTarget2(s8*, s8);
+s8 sub_81B1B00(s8, s8);
+void sub_81B3300(const u8*);
+void sub_81B1B8C(u8);
+void DisplayPartyPokemonHPCheck(struct Pokemon*, struct Struct203CEDC*, u8);
+void DisplayPartyPokemonHPBarCheck(struct Pokemon*, struct Struct203CEDC*);
+bool16 sub_81B2134(struct Pokemon*);
+bool16 sub_81B2164(struct Pokemon*);
+void sub_81B2248(u8);
+void sub_81B227C(u8);
+bool8 sub_81B2370(u16, u8);
+u16 sub_81B2360(u8);
+bool8 sub_81B314C(void);
+void sub_81B3414(struct Pokemon*, u8);
+u8 sub_81B8A2C(struct Pokemon*);
+u8 sub_81B856C(s8);
+void sub_81B469C(u8);
+void sub_81B3730(u8);
+void sub_81B3828(void);
+void pokemon_change_order(void);
+void sub_81B3894(void);
+void sub_81B3CC0(u8);
+void sub_81B3D48(u8);
+void swap_pokemon_and_oams(void);
+void sub_81B3E60(u8);
+void sub_81B41C4(void);
+void c2_8123744(void);
+void sub_81B452C(void);
+void sub_81B4350(u8);
+void sub_81B42D0(u8);
+void sub_81B43A8(u8);
+void sub_81B43DC(u8);
+void sub_81B44FC(u8);
+void sub_81B4578(void);
+void sub_81B4624(u8);
+void sub_81B5C94(struct Pokemon*, struct Struct203CEDC*);
+void sub_81B48A8(u8);
+void sub_81B48DC(u8);
+void sub_81B4988(u8);
+void sub_81B4A98(void);
+void sub_81B4AE0(void);
+void sub_81B4B6C(u8);
+void sub_81B4BA0(u8);
+void sub_81B4C60(u8);
+void sub_81B4C94(u8);
+bool8 sub_81B8A7C(void);
+void sub_81B53FC(u8);
+void sub_81B5430(u8);
+void task_brm_cancel_1_on_keypad_a_or_b(u8);
+void sub_81B5674(u8);
+void sub_81B57DC(void);
+void sub_81B5864(void);
+void sub_81B56A4(u8);
+void sub_81B56D8(u8);
+void task_launch_hm_phase_2(u8);
+u16 brm_get_selected_species(void);
+void sub_81B5B38(u8, struct Pokemon*);
+void UpdatePartyMonIconFrame(struct Sprite*);
+void UpdatePartyMonIconFrameAndBounce(struct Sprite*);
+void sub_81B5CB0(u16, struct Struct203CEDC*);
+void sub_81B5DF0(u8, u8);
+void sub_81B5E74(struct Sprite*);
+void party_menu_get_status_condition_and_update_object(struct Pokemon*, struct Struct203CEDC*);
+void party_menu_update_status_condition_object(u8, struct Struct203CEDC*);
+u8 sub_81B8984(void);
+void sub_81B6280(u8);
+void c2_815ABFC(void);
+u8 GetItemEffectType(u16);
+void sub_81B672C(u8);
+u16 sub_81B691C(struct Pokemon*, u8);
+void option_menu_get_string(u8, u8*);
+void sub_81B6BB4(u8);
+void ether_effect_related_2(u8);
+void ether_effect_related(u8);
+void sub_81B6EB4(u8);
+void sub_81B6FF4(u8);
+void sub_81B6F60(u8);
+void sub_81B6F98(u8);
+void sub_81B77AC(u8);
+void sub_81B7028(u8);
+void sub_81B7088(u8);
+void sub_81B7230(u8);
+void sub_81B70B8(void);
+void sub_81B70F0(void);
+void sub_81B711C(u8);
+void sub_81B7154(u8);
+void sub_81B71D4(u8);
+void sub_81B7294(u8);
+void sub_81B72C8(u8);
+void sub_81B73E4(u8);
+void sub_81B79A0(struct Pokemon*, s16*);
+void sub_81B754C(u8, struct Pokemon*);
+void sub_81B75D4(u8);
+void sub_81B767C(u8);
+void sub_81B7634(u8);
+void sub_81B76C8(u8);
+void sub_81B7704(u8);
+void sub_81B7810(u8);
+void sub_81B787C(u8);
+void sub_81B7910(u8, u16);
+void sub_81B7A28(u8);
+void task_sacred_ash_party_loop(u8);
+void sub_81B7C10(u8);
+void sub_81B8044(u8);
+void sub_81B83B8(u8);
+void sub_81B82A0(u8);
+void sub_81B83F0(u16);
+void sub_81B814C(void);
+void sub_81B8088(u8);
+void sub_81B8104(u8);
+void sub_81B81A8(void);
+bool8 sub_81B841C(u16);
+void sub_81B8230(u8);
+void sub_81B82D4(u8);
+void sub_81B879C(u8);
+void sub_81B8558(void);
+bool8 GetBattleEntryEligibility(struct Pokemon*);
+bool8 sub_81B8770(u8);
+u8 sub_81B8888(void);
+u8 sub_81B885C(void);
+void sub_81B87E8(u8);
+u8 pokemon_order_func(u8);
+void sub_81B8FB0(u8, u8);
+void sub_81B8C88(u8*, bool8);
+void sub_81B8D88(u8*, u8, u8);
+void sub_81B917C(u8);
+void sub_81B91B4(u8);
+void sub_81B9294(u8);
+void sub_81B9240(u8);
+void sub_81B9390(void);
+void task_hm_without_phase_2(u8);
+void sub_81B9424(u8);
+void sub_81B9470(void);
+void sub_81B94D0(u8);
+void sub_81B953C(u8);
+void sub_81B9588(void);
+void sub_81B9640(u8);
+void sub_81B97DC(struct Pokemon*, u8, u8);
+
+void InitPartyMenu(u8 a, u8 b, u8 c, u8 d, u8 e, TaskFunc task, MainCallback callback)
+{
+ u16 i;
+
+ reset_brm();
+ gUnknown_0203CEC4 = Alloc(sizeof(struct Struct203CEC4));
+ if (gUnknown_0203CEC4 == NULL)
+ {
+ SetMainCallback2(callback);
+ }
+ else
+ {
+ gUnknown_0203CEC8.unk8_0 = a;
+ gUnknown_0203CEC8.exitCallback = callback;
+ gUnknown_0203CEC8.unkB = c;
+ gUnknown_0203CEC4->unkA_0 = e;
+ gUnknown_0203CEC4->unk0 = task;
+ gUnknown_0203CEC4->exitCallback = NULL;
+ gUnknown_0203CEC4->unk8_1 = 0;
+ gUnknown_0203CEC4->unk8_2 = 0xFF;
+ gUnknown_0203CEC4->unk9_0 = 0xFF;
+
+ if (a == 4)
+ gUnknown_0203CEC4->unk8_0 = TRUE;
+ else
+ gUnknown_0203CEC4->unk8_0 = FALSE;
+
+ if (b != 0xFF)
+ gUnknown_0203CEC8.mode = b;
+
+ for (i = 0; i <= 15; i++)
+ gUnknown_0203CEC4->data[i] = 0;
+ for (i = 0; i < 3; i++)
+ gUnknown_0203CEC4->unkC[i] |= 0xFF;
+
+ if (d == 0)
+ gUnknown_0203CEC8.unk9 = 0;
+ else if (gUnknown_0203CEC8.unk9 > 5 || GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES) == SPECIES_NONE)
+ gUnknown_0203CEC8.unk9 = 0; // wut why is this else if?
+
+ gTextFlags.autoScroll = 0;
+ CalculatePlayerPartyCount();
+ SetMainCallback2(PartyMenuInitCallback);
+ }
+}
+
+void PartyMenuCallback(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ do_scheduled_bg_tilemap_copies_to_vram();
+ UpdatePaletteFade();
+}
+
+void PartyMenuVBlankCallback(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void PartyMenuInitCallback(void)
+{
+ while (TRUE)
+ {
+ if (sub_81221EC() == TRUE || PartyMenuSetup() == TRUE || sub_81221AC() == TRUE)
+ break;
+ }
+}
+
+bool8 PartyMenuSetup(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankHBlankCallbacksToNull();
+ ResetVramOamAndBgCntRegs();
+ clear_scheduled_bg_copies_to_vram();
+ gMain.state++;
+ break;
+ case 1:
+ ScanlineEffect_Stop();
+ gMain.state++;
+ break;
+ case 2:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gMain.state++;
+ break;
+ case 3:
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 4:
+ FreeAllSpritePalettes();
+ gMain.state++;
+ break;
+ case 5:
+ if (!sub_81221AC())
+ ResetTasks();
+ gMain.state++;
+ break;
+ case 6:
+ sub_81B209C();
+ gMain.state++;
+ break;
+ case 7:
+ if (!AllocPartyMenuBg())
+ {
+ PartyMenuExit();
+ return TRUE;
+ }
+ else
+ {
+ gUnknown_0203CEC4->data[0] = 0;
+ gMain.state++;
+ }
+ break;
+ case 8:
+ if (AllocPartyMiscGfx())
+ gMain.state++;
+ break;
+ case 9:
+ sub_81B239C(gUnknown_0203CEC8.mode);
+ gMain.state++;
+ break;
+ case 10:
+ PartyMenuInitHelperStructs(gUnknown_0203CEC8.mode);
+ gUnknown_0203CEC4->data[0] = 0;
+ gMain.state++;
+ break;
+ case 11:
+ LoadHeldItemIcons();
+ gMain.state++;
+ break;
+ case 12:
+ LoadPartyMenuPokeballGfx();
+ gMain.state++;
+ break;
+ case 13:
+ LoadPartyMenuAilmentGfx();
+ gMain.state++;
+ break;
+ case 14:
+ LoadMonIconPalettes();
+ gMain.state++;
+ break;
+ case 15:
+ if (party_menu_add_per_mon_objects())
+ {
+ gUnknown_0203CEC4->data[0] = 0;
+ gMain.state++;
+ }
+ break;
+ case 16:
+ if (RenderPartyMenuBoxes())
+ {
+ gUnknown_0203CEC4->data[0] = 0;
+ gMain.state++;
+ }
+ break;
+ case 17:
+ sub_81B0F28();
+ gMain.state++;
+ break;
+ case 18:
+ sub_81B2428(gUnknown_0203CEC4->unk8_0);
+ gMain.state++;
+ break;
+ case 19:
+ gMain.state++;
+ break;
+ case 20:
+ CreateTask(gUnknown_0203CEC4->unk0, 0);
+ display_pokemon_menu_message(gUnknown_0203CEC4->unkA_0);
+ gMain.state++;
+ break;
+ case 21:
+ BlendPalettes(0xFFFFFFFF, 16, 0);
+ gPaletteFade.bufferTransferDisabled = FALSE;
+ gMain.state++;
+ break;
+ case 22:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ gMain.state++;
+ break;
+ default:
+ SetVBlankCallback(PartyMenuVBlankCallback);
+ SetMainCallback2(PartyMenuCallback);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void PartyMenuExit(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ CreateTask(PartyMenuExitTask, 0);
+ SetVBlankCallback(PartyMenuVBlankCallback);
+ SetMainCallback2(PartyMenuCallback);
+}
+
+void PartyMenuExitTask(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(gUnknown_0203CEC8.exitCallback);
+ FreePartyPointers();
+ DestroyTask(taskId);
+ }
+}
+
+void reset_brm(void)
+{
+ gUnknown_0203CEC4 = NULL;
+ gUnknown_0203CEE4 = NULL;
+ gUnknown_0203CEDC = NULL;
+ gUnknown_0203CEE0 = NULL;
+}
+
+bool8 AllocPartyMenuBg(void)
+{
+ gUnknown_0203CEE4 = Alloc(0x800);
+ if (gUnknown_0203CEE4 == NULL)
+ return FALSE;
+ memset(gUnknown_0203CEE4, 0, 0x800);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_086156B8, 3);
+ SetBgTilemapBuffer(1, gUnknown_0203CEE4);
+ ResetAllBgsCoordinates();
+ schedule_bg_copy_tilemap_to_vram(1);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ return TRUE;
+}
+
+bool8 AllocPartyMiscGfx(void)
+{
+ int sizeout;
+
+ switch (gUnknown_0203CEC4->data[0])
+ {
+ case 0:
+ gUnknown_0203CEE0 = malloc_and_decompress(gPartyMenuMisc_Gfx, &sizeout);
+ LoadBgTiles(1, gUnknown_0203CEE0, sizeout, 0);
+ gUnknown_0203CEC4->data[0]++;
+ break;
+ case 1:
+ if (!IsDma3ManagerBusyWithBgCopy())
+ {
+ LZDecompressWram(gPartyMenuMisc_Tilemap, gUnknown_0203CEE4);
+ gUnknown_0203CEC4->data[0]++;
+ }
+ break;
+ case 2:
+ LoadCompressedPalette(gPartyMenuMisc_Pal, 0, 0x160);
+ CpuCopy16(gPlttBufferUnfaded, gUnknown_0203CEC4->palBuffer, 0x160);
+ gUnknown_0203CEC4->data[0]++;
+ break;
+ case 3:
+ PartyPaletteBufferCopy(4);
+ gUnknown_0203CEC4->data[0]++;
+ break;
+ case 4:
+ PartyPaletteBufferCopy(5);
+ gUnknown_0203CEC4->data[0]++;
+ break;
+ case 5:
+ PartyPaletteBufferCopy(6);
+ gUnknown_0203CEC4->data[0]++;
+ break;
+ case 6:
+ PartyPaletteBufferCopy(7);
+ gUnknown_0203CEC4->data[0]++;
+ break;
+ case 7:
+ PartyPaletteBufferCopy(8);
+ gUnknown_0203CEC4->data[0]++;
+ break;
+ default:
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void PartyPaletteBufferCopy(u8 offset)
+{
+ offset *= 16;
+ CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32);
+ CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32);
+}
+
+void FreePartyPointers(void)
+{
+ if (gUnknown_0203CEC4)
+ Free(gUnknown_0203CEC4);
+ if (gUnknown_0203CEE4)
+ Free(gUnknown_0203CEE4);
+ if (gUnknown_0203CEE0)
+ Free(gUnknown_0203CEE0);
+ if (gUnknown_0203CEDC)
+ Free(gUnknown_0203CEDC);
+ FreeAllWindowBuffers();
+}
+
+void PartyMenuInitHelperStructs(u8 a)
+{
+ u8 i;
+
+ gUnknown_0203CEDC = Alloc(sizeof(struct Struct203CEDC[PARTY_SIZE]));
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ gUnknown_0203CEDC[i].unk0 = &gUnknown_086156C4[1];
+ gUnknown_0203CEDC[i].unk4 = gUnknown_08615704[a][i];
+ gUnknown_0203CEDC[i].windowId = i;
+ gUnknown_0203CEDC[i].unk9 |= 0xFF;
+ gUnknown_0203CEDC[i].unkA |= 0xFF;
+ gUnknown_0203CEDC[i].unkB |= 0xFF;
+ gUnknown_0203CEDC[i].unkC |= 0xFF;
+ }
+ gUnknown_0203CEDC[0].unk0 = &gUnknown_086156C4[0];
+ if (a == 3)
+ gUnknown_0203CEDC[3].unk0 = &gUnknown_086156C4[0];
+ else if (a != 0)
+ gUnknown_0203CEDC[1].unk0 = &gUnknown_086156C4[0];
+}
+
+void RenderPartyMenuBox(u8 slot)
+{
+ if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2)
+ {
+ sub_81B0CEC(slot);
+ if (gUnknown_02022FF8[slot - 3].species == SPECIES_NONE)
+ UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 0x40);
+ else
+ UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 8);
+ CopyWindowToVram(gUnknown_0203CEDC[slot].windowId, 2);
+ PutWindowTilemap(gUnknown_0203CEDC[slot].windowId);
+ schedule_bg_copy_tilemap_to_vram(2);
+ }
+ else
+ {
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE)
+ {
+ sub_81B2720(gUnknown_0203CEDC[slot].windowId);
+ UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], 0x40);
+ CopyWindowToVram(gUnknown_0203CEDC[slot].windowId, 2);
+ }
+ else
+ {
+ if (gUnknown_0203CEC8.unk8_0 == 7)
+ DisplayPartyPokemonSelectForRelearner(slot);
+ else if (gUnknown_0203CEC8.unk8_0 == 2)
+ DisplayPartyPokemonSelectForContest(slot);
+ else if (gUnknown_0203CEC8.unk8_0 == 4)
+ DisplayPartyPokemonSelectForBattle(slot);
+ else if (gUnknown_0203CEC8.unk8_0 == 11)
+ sub_81B0B98(slot);
+ else if (gUnknown_0203CEC8.unk8_0 == 12)
+ DisplayPartyPokemonSelectHeldItemRelated(slot);
+ else if (!sub_81B0BFC(slot))
+ DisplayPartyPokemonData(slot);
+
+ if (gUnknown_0203CEC8.unk8_0 == 5)
+ sub_81B0FCC(slot, 0);
+ else if (gUnknown_0203CEC8.unk9 == slot)
+ sub_81B0FCC(slot, 1);
+ else
+ sub_81B0FCC(slot, 0);
+ }
+ PutWindowTilemap(gUnknown_0203CEDC[slot].windowId);
+ schedule_bg_copy_tilemap_to_vram(0);
+ }
+}
+
+void DisplayPartyPokemonData(u8 slot)
+{
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG))
+ {
+ gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 1);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
+ }
+ else
+ {
+ gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 0);
+ DisplayPartyPokemonNickname(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonLevelCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonMaxHPCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
+ }
+}
+
+void DisplayPartyPokemonSelectData(u8 slot, u8 stringID)
+{
+ struct Pokemon *mon = &gPlayerParty[slot];
+
+ gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].windowId, 0, 0, 0, 0, 1);
+ DisplayPartyPokemonNickname(mon, &gUnknown_0203CEDC[slot], 0);
+ if (!GetMonData(mon, MON_DATA_IS_EGG))
+ {
+ DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[slot], 0);
+ DisplayPartyPokemonGenderNidoranCheck(mon, &gUnknown_0203CEDC[slot], 0);
+ }
+ DisplayPartyPokemonOtherText(stringID, &gUnknown_0203CEDC[slot], 0);
+}
+
+void DisplayPartyPokemonSelectForBattle(u8 slot)
+{
+ u8 i;
+ struct Pokemon *mon = &gPlayerParty[slot];
+ u8 *ptr = gSelectedOrderFromParty;
+
+ if (!GetBattleEntryEligibility(mon))
+ {
+ DisplayPartyPokemonSelectData(slot, 7);
+ return;
+ }
+ else
+ {
+ for (i = 0; i < sub_81B8830(); i++)
+ {
+ if (ptr[i] != 0 && (ptr[i] - 1) == slot)
+ {
+ DisplayPartyPokemonSelectData(slot, i + 2);
+ return;
+ }
+ }
+ DisplayPartyPokemonSelectData(slot, 1);
+ }
+}
+
+void DisplayPartyPokemonSelectForContest(u8 slot)
+{
+ switch (sub_80DAE0C(&gPlayerParty[slot]))
+ {
+ case 0:
+ case 3:
+ case 4:
+ DisplayPartyPokemonSelectData(slot, 7);
+ break;
+ case 1:
+ case 2:
+ DisplayPartyPokemonSelectData(slot, 6);
+ break;
+ }
+}
+
+void DisplayPartyPokemonSelectForRelearner(u8 slot)
+{
+ if (GetNumberOfRelearnableMoves(&gPlayerParty[slot]) == 0)
+ DisplayPartyPokemonSelectData(slot, 9);
+ else
+ DisplayPartyPokemonSelectData(slot, 8);
+}
+
+void sub_81B0B98(u8 slot)
+{
+ if (sub_81B218C(slot) == TRUE)
+ DisplayPartyPokemonSelectData(slot, 6);
+ else
+ DisplayPartyPokemonSelectData(slot, 7);
+}
+
+void DisplayPartyPokemonSelectHeldItemRelated(u8 slot)
+{
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_HELD_ITEM))
+ DisplayPartyPokemonSelectData(slot, 11);
+ else
+ DisplayPartyPokemonSelectData(slot, 12);
+}
+
+bool8 sub_81B0BFC(u8 slot)
+{
+ struct Pokemon *currentPokemon = &gPlayerParty[slot];
+ u16 item = gSpecialVar_ItemId;
+
+ if (gUnknown_0203CEC8.unkB == 12)
+ {
+ gSpecialVar_Result = FALSE;
+ DisplayPartyPokemonSelectToTeachMove(slot, 0, gSpecialVar_0x8005);
+ }
+ else
+ {
+ if (gUnknown_0203CEC8.unkB != 3)
+ return FALSE;
+
+ switch (CheckIfItemIsTMHMOrEvolutionStone(item))
+ {
+ default:
+ return FALSE;
+ case 1:
+ DisplayPartyPokemonSelectToTeachMove(slot, item, 0);
+ break;
+ case 2:
+ if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE)
+ return FALSE;
+ DisplayPartyPokemonSelectData(slot, 0);
+ break;
+ }
+ }
+ return TRUE;
+}
+
+void DisplayPartyPokemonSelectToTeachMove(u8 slot, u16 item, u8 tutor)
+{
+ switch (CanPartyPokemonLearnTMTutor(&gPlayerParty[slot], item, tutor))
+ {
+ case CANNOT_LEARN_MOVE:
+ case CANNOT_LEARN_MOVE_IS_EGG:
+ DisplayPartyPokemonSelectData(slot, 9);
+ break;
+ case ALREADY_KNOWS_MOVE:
+ DisplayPartyPokemonSelectData(slot, 10);
+ break;
+ default:
+ DisplayPartyPokemonSelectData(slot, 8);
+ break;
+ }
+}
+
+void sub_81B0CEC(u8 slot)
+{
+ struct Struct203CEDC *structPtr = &gUnknown_0203CEDC[slot];
+ u8 actualSlot = slot - 3;
+
+ if (gUnknown_02022FF8[actualSlot].species == SPECIES_NONE)
+ {
+ sub_81B2720(structPtr->windowId);
+ }
+ else
+ {
+ structPtr->unk0->unk0(structPtr->windowId, 0, 0, 0, 0, 0);
+ StringCopy(gStringVar1, gUnknown_02022FF8[actualSlot].nickname);
+ StringGetEnd10(gStringVar1);
+ sub_81DB52C(gStringVar1);
+ DisplayPartyPokemonBarDetail(structPtr->windowId, gStringVar1, 0, structPtr->unk0->unk4);
+ DisplayPartyPokemonLevel(gUnknown_02022FF8[actualSlot].level, structPtr);
+ DisplayPartyPokemonGender(gUnknown_02022FF8[actualSlot].gender, gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].nickname, structPtr);
+ DisplayPartyPokemonHP(gUnknown_02022FF8[actualSlot].hp, structPtr);
+ DisplayPartyPokemonMaxHP(gUnknown_02022FF8[actualSlot].maxhp, structPtr);
+ DisplayPartyPokemonHPBar(gUnknown_02022FF8[actualSlot].hp, gUnknown_02022FF8[actualSlot].maxhp, structPtr);
+ }
+}
+
+bool8 RenderPartyMenuBoxes(void)
+{
+ RenderPartyMenuBox(gUnknown_0203CEC4->data[0]);
+ if (++gUnknown_0203CEC4->data[0] == 6)
+ return TRUE;
+ return FALSE;
+}
+
+u8* GetPartyMiscGraphicsTile(u16 tileId)
+{
+ return &gUnknown_0203CEE0[tileId << 5];
+}
+
+void party_menu_add_per_mon_objects_internal(u8 slot)
+{
+ u8 actualSlot;
+
+ if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2)
+ {
+ u8 status;
+ actualSlot = slot - 3;
+
+ if (gUnknown_02022FF8[actualSlot].species != SPECIES_NONE)
+ {
+ party_menu_link_mon_icon_anim(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].personality, &gUnknown_0203CEDC[slot], 0, 0);
+ party_menu_link_mon_held_item_object(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].heldItem, &gUnknown_0203CEDC[slot]);
+ party_menu_link_mon_pokeball_object(gUnknown_02022FF8[actualSlot].species, &gUnknown_0203CEDC[slot]);
+ if (gUnknown_02022FF8[actualSlot].hp == 0)
+ status = AILMENT_FNT;
+ else
+ status = pokemon_ailments_get_primary(gUnknown_02022FF8[actualSlot].status);
+ party_menu_link_mon_status_condition_object(gUnknown_02022FF8[actualSlot].species, status, &gUnknown_0203CEDC[slot]);
+ }
+ }
+ else if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ party_menu_icon_anim(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], slot);
+ party_menu_held_item_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
+ party_menu_pokeball_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
+ party_menu_status_condition_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
+ }
+}
+
+bool8 party_menu_add_per_mon_objects(void)
+{
+ party_menu_add_per_mon_objects_internal(gUnknown_0203CEC4->data[0]);
+ if (++gUnknown_0203CEC4->data[0] == 6)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_81B0F28(void)
+{
+ if (gUnknown_0203CEC8.unk8_0 == 5)
+ {
+ FillBgTilemapBufferRect(1, 14, 23, 17, 7, 2, 1);
+ }
+ else
+ {
+ if (gUnknown_0203CEC4->unk8_0)
+ {
+ gUnknown_0203CEC4->unk8_2 = sub_81B5F74(0xBF, 0x88);
+ sub_81B120C();
+ gUnknown_0203CEC4->unk9_0 = sub_81B5F74(0xBF, 0x98);
+ }
+ else
+ {
+ gUnknown_0203CEC4->unk9_0 = sub_81B5F34(0xC6, 0x94);
+ }
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 1);
+ }
+}
+
+void sub_81B0FCC(u8 slot, u8 b)
+{
+ u8 spriteId;
+
+ switch (slot)
+ {
+ default:
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ UpdateSelectedPartyBox(&gUnknown_0203CEDC[slot], GetPartyBoxPalBitfield(slot, b));
+ AnimateSelectedPartyIcon(gUnknown_0203CEDC[slot].unk9, b);
+ sub_81B5F98(gUnknown_0203CEDC[slot].unkB, b);
+ }
+ return;
+ case 6:
+ if (b == 0)
+ sub_8199C30(1, 23, 16, 7, 2, 1);
+ else
+ sub_8199C30(1, 23, 16, 7, 2, 2);
+ spriteId = gUnknown_0203CEC4->unk8_2;
+ break;
+ case 7:
+ if (!gUnknown_0203CEC4->unk8_0)
+ {
+ if (b == 0)
+ sub_8199C30(1, 23, 17, 7, 2, 1);
+ else
+ sub_8199C30(1, 23, 17, 7, 2, 2);
+ }
+ else if (b == 0)
+ {
+ sub_8199C30(1, 23, 18, 7, 2, 1);
+ }
+ else
+ {
+ sub_8199C30(1, 23, 18, 7, 2, 2);
+ }
+ spriteId = gUnknown_0203CEC4->unk9_0;
+ break;
+ }
+ sub_81B5F98(spriteId, b);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+u8 GetPartyBoxPalBitfield(u8 slot, u8 b)
+{
+ u8 returnVar = 0;
+ if (b == 1)
+ returnVar |= 1;
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0)
+ returnVar |= 2;
+ if (PartyBoxPal_ParnterOrDisqualifiedInArena(slot) == TRUE)
+ returnVar |= 8;
+ if (gUnknown_0203CEC8.unkB == 9)
+ returnVar |= 16;
+ if (gUnknown_0203CEC8.unkB == 8)
+ {
+ if (slot == gUnknown_0203CEC8.unk9 || slot == gUnknown_0203CEC8.unkA)
+ returnVar |= 4;
+ }
+ if (gUnknown_0203CEC8.unkB == 10 && slot == gUnknown_0203CEC8.unk9 )
+ returnVar |= 32;
+
+ return returnVar;
+}
+
+bool8 PartyBoxPal_ParnterOrDisqualifiedInArena(u8 slot)
+{
+ if (gUnknown_0203CEC8.mode == 2 && (slot == 1 || slot == 4 || slot == 5))
+ return TRUE;
+
+ if (slot < 3 && (gBattleTypeFlags & BATTLE_TYPE_ARENA) && gMain.inBattle && (gBattleStruct->arenaLostPlayerMons >> sub_81B8F38(slot) & 1))
+ return TRUE;
+
+ return FALSE;
+}
+
+void sub_81B120C(void)
+{
+ CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157C4, 23, 16, 7, 2, 17);
+ CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157E0, 23, 18, 7, 2, 17);
+ schedule_bg_copy_tilemap_to_vram(1);
+}
+
+bool8 IsMultiBattle(void)
+{
+ if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI)) == (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI) && gMain.inBattle)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_81B1288(struct Pokemon *partySlot, struct Pokemon *pokemon)
+{
+ struct Pokemon *temp = Alloc(sizeof(struct Pokemon));
+
+ *temp = *partySlot;
+ *partySlot = *pokemon;
+ *pokemon = *temp;
+
+ Free(temp);
+}
+
+void sub_81B12C0(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = c3_0811FAB4;
+}
+
+void c3_0811FAB4(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_0203CEC8.unk8_0 == 1)
+ sub_81B9080();
+
+ if (gUnknown_0203CEC4->exitCallback != NULL)
+ SetMainCallback2(gUnknown_0203CEC4->exitCallback);
+ else
+ SetMainCallback2(gUnknown_0203CEC8.exitCallback);
+
+ ResetSpriteData();
+ FreePartyPointers();
+ DestroyTask(taskId);
+ }
+}
+
+u8 GetCursorSelectionMonId(void)
+{
+ return gUnknown_0203CEC8.unk9;
+}
+
+u8 sub_81B1360(void)
+{
+ return gUnknown_0203CEC8.unk8_0;
+}
+
+void sub_81B1370(u8 taskId)
+{
+ if (!gPaletteFade.active && sub_81221EC() != TRUE)
+ {
+ s8 *ptr = sub_81B13EC();
+
+ switch (PartyMenuButtonHandler(ptr))
+ {
+ case 1:
+ sub_81B140C(taskId, ptr);
+ break;
+ case 2:
+ sub_81B15D0(taskId, ptr);
+ break;
+ case 8:
+ if (gUnknown_0203CEC4->unk8_0)
+ {
+ PlaySE(SE_SELECT);
+ sub_81B4F88();
+ }
+ }
+ }
+}
+
+s8* sub_81B13EC(void)
+{
+ if (gUnknown_0203CEC8.unkB == 8 || gUnknown_0203CEC8.unkB == 10)
+ return &gUnknown_0203CEC8.unkA;
+ return &gUnknown_0203CEC8.unk9;
+}
+
+void sub_81B140C(u8 taskId, s8 *ptr)
+{
+ if (*ptr == 6)
+ {
+ gUnknown_0203CEC8.unk4(taskId);
+ }
+ else
+ {
+ switch (gUnknown_0203CEC8.unkB - 3)
+ {
+ case 7:
+ if (sub_81B15A4((u8*)ptr))
+ {
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81615A8(taskId);
+ }
+ break;
+ case 0:
+ if (sub_81B15A4((u8*)ptr))
+ {
+ if (gUnknown_0203CEC8.unk8_0 == 1)
+ gUnknown_0203CEC4->exitCallback = sub_81B9140;
+
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ gUnknown_03006328(taskId, sub_81B6794);
+ }
+ break;
+ case 9:
+ if (sub_81B15A4((u8*)ptr))
+ {
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B7E4C(taskId);
+ }
+ break;
+ case 4:
+ if (sub_81B15A4((u8*)ptr))
+ {
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B8474(taskId);
+ }
+ break;
+ case 2:
+ case 3:
+ if (sub_81B15A4((u8*)ptr))
+ {
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B7FAC(taskId);
+ }
+ break;
+ case 5:
+ PlaySE(SE_SELECT);
+ sub_81B3938(taskId);
+ break;
+ case 8:
+ PlaySE(SE_SELECT);
+ sub_81B12C0(taskId);
+ break;
+ case 10:
+ if (sub_81B15A4((u8*)ptr))
+ {
+ sub_81B21AC(taskId, (u8)*ptr);
+ }
+ break;
+ default:
+ case 1:
+ case 6:
+ PlaySE(SE_SELECT);
+ sub_81B36FC(taskId);
+ break;
+ }
+ }
+}
+
+bool8 sub_81B15A4(u8 *slotPtr)
+{
+ if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE)
+ {
+ PlaySE(SE_HAZURE);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+void sub_81B15D0(u8 taskId, s8 *ptr)
+{
+ switch (gUnknown_0203CEC8.unkB)
+ {
+ case 1:
+ PlaySE(SE_HAZURE);
+ break;
+ case 8:
+ case 10:
+ PlaySE(SE_SELECT);
+ sub_81B407C(taskId);
+ break;
+ case 13:
+ PlaySE(SE_SELECT);
+ sub_81B2210(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ if (sub_81B1660(taskId) != TRUE)
+ {
+ if (!sub_81221AC())
+ gSpecialVar_0x8004 = 7;
+ gUnknown_0203CEE8 = 0;
+ *ptr = 7;
+ sub_81B12C0(taskId);
+ }
+ break;
+ }
+}
+
+bool8 sub_81B1660(u8 taskId)
+{
+ const u8* stringPtr = NULL;
+
+ if (gUnknown_0203CEC8.unk8_0 == 2)
+ stringPtr = gText_CancelParticipation;
+ else if (gUnknown_0203CEC8.unk8_0 == 4)
+ stringPtr = sub_81B88BC();
+
+ if (stringPtr == NULL)
+ return FALSE;
+
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ StringExpandPlaceholders(gStringVar4, stringPtr);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B16D4;
+ return TRUE;
+}
+
+void sub_81B16D4(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B1708;
+ }
+}
+
+void sub_81B1708(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gUnknown_0203CEE8 = 0;
+ gUnknown_0203CEC8.unk9 = 7;
+ sub_81B8558();
+ sub_81B12C0(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ sub_81B1C1C(taskId);
+ break;
+ }
+}
+
+u16 PartyMenuButtonHandler(s8 *ptr)
+{
+ s8 movementDir;
+
+ switch (gMain.newAndRepeatedKeys)
+ {
+ case DPAD_UP:
+ movementDir = -1;
+ break;
+ case DPAD_DOWN:
+ movementDir = 1;
+ break;
+ case DPAD_LEFT:
+ movementDir = -2;
+ break;
+ case DPAD_RIGHT:
+ movementDir = 2;
+ break;
+ default:
+ switch (sub_812210C())
+ {
+ case 1:
+ movementDir = -1;
+ break;
+ case 2:
+ movementDir = 1;
+ break;
+ default:
+ movementDir = 0;
+ break;
+ }
+ }
+
+ if (gMain.newKeys & START_BUTTON)
+ return 8;
+
+ if (movementDir)
+ {
+ UpdateCurrentPartySelection(ptr, movementDir);
+ return 0;
+ }
+
+ if ((gMain.newKeys & A_BUTTON) && *ptr == 7)
+ return 2;
+
+ return gMain.newKeys & (A_BUTTON | B_BUTTON);
+}
+
+#ifdef NONMATCHING
+void UpdateCurrentPartySelection(s8 *ptr, s8 movementDir)
+{
+ s8 slot = *ptr;
+
+ if (gUnknown_0203CEC8.mode == 0)
+ SetNewPartySelectTarget1(ptr, movementDir);
+ else
+ SetNewPartySelectTarget2(ptr, movementDir);
+
+ if (*ptr != slot)
+ {
+ PlaySE(SE_SELECT);
+ sub_81B0FCC(slot, 0);
+ sub_81B0FCC(*ptr, 1);
+ }
+}
+#else
+NAKED
+void UpdateCurrentPartySelection(s8 *ptr, s8 b)
+{
+ asm_unified("push {r4,r5,lr}\n\
+ adds r5, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ ldrb r4, [r5]\n\
+ ldr r0, =gUnknown_0203CEC8\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 26\n\
+ lsrs r0, 30\n\
+ cmp r0, 0\n\
+ bne _081B1820\n\
+ lsls r1, 24\n\
+ asrs r1, 24\n\
+ adds r0, r5, 0\n\
+ bl SetNewPartySelectTarget1\n\
+ b _081B182A\n\
+ .pool\n\
+_081B1820:\n\
+ lsls r1, 24\n\
+ asrs r1, 24\n\
+ adds r0, r5, 0\n\
+ bl SetNewPartySelectTarget2\n\
+_081B182A:\n\
+ movs r1, 0\n\
+ ldrsb r1, [r5, r1]\n\
+ lsls r4, 24\n\
+ asrs r0, r4, 24\n\
+ cmp r1, r0\n\
+ beq _081B184C\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ lsrs r0, r4, 24\n\
+ movs r1, 0\n\
+ bl sub_81B0FCC\n\
+ ldrb r0, [r5]\n\
+ movs r1, 0x1\n\
+ bl sub_81B0FCC\n\
+_081B184C:\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n");
+}
+#endif
+
+#ifdef NONMATCHING
+void SetNewPartySelectTarget1(s8 *ptr, s8 b)
+{
+ u8 r0r2;
+
+ switch (b)
+ {
+ case -1:
+ r0r2 = *ptr;
+ if (*ptr == 0)
+ {
+ *ptr = 7;
+ }
+ else if (*ptr == 6)
+ {
+ *ptr = gPlayerPartyCount - 1;
+ }
+ else if (*ptr == 7)
+ {
+ if (gUnknown_0203CEC4->unk8_0)
+ *ptr = 6;
+ else
+ *ptr = gPlayerPartyCount - 1;
+ }
+ else
+ {
+ *ptr = r0r2 - 1;
+ }
+ break;
+ case 1:
+ r0r2 = *ptr;
+ if (*ptr != 7)
+ {
+ if ((u32)*ptr == gPlayerPartyCount - 1)
+ {
+ if (gUnknown_0203CEC4->unk8_0)
+ *ptr = 6;
+ else
+ *ptr = 7;
+ }
+ else
+ {
+ *ptr = r0r2 + 1;
+ }
+ }
+ else
+ {
+ *ptr = 0;
+ }
+ break;
+ case 2:
+ if (gPlayerPartyCount != 1 && *ptr == 0)
+ {
+ if (gUnknown_0203CEC4->unk8_1 == 0)
+ *ptr = 1;
+ else
+ *ptr = gUnknown_0203CEC4->unk8_1;
+ }
+ break;
+ case -2:
+ if (*ptr != 0 && *ptr != 6 && *ptr != 7)
+ {
+ gUnknown_0203CEC4->unk8_1 = *ptr;
+ *ptr = 0;
+ }
+ break;
+ }
+}
+#else
+NAKED
+void SetNewPartySelectTarget1(s8 *ptr, s8 b)
+{
+ asm_unified("push {r4,lr}\n\
+ adds r4, r0, 0\n\
+ lsls r1, 24\n\
+ asrs r1, 24\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ cmp r1, r0\n\
+ beq _081B187A\n\
+ cmp r1, r0\n\
+ bgt _081B1870\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ beq _081B1924\n\
+ b _081B1952\n\
+_081B1870:\n\
+ cmp r1, 0x1\n\
+ beq _081B18C0\n\
+ cmp r1, 0x2\n\
+ beq _081B18F8\n\
+ b _081B1952\n\
+_081B187A:\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0\n\
+ ldrsb r1, [r4, r1]\n\
+ cmp r1, 0\n\
+ bne _081B1888\n\
+ movs r0, 0x7\n\
+ b _081B1950\n\
+_081B1888:\n\
+ cmp r1, 0x6\n\
+ bne _081B1898\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ subs r0, 0x1\n\
+ b _081B1950\n\
+ .pool\n\
+_081B1898:\n\
+ cmp r1, 0x7\n\
+ bne _081B18BC\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _081B18B0\n\
+ movs r0, 0x6\n\
+ b _081B1950\n\
+ .pool\n\
+_081B18B0:\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ subs r0, 0x1\n\
+ b _081B1950\n\
+ .pool\n\
+_081B18BC:\n\
+ subs r0, 0x1\n\
+ b _081B1950\n\
+_081B18C0:\n\
+ ldrb r2, [r4]\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0x7\n\
+ beq _081B194E\n\
+ movs r1, 0\n\
+ ldrsb r1, [r4, r1]\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ bne _081B18F4\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _081B18F0\n\
+ movs r0, 0x6\n\
+ b _081B1950\n\
+ .pool\n\
+_081B18F0:\n\
+ movs r0, 0x7\n\
+ b _081B1950\n\
+_081B18F4:\n\
+ adds r0, r2, 0x1\n\
+ b _081B1950\n\
+_081B18F8:\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x1\n\
+ beq _081B1952\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0\n\
+ bne _081B1952\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 28\n\
+ lsrs r0, 29\n\
+ cmp r0, 0\n\
+ bne _081B1950\n\
+ movs r0, 0x1\n\
+ b _081B1950\n\
+ .pool\n\
+_081B1924:\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0\n\
+ beq _081B1952\n\
+ cmp r0, 0x6\n\
+ beq _081B1952\n\
+ cmp r0, 0x7\n\
+ beq _081B1952\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r3, [r0]\n\
+ movs r1, 0\n\
+ ldrsb r1, [r4, r1]\n\
+ movs r0, 0x7\n\
+ ands r1, r0\n\
+ lsls r1, 1\n\
+ ldrb r2, [r3, 0x8]\n\
+ movs r0, 0xF\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3, 0x8]\n\
+_081B194E:\n\
+ movs r0, 0\n\
+_081B1950:\n\
+ strb r0, [r4]\n\
+_081B1952:\n\
+ pop {r4}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+#ifdef NONMATCHING
+void SetNewPartySelectTarget2(s8 *ptr, s8 b)
+{
+ u8 unk;
+ s8 unk2 = b;
+ u8 unk3;
+
+ switch (b)
+ {
+ case -1:
+ unk = *ptr;
+ if (*ptr == 0)
+ {
+ *ptr = 7;
+ }
+ else if (*ptr == 6)
+ {
+ *ptr = gPlayerPartyCount - 1;
+ }
+ else if (*ptr == 7)
+ {
+ if (gUnknown_0203CEC4->unk8_0)
+ {
+ *ptr = 6;
+ }
+ else
+ {
+ *ptr = unk - 1;
+ unk2 = sub_81B1B00(*ptr, unk2);
+ if (unk2 != -1)
+ *ptr = unk2;
+ }
+ }
+ else
+ {
+ unk2 = sub_81B1B00(*ptr, unk2);
+ if (unk2 != -1)
+ *ptr = unk2;
+ }
+ break;
+ case 1:
+ if (*ptr == 6)
+ {
+ *ptr = 7;
+ }
+ else if (*ptr == 7)
+ {
+ *ptr = 0;
+ }
+ else
+ {
+ unk2 = sub_81B1B00(*ptr, 1);
+ if (unk2 == -1)
+ {
+ if (gUnknown_0203CEC4->unk8_0)
+ *ptr = 6;
+ else
+ *ptr = 7;
+ }
+ else
+ {
+ *ptr = unk2;
+ }
+ }
+ break;
+ case 2:
+ if (*ptr == 0)
+ {
+ if (gUnknown_0203CEC4->unk8_1 == 3)
+ {
+ if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE)
+ *ptr = 3;
+ }
+ else if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ *ptr = 2;
+ }
+ }
+ else if (*ptr == 1)
+ {
+ if (gUnknown_0203CEC4->unk8_1 == 5)
+ {
+ if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE)
+ *ptr = 5;
+ }
+ else if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ *ptr = 4;
+ }
+ }
+ break;
+ case -2:
+ unk3 = *ptr - 2;
+ if (unk3 <= 1)
+ {
+ gUnknown_0203CEC4->unk8_1 = *ptr;
+ *ptr = 0;
+ }
+ else
+ {
+ unk3 = *ptr - 4;
+ if (unk3 <= 1)
+ {
+ gUnknown_0203CEC4->unk8_1 = *ptr;
+ *ptr = 1;
+ }
+ }
+ break;
+ }
+}
+#else
+NAKED
+void SetNewPartySelectTarget2(s8 *ptr, s8 b)
+{
+ asm_unified("push {r4-r6,lr}\n\
+ adds r4, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r2, r1, 24\n\
+ asrs r5, r1, 24\n\
+ movs r6, 0x1\n\
+ negs r6, r6\n\
+ cmp r5, r6\n\
+ beq _081B1988\n\
+ cmp r5, r6\n\
+ bgt _081B197E\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ cmp r5, r0\n\
+ bne _081B197C\n\
+ b _081B1A9C\n\
+_081B197C:\n\
+ b _081B1AF4\n\
+_081B197E:\n\
+ cmp r5, 0x1\n\
+ beq _081B19E4\n\
+ cmp r5, 0x2\n\
+ beq _081B1A24\n\
+ b _081B1AF4\n\
+_081B1988:\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0\n\
+ bne _081B1996\n\
+ movs r0, 0x7\n\
+ b _081B1AF2\n\
+_081B1996:\n\
+ cmp r0, 0x6\n\
+ bne _081B19A8\n\
+ ldr r0, =gPlayerPartyCount\n\
+ ldrb r0, [r0]\n\
+ subs r0, 0x1\n\
+ b _081B1AF2\n\
+ .pool\n\
+_081B19A8:\n\
+ cmp r0, 0x7\n\
+ bne _081B19C4\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _081B19C0\n\
+ movs r0, 0x6\n\
+ b _081B1AF2\n\
+ .pool\n\
+_081B19C0:\n\
+ subs r0, r1, 0x1\n\
+ strb r0, [r4]\n\
+_081B19C4:\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ lsls r1, r2, 24\n\
+ asrs r1, 24\n\
+ bl sub_81B1B00\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ asrs r0, 24\n\
+ movs r1, 0x1\n\
+ negs r1, r1\n\
+ cmp r0, r1\n\
+ bne _081B19E0\n\
+ b _081B1AF4\n\
+_081B19E0:\n\
+ strb r2, [r4]\n\
+ b _081B1AF4\n\
+_081B19E4:\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0x6\n\
+ bne _081B19F0\n\
+ movs r0, 0x7\n\
+ b _081B1AF2\n\
+_081B19F0:\n\
+ cmp r0, 0x7\n\
+ bne _081B19F8\n\
+ movs r0, 0\n\
+ b _081B1AF2\n\
+_081B19F8:\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ movs r1, 0x1\n\
+ bl sub_81B1B00\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, r6\n\
+ bne _081B19E0\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _081B1A20\n\
+ movs r0, 0x6\n\
+ b _081B1AF2\n\
+ .pool\n\
+_081B1A20:\n\
+ movs r0, 0x7\n\
+ b _081B1AF2\n\
+_081B1A24:\n\
+ movs r0, 0\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0\n\
+ bne _081B1A5C\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 28\n\
+ lsrs r6, r0, 29\n\
+ cmp r6, 0x3\n\
+ bne _081B1A54\n\
+ ldr r0, =gPlayerParty + 300\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _081B1AF4\n\
+ strb r6, [r4]\n\
+ b _081B1AF4\n\
+ .pool\n\
+_081B1A54:\n\
+ ldr r0, =gPlayerParty + 200\n\
+ b _081B1A70\n\
+ .pool\n\
+_081B1A5C:\n\
+ cmp r0, 0x1\n\
+ bne _081B1AF4\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 28\n\
+ lsrs r5, r0, 29\n\
+ cmp r5, 0x5\n\
+ bne _081B1A88\n\
+ ldr r0, =gPlayerParty + 500\n\
+_081B1A70:\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _081B1AF4\n\
+ strb r5, [r4]\n\
+ b _081B1AF4\n\
+ .pool\n\
+_081B1A88:\n\
+ ldr r0, =gPlayerParty + 400\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _081B1AF4\n\
+ movs r0, 0x4\n\
+ b _081B1AF2\n\
+ .pool\n\
+_081B1A9C:\n\
+ ldrb r1, [r4]\n\
+ subs r0, r1, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bhi _081B1ACC\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r3, [r0]\n\
+ movs r1, 0\n\
+ ldrsb r1, [r4, r1]\n\
+ movs r0, 0x7\n\
+ ands r1, r0\n\
+ lsls r1, 1\n\
+ ldrb r2, [r3, 0x8]\n\
+ movs r0, 0xF\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3, 0x8]\n\
+ movs r0, 0\n\
+ b _081B1AF2\n\
+ .pool\n\
+_081B1ACC:\n\
+ subs r0, r1, 0x4\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bhi _081B1AF4\n\
+ ldr r0, =gUnknown_0203CEC4\n\
+ ldr r3, [r0]\n\
+ movs r1, 0\n\
+ ldrsb r1, [r4, r1]\n\
+ movs r0, 0x7\n\
+ ands r1, r0\n\
+ lsls r1, 1\n\
+ ldrb r2, [r3, 0x8]\n\
+ movs r0, 0xF\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ orrs r0, r1\n\
+ strb r0, [r3, 0x8]\n\
+ movs r0, 0x1\n\
+_081B1AF2:\n\
+ strb r0, [r4]\n\
+_081B1AF4:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+s8 sub_81B1B00(s8 a, s8 b)
+{
+ while (TRUE)
+ {
+ a += b;
+ if ((u8)a >= 6)
+ return -1;
+ if (GetMonData(&gPlayerParty[a], MON_DATA_SPECIES) != SPECIES_NONE)
+ return a;
+ }
+}
+
+u8* GetMonNickname(struct Pokemon *mon, u8 *dest)
+{
+ GetMonData(mon, MON_DATA_NICKNAME, dest);
+ return StringGetEnd10(dest);
+}
+
+u8 sub_81B1B5C(const u8* str, u8 b)
+{
+ u8 taskId;
+
+ sub_81B3300(str);
+ taskId = CreateTask(sub_81B1B8C, 1);
+ gTasks[taskId].data[0] = b;
+ return taskId;
+}
+
+void sub_81B1B8C(u8 taskId)
+{
+ if (RunTextPrintersRetIsActive(6) != TRUE)
+ {
+ if (gTasks[taskId].data[0] == 0)
+ {
+ sub_8198070(6, 0);
+ ClearWindowTilemap(6);
+ }
+ DestroyTask(taskId);
+ }
+}
+
+bool8 sub_81B1BD4(void)
+{
+ return FuncIsActiveTask(sub_81B1B8C);
+}
+
+void sub_81B1BE8(u8 taskId)
+{
+ if (sub_81221EC() != TRUE)
+ {
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+ }
+}
+
+void sub_81B1C1C(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_8198070(6, 0);
+ ClearWindowTilemap(6);
+ if (sub_81221AC() == TRUE)
+ {
+ gTasks[taskId].func = sub_81B1BE8;
+ }
+ else
+ {
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+ }
+ }
+}
+
+void sub_81B1C84(struct Pokemon *mon, u16 item, u8 c, u8 unused)
+{
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem);
+ sub_81B1B5C(gStringVar4, c);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void sub_81B1CD0(struct Pokemon *mon, u16 item, u8 c)
+{
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_RecievedItemFromPkmn);
+ sub_81B1B5C(gStringVar4, c);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void sub_81B1D1C(struct Pokemon *mon, u16 item, u8 c)
+{
+ GetMonNickname(mon, gStringVar1);
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_SwitchPkmnItem);
+ sub_81B1B5C(gStringVar4, c);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void sub_81B1D68(u16 item, u16 item2, u8 c)
+{
+ CopyItemName(item, gStringVar1);
+ CopyItemName(item2, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem);
+ sub_81B1B5C(gStringVar4, c);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void sub_81B1DB8(struct Pokemon *mon, u16 item)
+{
+ u8 itemBytes[2];
+
+ if (ItemIsMail(item) == TRUE)
+ {
+ if (GiveMailToMon(mon, item) == 0xFF)
+ return;
+ }
+ itemBytes[0] = item;
+ itemBytes[1] = item >> 8;
+ SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes);
+}
+
+u8 sub_81B1E00(struct Pokemon* mon)
+{
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ if (item == ITEM_NONE)
+ return 0;
+ if (AddBagItem(item, 1) == FALSE)
+ return 1;
+
+ item = ITEM_NONE;
+ SetMonData(mon, MON_DATA_HELD_ITEM, &item);
+ return 2;
+}
+
+void pokemon_item_not_removed(u16 itemUnused)
+{
+ StringExpandPlaceholders(gStringVar4, gText_BagFullCouldNotRemoveItem);
+}
+
+void sub_81B1E60(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[0] += data[2];
+ data[3]--;
+ SetMonData(&gPlayerParty[data[4]], MON_DATA_HP, &data[0]);
+ DisplayPartyPokemonHPCheck(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]], 1);
+ DisplayPartyPokemonHPBarCheck(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]]);
+ if (data[3] == 0 || data[0] == 0 || data[0] == data[1])
+ {
+ if (data[0] > data[5])
+ ConvertIntToDecimalStringN(gStringVar2, data[0] - data[5], 0, 3);
+ SwitchTaskToFollowupFunc(taskId);
+ }
+}
+
+void sub_81B1F18(u8 taskId, u8 slot, s8 c, s16 HPDifference, TaskFunc func)
+{
+ struct Pokemon *mon = &gPlayerParty[slot];
+ s16 *data = gTasks[taskId].data;
+
+ data[0] = GetMonData(mon, MON_DATA_HP);
+ data[1] = GetMonData(mon, MON_DATA_MAX_HP);
+ data[2] = c;
+ data[3] = HPDifference;
+ data[4] = slot;
+ data[5] = data[0];
+ SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, func);
+}
+
+void sub_81B1FA8(u8 taskId, u8 b, u32 hp)
+{
+ s16 *data = gTasks[taskId].data;
+
+ switch (b) // only case 0 is used
+ {
+ case 0:
+ data[0] = hp;
+ data[5] = hp;
+ break;
+ case 1:
+ data[1] = hp;
+ break;
+ case 2:
+ data[2] = hp;
+ break;
+ case 3:
+ data[3] = hp;
+ break;
+ case 4:
+ data[4] = hp;
+ break;
+ case 5:
+ SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, (TaskFunc)hp); // >casting hp as a taskfunc
+ break;
+ }
+}
+
+u8 pokemon_ailments_get_primary(u32 status)
+{
+ if (status & STATUS1_PSN_ANY)
+ return AILMENT_PSN;
+ if (status & STATUS1_PARALYSIS)
+ return AILMENT_PRZ;
+ if (status & STATUS1_SLEEP)
+ return AILMENT_SLP;
+ if (status & STATUS1_FREEZE)
+ return AILMENT_FRZ;
+ if (status & STATUS1_BURN)
+ return AILMENT_BRN;
+ return AILMENT_NONE;
+}
+
+u8 sub_81B205C(struct Pokemon *mon)
+{
+ u8 ailment;
+
+ if (GetMonData(mon, MON_DATA_HP) == 0)
+ return AILMENT_FNT;
+ ailment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS));
+ if (ailment != AILMENT_NONE)
+ return ailment;
+ if (CheckPartyPokerus(mon, 0))
+ return AILMENT_PKRS;
+ return AILMENT_NONE;
+}
+
+void sub_81B209C(void)
+{
+ u16 *ptr;
+
+ if (gUnknown_0203CEC8.unk8_0 == 11)
+ {
+ u8 i;
+
+ ptr = &gUnknown_0203CEC8.unkE;
+ gUnknown_0203CEC8.unkE = 0;
+ if (gSpecialVar_0x8005 == 0)
+ {
+ for (i = 0; i < gPlayerPartyCount; i++)
+ *ptr += sub_81B2134(&gPlayerParty[i]) << i;
+ }
+ else
+ {
+ for (i = 0; i < gPlayerPartyCount; i++)
+ *ptr += sub_81B2164(&gPlayerParty[i]) << i;
+ }
+ }
+}
+
+bool16 sub_81B2134(struct Pokemon *mon)
+{
+ if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && sub_802C908(GetMonData(mon, MON_DATA_SPECIES)))
+ return TRUE;
+ return FALSE;
+}
+
+// Dodrio Berry Picking select?
+
+bool16 sub_81B2164(struct Pokemon *mon)
+{
+ if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_DODRIO)
+ return TRUE;
+ return FALSE;
+}
+
+bool8 sub_81B218C(u8 slot)
+{
+ if (!((gUnknown_0203CEC8.unkE >> slot) & 1))
+ return FALSE;
+ return TRUE;
+}
+
+void sub_81B21AC(u8 taskId, u8 slot)
+{
+ if (sub_81B218C(slot) == TRUE)
+ {
+ PlaySE(SE_SELECT);
+ gSpecialVar_0x8004 = slot;
+ sub_81B12C0(taskId);
+ }
+ else
+ {
+ PlaySE(SE_HAZURE);
+ sub_81B1B5C(gText_PkmnCantParticipate, 0);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+}
+
+void sub_81B2210(u8 taskId)
+{
+ sub_81B1B5C(gText_CancelParticipation, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B2248;
+}
+
+void sub_81B2248(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B227C;
+ }
+}
+
+void sub_81B227C(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gSpecialVar_0x8004 = 7;
+ sub_81B12C0(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ gTasks[taskId].func = sub_81B1C1C;
+ break;
+ }
+}
+
+u8 CanPartyPokemonLearnTMTutor(struct Pokemon *mon, u16 item, u8 tutor)
+{
+ u16 move;
+
+ if (GetMonData(mon, MON_DATA_IS_EGG))
+ return CANNOT_LEARN_MOVE_IS_EGG;
+ if (item >= ITEM_TM01_FOCUS_PUNCH)
+ {
+ if (CanMonLearnTMHM(mon, item - ITEM_TM01_FOCUS_PUNCH))
+ move = ItemIdToBattleMoveId(item);
+ else
+ return CANNOT_LEARN_MOVE;
+ do {} while (0); // :morphon:
+ }
+ else if (sub_81B2370(GetMonData(mon, MON_DATA_SPECIES), tutor) == FALSE)
+ {
+ return CANNOT_LEARN_MOVE;
+ }
+ else
+ {
+ move = sub_81B2360(tutor);
+ }
+
+ if (pokemon_has_move(mon, move) == TRUE)
+ return ALREADY_KNOWS_MOVE;
+ return CAN_LEARN_MOVE;
+}
+
+u16 sub_81B2360(u8 tutor)
+{
+ return gUnknown_0861500C[tutor];
+}
+
+bool8 sub_81B2370(u16 species, u8 tutor)
+{
+ if (gUnknown_08615048[species] & (1 << tutor))
+ return TRUE;
+ return FALSE;
+}
+
+void sub_81B239C(u8 a)
+{
+ u8 i;
+
+ switch (a)
+ {
+ case 0:
+ InitWindows(gUnknown_08615810);
+ break;
+ case 1:
+ InitWindows(gUnknown_08615850);
+ break;
+ case 2:
+ InitWindows(gUnknown_08615890);
+ break;
+ default:
+ InitWindows(gUnknown_086158D0);
+ break;
+ }
+ DeactivateAllTextPrinters();
+ for (i = 0; i < PARTY_SIZE; i++)
+ FillWindowPixelBuffer(i, 0);
+ LoadUserWindowBorderGfx(0, 0x4F, 0xD0);
+ LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20);
+ LoadPalette(gUnknown_0860F074, 0xF0, 0x20);
+}
+
+void sub_81B2428(bool8 a)
+{
+ u8 firstWindowId;
+ u8 windowId;
+ u8 offset;
+ u8 mainOffset;
+
+ if (gUnknown_0203CEC8.unk8_0 != 5)
+ {
+ if (a == TRUE)
+ {
+ firstWindowId = AddWindow(&gUnknown_08615918);
+ FillWindowPixelBuffer(firstWindowId, 0);
+ mainOffset = GetStringCenterAlignXOffset(0, gMenuText_Confirm, 48);
+ AddTextPrinterParameterized4(firstWindowId, 0, mainOffset, 1, 0, 0, gUnknown_086157FC[0], -1, gMenuText_Confirm);
+ PutWindowTilemap(firstWindowId);
+ CopyWindowToVram(firstWindowId, 2);
+ windowId = AddWindow(&gUnknown_08615910);
+ offset = 0;
+ }
+ else
+ {
+ windowId = AddWindow(&gUnknown_08615908);
+ offset = 3;
+ }
+ FillWindowPixelBuffer(windowId, 0);
+ if (gUnknown_0203CEC8.unk8_0 != 10)
+ {
+ mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel, 48);
+ AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, gUnknown_086157FC[0], -1, gText_Cancel);
+ }
+ else
+ {
+ mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel2, 48);
+ AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, gUnknown_086157FC[0], -1, gText_Cancel2);
+ }
+ PutWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 2);
+ schedule_bg_copy_tilemap_to_vram(0);
+ }
+}
+
+u16* GetPartyMenuPaletteFromBuffer(u8 paletteId)
+{
+ return &gUnknown_0203CEC4->palBuffer[paletteId];
+}
+
+void BlitBitmapToPartyWindow(u8 windowId, u8 *b, u8 c, u8 x, u8 y, u8 width, u8 height)
+{
+ u8 *pixels = AllocZeroed(height * width * 32);
+ u8 i, j;
+
+ if (pixels != NULL)
+ {
+ for (i = 0; i < height; i++)
+ {
+ for (j = 0; j < width; j++)
+ CpuCopy16(GetPartyMiscGraphicsTile(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32);
+ }
+ BlitBitmapToWindow(windowId, pixels, x * 8, y * 8, width * 8, height * 8);
+ Free(pixels);
+ }
+}
+
+void BlitBitmapToPartyWindow_Default1(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f)
+{
+ if (width == 0 && height == 0)
+ {
+ width = 10;
+ height = 7;
+ }
+ if (f == 0)
+ BlitBitmapToPartyWindow(windowId, gUnknown_08615988, 10, x, y, width, height);
+ else
+ BlitBitmapToPartyWindow(windowId, gUnknown_086159CE, 10, x, y, width, height);
+}
+
+void BlitBitmapToPartyWindow_Default2(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f)
+{
+ if (width == 0 && height == 0)
+ {
+ width = 18;
+ height = 3;
+ }
+ if (f == 0)
+ BlitBitmapToPartyWindow(windowId, gUnknown_08615A14, 18, x, y, width, height);
+ else
+ BlitBitmapToPartyWindow(windowId, gUnknown_08615A4A, 18, x, y, width, height);
+}
+
+void sub_81B2720(u8 windowId)
+{
+ BlitBitmapToPartyWindow(windowId, gUnknown_08615A80, 18, 0, 0, 18, 3);
+}
+
+void UpdateSelectedPartyBox(struct Struct203CEDC *ptr, u8 bitfield)
+{
+ u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16;
+
+ if (bitfield & 0x40)
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[0]), gUnknown_08615AC0[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[1]), gUnknown_08615AC0[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AF1[2]), gUnknown_08615AC0[2] + palNum, 2);
+ }
+ else if (bitfield & 0x20)
+ {
+ if (bitfield & 1)
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ else
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ }
+ else if (bitfield & 0x10)
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ else if (bitfield & 4)
+ {
+ if (bitfield & 1)
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ else
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ }
+ else if (bitfield & 2)
+ {
+ if (bitfield & 1)
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ADC[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ else
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD3[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE8[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ }
+ else if (bitfield & 8)
+ {
+ if (bitfield & 1)
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD9[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ else
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD0[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE5[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ }
+ else if (bitfield & 1)
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AD6[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+ else
+ {
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[0]), gUnknown_08615ABA[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[1]), gUnknown_08615ABA[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACD[2]), gUnknown_08615ABA[2] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[0]), gUnknown_08615ABD[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[1]), gUnknown_08615ABD[1] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AE2[2]), gUnknown_08615ABD[2] + palNum, 2);
+ }
+}
+
+void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, u8 *align)
+{
+ AddTextPrinterParameterized3(windowId, 0, align[0], align[1], gUnknown_086157FC[color], 0, str);
+}
+
+void DisplayPartyPokemonNickname(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c == 1)
+ ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[0] >> 3, ptr->unk0->unk4[1] >> 3, ptr->unk0->unk4[2] >> 3, ptr->unk0->unk4[3] >> 3, 0);
+ GetMonNickname(mon, nickname);
+ DisplayPartyPokemonBarDetail(ptr->windowId, nickname, 0, ptr->unk0->unk4);
+ }
+}
+
+void DisplayPartyPokemonLevelCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ u8 ailment = sub_81B205C(mon);
+ if (ailment == AILMENT_NONE || ailment == AILMENT_PKRS)
+ {
+ if (c != 0)
+ ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[4] >> 3, (ptr->unk0->unk4[5] >> 3) + 1, ptr->unk0->unk4[6] >> 3, ptr->unk0->unk4[7] >> 3, 0);
+ if (c != 2)
+ DisplayPartyPokemonLevel(GetMonData(mon, MON_DATA_LEVEL), ptr);
+ }
+ }
+}
+
+void DisplayPartyPokemonLevel(u8 level, struct Struct203CEDC *ptr)
+{
+ ConvertIntToDecimalStringN(gStringVar2, level, 0, 3);
+ StringCopy(gStringVar1, gText_LevelSymbol);
+ StringAppend(gStringVar1, gStringVar2);
+ DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[4]);
+}
+
+void DisplayPartyPokemonGenderNidoranCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+{
+ u8 nickname[POKEMON_NAME_LENGTH + 1];
+
+ if (c == 1)
+ ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[8] >> 3, (ptr->unk0->unk4[9] >> 3) + 1, ptr->unk0->unk4[10] >> 3, ptr->unk0->unk4[11] >> 3, 0);
+ GetMonNickname(mon, nickname);
+ DisplayPartyPokemonGender(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, ptr);
+}
+
+void DisplayPartyPokemonGender(u8 gender, u16 species, u8 *nickname, struct Struct203CEDC *ptr)
+{
+ u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16;
+
+ if (species == SPECIES_NONE)
+ return;
+ if ((species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) && StringCompare(nickname, gSpeciesNames[species]) == 0)
+ return;
+ switch (gender)
+ {
+ case MON_MALE:
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC3[0]), gUnknown_08615AB6[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC3[1]), gUnknown_08615AB6[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(ptr->windowId, gText_MaleSymbol, 2, &ptr->unk0->unk4[8]);
+ break;
+ case MON_FEMALE:
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC5[0]), gUnknown_08615AB6[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC5[1]), gUnknown_08615AB6[1] + palNum, 2);
+ DisplayPartyPokemonBarDetail(ptr->windowId, gText_FemaleSymbol, 2, &ptr->unk0->unk4[8]);
+ break;
+ }
+}
+
+void DisplayPartyPokemonHPCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c != 0)
+ ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk4[12] >> 3, (ptr->unk0->unk4[13] >> 3) + 1, ptr->unk0->unk4[14] >> 3, ptr->unk0->unk4[15] >> 3, 0);
+ if (c != 2)
+ DisplayPartyPokemonHP(GetMonData(mon, MON_DATA_HP), ptr);
+ }
+}
+
+void DisplayPartyPokemonHP(u16 hp, struct Struct203CEDC *ptr)
+{
+ u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, 1, 3);
+
+ strOut[0] = CHAR_SLASH;
+ strOut[1] = EOS;
+
+ DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[12]);
+}
+
+void DisplayPartyPokemonMaxHPCheck(struct Pokemon *mon, struct Struct203CEDC *ptr, u8 c)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ if (c != 0)
+ ptr->unk0->unk0(ptr->windowId, (ptr->unk0->unk4[16] >> 3) + 1, (ptr->unk0->unk4[17] >> 3) + 1, ptr->unk0->unk4[18] >> 3, ptr->unk0->unk4[19] >> 3, 0);
+ if (c != 2)
+ DisplayPartyPokemonMaxHP(GetMonData(mon, MON_DATA_MAX_HP), ptr);
+ }
+}
+
+void DisplayPartyPokemonMaxHP(u16 maxhp, struct Struct203CEDC *ptr)
+{
+ ConvertIntToDecimalStringN(gStringVar2, maxhp, 1, 3);
+ StringCopy(gStringVar1, gText_Slash);
+ StringAppend(gStringVar1, gStringVar2);
+ DisplayPartyPokemonBarDetail(ptr->windowId, gStringVar1, 0, &ptr->unk0->unk4[16]);
+}
+
+void DisplayPartyPokemonHPBarCheck(struct Pokemon *mon, struct Struct203CEDC *ptr)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ DisplayPartyPokemonHPBar(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), ptr);
+}
+
+void DisplayPartyPokemonHPBar(u16 hp, u16 maxhp, struct Struct203CEDC *ptr)
+{
+ u8 palNum = GetWindowAttribute(ptr->windowId, WINDOW_PALETTE_NUM) * 16;
+ u8 hpFraction;
+
+ switch (GetHPBarLevel(hp, maxhp))
+ {
+ case HP_BAR_GREEN:
+ case HP_BAR_FULL:
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC7[0]), gUnknown_08615AB8[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC7[1]), gUnknown_08615AB8[1] + palNum, 2);
+ break;
+ case HP_BAR_YELLOW:
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC9[0]), gUnknown_08615AB8[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615AC9[1]), gUnknown_08615AB8[1] + palNum, 2);
+ break;
+ default:
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACB[0]), gUnknown_08615AB8[0] + palNum, 2);
+ LoadPalette(GetPartyMenuPaletteFromBuffer(gUnknown_08615ACB[1]), gUnknown_08615AB8[1] + palNum, 2);
+ break;
+ }
+
+ hpFraction = GetScaledHPFraction(hp, maxhp, ptr->unk0->unk4[22]);
+ FillWindowPixelRect(ptr->windowId, gUnknown_08615AB8[1], ptr->unk0->unk4[20], ptr->unk0->unk4[21], hpFraction, 1);
+ FillWindowPixelRect(ptr->windowId, gUnknown_08615AB8[0], ptr->unk0->unk4[20], ptr->unk0->unk4[21] + 1, hpFraction, 2);
+ if (hpFraction != ptr->unk0->unk4[22])
+ {
+ FillWindowPixelRect(ptr->windowId, 13, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21], ptr->unk0->unk4[22] - hpFraction, 1);
+ FillWindowPixelRect(ptr->windowId, 2, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21] + 1, ptr->unk0->unk4[22] - hpFraction, 2);
+ }
+ CopyWindowToVram(ptr->windowId, 2);
+}
+
+#ifdef NONMATCHING
+void DisplayPartyPokemonOtherText(u8 stringID, struct Struct203CEDC *ptr, u8 c)
+{
+ if (c != 0)
+ {
+ int unk = ((ptr->unk0->unk1C & 7) + ptr->unk0->unk1E + 7) / 8;
+ int unk2 = ((ptr->unk0->unk1D & 7) + ptr->unk0->unk1F + 7) / 8;
+ ptr->unk0->unk0(ptr->windowId, ptr->unk0->unk1C >> 3, ptr->unk0->unk1D >> 3, unk, unk2, 1);
+ }
+ if (c != 2)
+ AddTextPrinterParameterized3(ptr->windowId, 1, ptr->unk0->unk1C, ptr->unk0->unk1D, gUnknown_086157FC[0], 0, gUnknown_08615B60[stringID]);
+}
+#else
+NAKED
+void DisplayPartyPokemonOtherText(u8 stringID, struct Struct203CEDC *ptr, u8 c)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0xC\n\
+ adds r6, r1, 0\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ lsls r2, 24\n\
+ lsrs r7, r2, 24\n\
+ cmp r7, 0\n\
+ beq _081B2FF2\n\
+ ldr r5, [r6]\n\
+ ldrb r1, [r5, 0x1C]\n\
+ movs r4, 0x7\n\
+ adds r0, r1, 0\n\
+ ands r0, r4\n\
+ ldrb r2, [r5, 0x1E]\n\
+ adds r0, r2\n\
+ adds r3, r0, 0x7\n\
+ asrs r3, 3\n\
+ ldrb r2, [r5, 0x1D]\n\
+ adds r0, r2, 0\n\
+ ands r0, r4\n\
+ ldrb r4, [r5, 0x1F]\n\
+ adds r0, r4\n\
+ adds r4, r0, 0x7\n\
+ ldrb r0, [r6, 0x8]\n\
+ lsrs r1, 3\n\
+ lsrs r2, 3\n\
+ lsrs r4, 3\n\
+ str r4, [sp]\n\
+ movs r4, 0x1\n\
+ str r4, [sp, 0x4]\n\
+ ldr r4, [r5]\n\
+ bl _call_via_r4\n\
+_081B2FF2:\n\
+ cmp r7, 0x2\n\
+ beq _081B3018\n\
+ ldrb r0, [r6, 0x8]\n\
+ ldr r1, [r6]\n\
+ ldrb r2, [r1, 0x1C]\n\
+ ldrb r3, [r1, 0x1D]\n\
+ ldr r1, =gUnknown_086157FC\n\
+ str r1, [sp]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+ ldr r4, =gUnknown_08615B60\n\
+ mov r5, r8\n\
+ lsls r1, r5, 2\n\
+ adds r1, r4\n\
+ ldr r1, [r1]\n\
+ str r1, [sp, 0x8]\n\
+ movs r1, 0x1\n\
+ bl AddTextPrinterParameterized3\n\
+_081B3018:\n\
+ add sp, 0xC\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+void sub_81B302C(u8 *ptr)
+{
+ if (*ptr != 0xFF)
+ {
+ sub_8198070(*ptr, 0);
+ RemoveWindow(*ptr);
+ *ptr = 0xFF;
+ schedule_bg_copy_tilemap_to_vram(2);
+ }
+}
+
+void display_pokemon_menu_message(u32 stringID)
+{
+ u8 *windowPtr = &gUnknown_0203CEC4->unkC[1];
+
+ if (*windowPtr != 0xFF)
+ sub_81B302C(windowPtr);
+
+ if (stringID != 0x7F)
+ {
+ switch (stringID)
+ {
+ case 21:
+ *windowPtr = AddWindow(&gUnknown_08615928);
+ break;
+ case 24:
+ *windowPtr = AddWindow(&gUnknown_08615930);
+ break;
+ case 25:
+ *windowPtr = AddWindow(&gUnknown_08615938);
+ break;
+ case 22:
+ case 23:
+ *windowPtr = AddWindow(&gUnknown_08615940);
+ break;
+ case 26:
+ *windowPtr = AddWindow(&gUnknown_08615948);
+ break;
+ default:
+ *windowPtr = AddWindow(&gUnknown_08615920);
+ break;
+ }
+ if (stringID == 0)
+ {
+ if (gUnknown_0203CEC4->unk8_0)
+ stringID = 2;
+ else if (sub_81B314C() == FALSE)
+ stringID = 1;
+ }
+ SetWindowBorderStyle(*windowPtr, FALSE, 0x4F, 0xD);
+ StringExpandPlaceholders(gStringVar4, gUnknown_08615AF4[stringID]);
+ AddTextPrinterParameterized(*windowPtr, 1, gStringVar4, 0, 1, 0, 0);
+ schedule_bg_copy_tilemap_to_vram(2);
+ }
+}
+
+bool8 sub_81B314C(void)
+{
+ struct Pokemon *party = gPlayerParty;
+ u8 i;
+ u8 j = 0;
+
+ if (gUnknown_0203CEC8.unkB == 1)
+ return TRUE;
+
+ for (i = 0; i < 6; i++)
+ {
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE && (GetMonData(&party[i], MON_DATA_HP) != 0 || GetMonData(&party[i], MON_DATA_IS_EGG)))
+ j++;
+ if (j > 1)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u8 sub_81B31B0(u8 a)
+{
+ struct WindowTemplate window;
+ u8 cursorDimension;
+ u8 fontAttribute;
+ u8 i;
+
+ switch (a)
+ {
+ case 0:
+ SetWindowTemplateFields(&window, 2, 19, 19 - (gUnknown_0203CEC4->unk17 * 2), 10, gUnknown_0203CEC4->unk17 * 2, 14, 0x2E9);
+ break;
+ case 1:
+ window = gUnknown_08615950;
+ break;
+ case 2:
+ window = gUnknown_08615958;
+ break;
+ default:
+ window = gUnknown_08615960;
+ break;
+ }
+
+ gUnknown_0203CEC4->unkC[0] = AddWindow(&window);
+ SetWindowBorderStyle(gUnknown_0203CEC4->unkC[0], FALSE, 0x4F, 13);
+ if (a == 3)
+ return gUnknown_0203CEC4->unkC[0];
+ cursorDimension = GetMenuCursorDimensionByFont(1, 0);
+ fontAttribute = GetFontAttribute(1, 2);
+
+ for (i = 0; i < gUnknown_0203CEC4->unk17; i++)
+ {
+ u8 unk = (gUnknown_0203CEC4->unkF[i] > 18) ? 4 : 3;
+ AddTextPrinterParameterized4(gUnknown_0203CEC4->unkC[0], 1, cursorDimension, (i * 16) + 1, fontAttribute, 0, gUnknown_086157FC[unk], 0, gUnknown_08615C08[gUnknown_0203CEC4->unkF[i]].textPtr);
+ }
+
+ InitMenuInUpperLeftCorner(gUnknown_0203CEC4->unkC[0], gUnknown_0203CEC4->unk17, 0, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+
+ return gUnknown_0203CEC4->unkC[0];
+}
+
+void sub_81B3300(const u8 *text)
+{
+ SetWindowBorderStyle(6, FALSE, 0x4F, 13);
+ gTextFlags.canABSpeedUpPrint = TRUE;
+ AddTextPrinterParameterized2(6, 1, text, GetPlayerTextSpeedDelay(), 0, 2, 1, 3);
+}
+
+void sub_81B334C(void)
+{
+ CreateYesNoMenu(&gUnknown_08615968, 0x4F, 13, 0);
+}
+
+u8 sub_81B3364(void)
+{
+ gUnknown_0203CEC4->unkC[0] = AddWindow(&gUnknown_08615970);
+ SetWindowBorderStyle(gUnknown_0203CEC4->unkC[0], FALSE, 0x4F, 13);
+ return gUnknown_0203CEC4->unkC[0];
+}
+
+void sub_81B3394(void)
+{
+ ClearWindowTilemap(gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+}
+
+void sub_81B33B4(struct Pokemon *mons, u8 a, u8 b)
+{
+ u8 i;
+
+ if (b == 0)
+ {
+ sub_81B3414(mons, a);
+ }
+ else
+ {
+ gUnknown_0203CEC4->unk17 = gUnknown_08615D70[b];
+ for (i = 0; i < gUnknown_0203CEC4->unk17; i++)
+ gUnknown_0203CEC4->unkF[i] = gUnknown_08615D38[b][i];
+ }
+}
+
+void sub_81B3414(struct Pokemon *mons, u8 a)
+{
+ u8 i, j;
+
+ gUnknown_0203CEC4->unk17 = 0;
+ AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 0);
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ for (j = 0; gUnknown_08615D7E[j] != MOVE_SWORDS_DANCE; j++)
+ {
+ if (GetMonData(&mons[a], i + MON_DATA_MOVE1) == gUnknown_08615D7E[j])
+ {
+ AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, j + 19);
+ break;
+ }
+ }
+ }
+ if (!InBattlePike())
+ {
+ if (GetMonData(&mons[1], MON_DATA_SPECIES) != SPECIES_NONE)
+ AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 1);
+ if (ItemIsMail(GetMonData(&mons[a], MON_DATA_HELD_ITEM)))
+ AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 6);
+ else
+ AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 3);
+ }
+ AppendToList(gUnknown_0203CEC4->unkF, &gUnknown_0203CEC4->unk17, 2);
+}
+
+u8 sub_81B353C(struct Pokemon *mon)
+{
+ u32 returnVar;
+
+ switch (gUnknown_0203CEC8.unk8_0)
+ {
+ case 0:
+ if (InMultiBattleRoom() == TRUE || GetMonData(mon, MON_DATA_IS_EGG))
+ returnVar = 1;
+ else
+ returnVar = 0;
+ break;
+ case 1:
+ returnVar = sub_81B8A2C(mon);
+ break;
+ case 4:
+ switch (sub_81B856C(gUnknown_0203CEC8.unk9))
+ {
+ default:
+ returnVar = 7;
+ break;
+ case 0:
+ returnVar = 4;
+ break;
+ case 1:
+ returnVar = 5;
+ break;
+ }
+ break;
+ case 6:
+ returnVar = (GetMonData(mon, MON_DATA_IS_EGG)) ? 7 : 6;
+ break;
+ case 8:
+ returnVar = 10;
+ break;
+ case 9:
+ returnVar = 11;
+ break;
+ case 10:
+ returnVar = 12;
+ break;
+ case 12:
+ returnVar = 13;
+ break;
+ default:
+ returnVar = 0;
+ break;
+ }
+ return returnVar;
+}
+
+bool8 sub_81B3608(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 item;
+
+ GetMonNickname(mon, gStringVar1);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ if (gUnknown_0203CEC8.unk8_0 != 12)
+ {
+ sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, sub_81B353C(mon));
+ sub_81B31B0(0);
+ display_pokemon_menu_message(21);
+ }
+ else
+ {
+ item = GetMonData(mon, MON_DATA_HELD_ITEM);
+ if (item != ITEM_NONE)
+ {
+ sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, sub_81B353C(mon));
+ sub_81B31B0(1);
+ CopyItemName(item, gStringVar2);
+ display_pokemon_menu_message(26);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B469C;
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+void sub_81B36FC(u8 taskId)
+{
+ if (sub_81B3608(taskId))
+ {
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = sub_81B3730;
+ }
+}
+
+void sub_81B3730(u8 taskId)
+{
+ s16 *data;
+ s8 input;
+
+ if (gPaletteFade.active == FALSE && sub_81221EC() != TRUE)
+ {
+ data = gTasks[taskId].data;
+ if (gUnknown_0203CEC4->unk17 <= 3)
+ input = Menu_ProcessInputNoWrapAround_other();
+ else
+ input = ProcessMenuInput_other();
+ data[0] = Menu_GetCursorPos();
+ if (input != MENU_NOTHING_CHOSEN)
+ {
+ if (input == MENU_B_PRESSED)
+ {
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[2]);
+ gUnknown_08615C08[gUnknown_0203CEC4->unkF[gUnknown_0203CEC4->unk17 - 1]].func(taskId);
+ }
+ else
+ {
+ sub_81B302C(&gUnknown_0203CEC4->unkC[2]);
+ gUnknown_08615C08[gUnknown_0203CEC4->unkF[input]].func(taskId);
+ }
+ }
+ }
+}
+
+void sub_81B37FC(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ gUnknown_0203CEC4->exitCallback = sub_81B3828;
+ sub_81B12C0(taskId);
+}
+
+void sub_81B3828(void)
+{
+ if (gUnknown_0203CEC8.unk8_0 == 1)
+ {
+ pokemon_change_order();
+ ShowPokemonSummaryScreen(PSS_MODE_UNK1, gPlayerParty, gUnknown_0203CEC8.unk9, gPlayerPartyCount - 1, sub_81B3894);
+ }
+ else
+ {
+ ShowPokemonSummaryScreen(PSS_MODE_NORMAL, gPlayerParty, gUnknown_0203CEC8.unk9, gPlayerPartyCount - 1, sub_81B3894);
+ }
+}
+
+void sub_81B3894(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ gUnknown_0203CEC8.unk9 = gUnknown_0203CF20;
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 21, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+}
+
+void brm_switch(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ gUnknown_0203CEC8.unkB = 8;
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ display_pokemon_menu_message(3);
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 1);
+ gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.unk9;
+ gTasks[taskId].func = sub_81B1370;
+}
+
+void sub_81B3938(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 windowIds[2];
+
+ if (gUnknown_0203CEC8.unkA == gUnknown_0203CEC8.unk9)
+ {
+ sub_81B407C(taskId);
+ }
+ else
+ {
+ windowIds[0] = gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId;
+ data[0] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_LEFT);
+ data[1] = GetWindowAttribute(windowIds[0], WINDOW_TILEMAP_TOP);
+ data[2] = GetWindowAttribute(windowIds[0], WINDOW_WIDTH);
+ data[3] = GetWindowAttribute(windowIds[0], WINDOW_HEIGHT);
+ data[8] = 0;
+ if (data[2] == 10)
+ data[10] = -1;
+ else
+ data[10] = 1;
+ windowIds[1] = gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId;
+ data[4] = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_LEFT);
+ data[5] = GetWindowAttribute(windowIds[1], WINDOW_TILEMAP_TOP);
+ data[6] = GetWindowAttribute(windowIds[1], WINDOW_WIDTH);
+ data[7] = GetWindowAttribute(windowIds[1], WINDOW_HEIGHT);
+ data[9] = 0;
+ if (data[6] == 10)
+ data[11] = -1;
+ else
+ data[11] = 1;
+ gUnknown_0203CEF0 = Alloc(data[2] * (data[3] << 1));
+ gUnknown_0203CEF4 = Alloc(data[6] * (data[7] << 1));
+ sub_8199CBC(0, gUnknown_0203CEF0, data[0], data[1], data[2], data[3]);
+ sub_8199CBC(0, gUnknown_0203CEF4, data[4], data[5], data[6], data[7]);
+ ClearWindowTilemap(windowIds[0]);
+ ClearWindowTilemap(windowIds[1]);
+ gUnknown_0203CEC8.unkB = 9;
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 1);
+ sub_81B0FCC(gUnknown_0203CEC8.unkA, 1);
+ sub_81B3CC0(taskId);
+ gTasks[taskId].func = sub_81B3D48;
+ }
+}
+
+#ifdef NONMATCHING
+bool8 sub_81B3AD8(s16 a, s16 b, u8 *c, u8 *d, u8 *e)
+{
+
+ if ((a + b) < 0 || a > 31)
+ {
+ return FALSE;
+ }
+ if (a < 0)
+ {
+ *c = -a;
+ *d = 0;
+ *e = a + b;
+ return TRUE;
+ }
+ else
+ {
+ *c = 0;
+ *d = a;
+ if ((a + b) > 31)
+ *e = 32 - a;
+ else
+ *e = b;
+ return TRUE;
+ }
+
+}
+#else
+NAKED
+bool8 sub_81B3AD8(s16 a, s16 b, u8 *c, u8 *d, u8 *e)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ adds r6, r2, 0\n\
+ mov r12, r3\n\
+ ldr r7, [sp, 0x18]\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ adds r5, r3, 0\n\
+ lsls r1, 16\n\
+ lsrs r2, r1, 16\n\
+ mov r8, r2\n\
+ lsls r0, r3, 16\n\
+ asrs r1, r0, 16\n\
+ lsls r0, r2, 16\n\
+ asrs r0, 16\n\
+ adds r4, r1, r0\n\
+ cmp r4, 0\n\
+ blt _081B3B02\n\
+ cmp r1, 0x1F\n\
+ ble _081B3B06\n\
+_081B3B02:\n\
+ movs r0, 0\n\
+ b _081B3B34\n\
+_081B3B06:\n\
+ cmp r1, 0\n\
+ bge _081B3B1A\n\
+ negs r0, r1\n\
+ strb r0, [r6]\n\
+ movs r0, 0\n\
+ mov r1, r12\n\
+ strb r0, [r1]\n\
+ adds r0, r2, r3\n\
+ strb r0, [r7]\n\
+ b _081B3B32\n\
+_081B3B1A:\n\
+ movs r0, 0\n\
+ strb r0, [r6]\n\
+ mov r0, r12\n\
+ strb r5, [r0]\n\
+ cmp r4, 0x1F\n\
+ ble _081B3B2E\n\
+ movs r0, 0x20\n\
+ subs r0, r5\n\
+ strb r0, [r7]\n\
+ b _081B3B32\n\
+_081B3B2E:\n\
+ mov r1, r8\n\
+ strb r1, [r7]\n\
+_081B3B32:\n\
+ movs r0, 0x1\n\
+_081B3B34:\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n");
+}
+#endif
+
+void sub_81B3B40(const void *rectSrc, s16 a, s16 b, s16 c, s16 d, s16 e)
+{
+ u8 f, g, h;
+
+ if (sub_81B3AD8(a, c, &f, &g, &h))
+ {
+ FillBgTilemapBufferRect_Palette0(0, 0, g, b, h, d);
+ if (sub_81B3AD8(a + e, c, &f, &g, &h))
+ CopyRectToBgTilemapBufferRect(0, rectSrc, f, 0, c, d, g, b, h, d, 17, 0, 0);
+ }
+}
+
+void sub_81B3C0C(struct Struct203CEDC *ptr, s16 a)
+{
+ gSprites[ptr->unkB].pos2.x += a * 8;
+ gSprites[ptr->unkA].pos2.x += a * 8;
+ gSprites[ptr->unk9].pos2.x += a * 8;
+ gSprites[ptr->unkC].pos2.x += a * 8;
+}
+
+void sub_81B3C60(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[10] != 0)
+ sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], data[10]);
+ if (data[11] != 0)
+ sub_81B3C0C(&gUnknown_0203CEDC[gUnknown_0203CEC8.unkA], data[11]);
+}
+
+void sub_81B3CC0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[10] != 0)
+ sub_81B3B40(gUnknown_0203CEF0, data[0] + data[8], data[1], data[2], data[3], data[10]);
+ if (data[11] != 0)
+ sub_81B3B40(gUnknown_0203CEF4, data[4] + data[9], data[5], data[6], data[7], data[11]);
+ schedule_bg_copy_tilemap_to_vram(0);
+}
+
+void sub_81B3D48(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u16 tilemapRelatedMaybe[2];
+
+ sub_81B3CC0(taskId);
+ sub_81B3C60(taskId);
+ data[8] += data[10];
+ data[9] += data[11];
+ tilemapRelatedMaybe[0] = data[0] + data[8];
+ tilemapRelatedMaybe[1] = data[4] + data[9];
+ if (tilemapRelatedMaybe[0] > 33 && tilemapRelatedMaybe[1] > 33)
+ {
+ data[10] *= -1;
+ data[11] *= -1;
+ swap_pokemon_and_oams();
+ DisplayPartyPokemonData(gUnknown_0203CEC8.unk9);
+ DisplayPartyPokemonData(gUnknown_0203CEC8.unkA);
+ PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId);
+ PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId);
+ sub_8199CBC(0, gUnknown_0203CEF0, data[0], data[1], data[2], data[3]);
+ sub_8199CBC(0, gUnknown_0203CEF4, data[4], data[5], data[6], data[7]);
+ ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId);
+ ClearWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId);
+ gTasks[taskId].func = sub_81B3E60;
+ }
+}
+
+void sub_81B3E60(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ sub_81B3CC0(taskId);
+ sub_81B3C60(taskId);
+ if (data[10] == 0 && data[11] == 0)
+ {
+ PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].windowId);
+ PutWindowTilemap(gUnknown_0203CEDC[gUnknown_0203CEC8.unkA].windowId);
+ schedule_bg_copy_tilemap_to_vram(0);
+ Free(gUnknown_0203CEF0);
+ Free(gUnknown_0203CEF4);
+ sub_81B407C(taskId);
+ }
+ else
+ {
+ data[8] += data[10];
+ data[9] += data[11];
+ if (data[8] == 0)
+ data[10] = 0;
+ if (data[9] == 0)
+ data[11] = 0;
+ }
+}
+
+void oamt_swap_pos(u8 *spriteIdPtr1, u8 *spriteIdPtr2)
+{
+ u8 spriteIdBuffer = *spriteIdPtr1;
+ u16 xBuffer1, yBuffer1, xBuffer2, yBuffer2;
+
+ *spriteIdPtr1 = *spriteIdPtr2;
+ *spriteIdPtr2 = spriteIdBuffer;
+ xBuffer1 = gSprites[*spriteIdPtr1].pos1.x;
+ yBuffer1 = gSprites[*spriteIdPtr1].pos1.y;
+ xBuffer2 = gSprites[*spriteIdPtr1].pos2.x;
+ yBuffer2 = gSprites[*spriteIdPtr1].pos2.y;
+ gSprites[*spriteIdPtr1].pos1.x = gSprites[*spriteIdPtr2].pos1.x;
+ gSprites[*spriteIdPtr1].pos1.y = gSprites[*spriteIdPtr2].pos1.y;
+ gSprites[*spriteIdPtr1].pos2.x = gSprites[*spriteIdPtr2].pos2.x;
+ gSprites[*spriteIdPtr1].pos2.y = gSprites[*spriteIdPtr2].pos2.y;
+ gSprites[*spriteIdPtr2].pos1.x = xBuffer1;
+ gSprites[*spriteIdPtr2].pos1.y = yBuffer1;
+ gSprites[*spriteIdPtr2].pos2.x = xBuffer2;
+ gSprites[*spriteIdPtr2].pos2.y = yBuffer2;
+}
+
+void swap_pokemon_and_oams(void)
+{
+ struct Struct203CEDC *structPtrs[2];
+ struct Pokemon *mon1, *mon2;
+ struct Pokemon *monBuffer;
+
+ structPtrs[0] = &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9];
+ structPtrs[1] = &gUnknown_0203CEDC[gUnknown_0203CEC8.unkA];
+ mon1 = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ mon2 = &gPlayerParty[gUnknown_0203CEC8.unkA];
+ monBuffer = Alloc(sizeof(struct Pokemon));
+ *monBuffer = *mon1;
+ *mon1 = *mon2;
+ *mon2 = *monBuffer;
+ Free(monBuffer);
+ oamt_swap_pos(&structPtrs[0]->unkB, &structPtrs[1]->unkB);
+ oamt_swap_pos(&structPtrs[0]->unkA, &structPtrs[1]->unkA);
+ oamt_swap_pos(&structPtrs[0]->unk9, &structPtrs[1]->unk9);
+ oamt_swap_pos(&structPtrs[0]->unkC, &structPtrs[1]->unkC);
+}
+
+void sub_81B407C(u8 taskId)
+{
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ gUnknown_0203CEC8.unkB = 0;
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 0);
+ gUnknown_0203CEC8.unk9 = gUnknown_0203CEC8.unkA;
+ sub_81B0FCC(gUnknown_0203CEC8.unkA, 1);
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+}
+
+void brm_cancel_1(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ if (gUnknown_0203CEC8.unk8_0 == 6)
+ display_pokemon_menu_message(15);
+ else
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+}
+
+void sub_81B4134(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, 8);
+ sub_81B31B0(1);
+ display_pokemon_menu_message(24);
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = sub_81B3730;
+}
+
+void sub_81B4198(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ gUnknown_0203CEC4->exitCallback = sub_81B41C4;
+ sub_81B12C0(taskId);
+}
+
+void sub_81B41C4(void)
+{
+ if (InBattlePyramid() == FALSE)
+ GoToBagMenu(RETURN_LOCATION_POKEMON_LIST, POCKETS_COUNT, c2_8123744);
+ else
+ sub_81C4F98(2, c2_8123744);
+}
+
+void c2_8123744(void)
+{
+ if (gSpecialVar_ItemId == ITEM_NONE)
+ {
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+ }
+ else
+ {
+ gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_HELD_ITEM);
+ if (gUnknown_0203CEFC != ITEM_NONE)
+ {
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B4350, gUnknown_0203CEC8.exitCallback);
+ }
+ else if (ItemIsMail(gSpecialVar_ItemId))
+ {
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId);
+ sub_81B452C();
+ }
+ else
+ {
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B42D0, gUnknown_0203CEC8.exitCallback);
+ }
+ }
+}
+
+void sub_81B42D0(u8 taskId)
+{
+ u16 item;
+
+ if (!gPaletteFade.active)
+ {
+ item = gSpecialVar_ItemId;
+ sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], item, 0, 0);
+ sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], item);
+ RemoveBagItem(item, 1);
+ gTasks[taskId].func = sub_81B469C;
+ }
+}
+
+void sub_81B4350(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEFC, 1);
+ gTasks[taskId].func = sub_81B43A8;
+ }
+}
+
+void sub_81B43A8(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B43DC;
+ }
+}
+
+void sub_81B43DC(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ if (AddBagItem(gUnknown_0203CEFC, 1) == FALSE)
+ {
+ AddBagItem(gSpecialVar_ItemId, 1);
+ pokemon_item_not_removed(gUnknown_0203CEFC);
+ sub_81B1B5C(gStringVar4, 0);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+ else if (ItemIsMail(gSpecialVar_ItemId))
+ {
+ sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId);
+ gTasks[taskId].func = sub_81B44FC;
+ }
+ else
+ {
+ sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId);
+ sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 1);
+ gTasks[taskId].func = sub_81B469C;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ gTasks[taskId].func = sub_81B1C1C;
+ break;
+ }
+}
+
+void sub_81B44FC(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ gUnknown_0203CEC4->exitCallback = sub_81B452C;
+ sub_81B12C0(taskId);
+ }
+}
+
+void sub_81B452C(void)
+{
+ u8 mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAIL);
+
+ sub_811A20C(4, gSaveBlock1Ptr->mail[mail].words, sub_81B4578, 3);
+}
+
+void sub_81B4578(void)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ if (gSpecialVar_Result == FALSE)
+ {
+ TakeMailFromMon(mon);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &gUnknown_0203CEFC);
+ RemoveBagItem(gUnknown_0203CEFC, 1);
+ AddBagItem(item, 1);
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+ }
+ else
+ {
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B4624, gUnknown_0203CEC8.exitCallback);
+ }
+}
+
+void sub_81B4624(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_0203CEFC == ITEM_NONE)
+ sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], gSpecialVar_ItemId, 0, 0);
+ else
+ sub_81B1D68(gSpecialVar_ItemId, gUnknown_0203CEFC, 0);
+ gTasks[taskId].func = sub_81B469C;
+ }
+}
+
+void sub_81B469C(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]);
+ if (gUnknown_0203CEC8.unk8_0 == 12)
+ {
+ if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE)
+ DisplayPartyPokemonOtherText(11, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1);
+ else
+ DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1);
+ }
+ sub_81B1C1C(taskId);
+ }
+}
+
+void sub_81B4724(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ switch (sub_81B1E00(mon))
+ {
+ case 0:
+ GetMonNickname(mon, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
+ sub_81B1B5C(gStringVar4, 1);
+ break;
+ case 1:
+ pokemon_item_not_removed(item);
+ sub_81B1B5C(gStringVar4, 1);
+ break;
+ default:
+ sub_81B1CD0(mon, item, 1);
+ break;
+ }
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B469C;
+}
+
+void sub_81B47E0(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ if (item == ITEM_NONE)
+ {
+ GetMonNickname(mon, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnNotHolding);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B469C;
+ }
+ else
+ {
+ CopyItemName(item, gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_ThrowAwayItem);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B48A8;
+ }
+}
+
+void sub_81B48A8(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B48DC;
+ }
+}
+
+void sub_81B48DC(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ CopyItemName(GetMonData(mon, MON_DATA_HELD_ITEM), gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_ItemThrownAway);
+ sub_81B1B5C(gStringVar4, 0);
+ gTasks[taskId].func = sub_81B4988;
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ gTasks[taskId].func = sub_81B1C1C;
+ break;
+ }
+}
+
+void sub_81B4988(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 itemClear;
+
+ if (sub_81B1BD4() != TRUE)
+ {
+ itemClear = ITEM_NONE;
+ SetMonData(mon, MON_DATA_HELD_ITEM, &itemClear);
+ sub_81B5C94(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]);
+ DisplayPartyPokemonOtherText(12, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+}
+
+void sub_81B4A08(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, 9);
+ sub_81B31B0(2);
+ display_pokemon_menu_message(25);
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = sub_81B3730;
+}
+
+void sub_81B4A6C(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ gUnknown_0203CEC4->exitCallback = sub_81B4A98;
+ sub_81B12C0(taskId);
+}
+
+void sub_81B4A98(void)
+{
+ ReadMail(&gSaveBlock1Ptr->mail[GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAIL)], sub_81B4AE0, 1);
+}
+
+void sub_81B4AE0(void)
+{
+ gPaletteFade.bufferTransferDisabled = TRUE;
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 21, sub_81B36FC, gUnknown_0203CEC8.exitCallback);
+}
+
+void brm_take_2(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B1B5C(gText_SendMailToPC, 1);
+ gTasks[taskId].func = sub_81B4B6C;
+}
+
+void sub_81B4B6C(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B4BA0;
+ }
+}
+
+void sub_81B4BA0(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ if (TakeMailFromMon2(&gPlayerParty[gUnknown_0203CEC8.unk9]) != 0xFF)
+ {
+ sub_81B1B5C(gText_MailSentToPC, 0);
+ gTasks[taskId].func = sub_81B469C;
+ }
+ else
+ {
+ sub_81B1B5C(gText_PCMailboxFull, 0);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ sub_81B1B5C(gText_MailMessageWillBeLost, 1);
+ gTasks[taskId].func = sub_81B4C60;
+ break;
+ }
+}
+
+void sub_81B4C60(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B4C94;
+ }
+}
+
+void sub_81B4C94(u8 taskId)
+{
+ u16 item;
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ item = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_HELD_ITEM);
+ if (AddBagItem(item, 1) == TRUE)
+ {
+ TakeMailFromMon(&gPlayerParty[gUnknown_0203CEC8.unk9]);
+ sub_81B1B5C(gText_MailTakenFromPkmn, 0);
+ gTasks[taskId].func = sub_81B469C;
+ }
+ else
+ {
+ pokemon_item_not_removed(item);
+ sub_81B1B5C(gStringVar4, 0);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ gTasks[taskId].func = sub_81B1C1C;
+ break;
+ }
+}
+
+void sub_81B4D78(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B33B4(gPlayerParty, gUnknown_0203CEC8.unk9, sub_81B353C(mon));
+ if (gUnknown_0203CEC8.unk8_0 != 12)
+ {
+ sub_81B31B0(0);
+ display_pokemon_menu_message(21);
+ }
+ else
+ {
+ sub_81B31B0(1);
+ CopyItemName(GetMonData(mon, MON_DATA_HELD_ITEM), gStringVar2);
+ display_pokemon_menu_message(26);
+ }
+ gTasks[taskId].data[0] = 0xFF;
+ gTasks[taskId].func = sub_81B3730;
+}
+
+void brm_shift_sendout(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ if (sub_81B8A7C() == TRUE)
+ {
+ sub_81B12C0(taskId);
+ }
+ else
+ {
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+}
+
+void sub_81B4E8C(u8 taskId)
+{
+ u8 unk;
+ u8 i;
+
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ unk = sub_81B8830();
+ for (i = 0; i < unk; i++)
+ {
+ if (gSelectedOrderFromParty[i] == 0)
+ {
+ PlaySE(SE_SELECT);
+ gSelectedOrderFromParty[i] = gUnknown_0203CEC8.unk9 + 1;
+ DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1);
+ if (i == (unk - 1))
+ sub_81B4F88();
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+ return;
+ }
+ }
+ ConvertIntToDecimalStringN(gStringVar1, unk, 0, 1);
+ StringExpandPlaceholders(gStringVar4, gText_NoMoreThanVar1Pkmn);
+ PlaySE(SE_HAZURE);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B1C1C;
+}
+
+void sub_81B4F88(void)
+{
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 0);
+ gUnknown_0203CEC8.unk9 = 6;
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 1);
+}
+
+void sub_81B4FA8(u8 taskId)
+{
+ u8 unk;
+ u8 i, j;
+
+ PlaySE(SE_SELECT);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ unk = sub_81B8830();
+ for (i = 0; i < unk; i++)
+ {
+ if (gSelectedOrderFromParty[i] == (gUnknown_0203CEC8.unk9 + 1))
+ {
+ for (j = i; j < (unk - 1); j++)
+ gSelectedOrderFromParty[j] = gSelectedOrderFromParty[j + 1];
+ gSelectedOrderFromParty[j] = 0;
+ break;
+ }
+ }
+ DisplayPartyPokemonOtherText(1, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1);
+ for (i = 0; i < (unk - 1); i++)
+ {
+ if (gSelectedOrderFromParty[i] != 0)
+ DisplayPartyPokemonOtherText(i + 2, &gUnknown_0203CEDC[gSelectedOrderFromParty[i] - 1], 1);
+ }
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+}
+
+void sub_81B50AC(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81B12C0(taskId);
+}
+
+void sub_81B50C8(u8 taskId)
+{
+ u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES2);
+ u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES);
+ u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_OBEDIENCE);
+
+ switch (sub_807A8D0(*(u32 *)sub_800F7DC() /* dirty cast, probably needs to be changed */, species2, species, obedience))
+ {
+ case 1:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
+ break;
+ case 2:
+ StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sub_81B12C0(taskId);
+ return;
+ }
+ PlaySE(SE_HAZURE);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ StringAppend(gStringVar4, gText_PauseUntilPress);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B1C1C;
+}
+
+void brm_trade_1(u8 taskId)
+{
+ u16 species2 = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES2);
+ u16 species = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES);
+ u8 obedience = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_OBEDIENCE);
+ u32 stringId = sub_807A7E0(*(u32 *)sub_800F7DC() /* dirty cast, probably needs to be changed */, *(u32 *)&gUnknown_02022C38 /* dirty cast, probably needs to be changed */, species2, gUnknown_02022C3C, gUnknown_02022C3E, species, obedience);
+
+ if (stringId != 0)
+ {
+ StringExpandPlaceholders(gStringVar4, gUnknown_08615E0C[stringId - 1]);
+ PlaySE(SE_HAZURE);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ StringAppend(gStringVar4, gText_PauseUntilPress);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ sub_81B12C0(taskId);
+ }
+}
+
+void sub_81B52E4(u8 taskId)
+{
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ switch (sub_807A918(gPlayerParty, gUnknown_0203CEC8.unk9))
+ {
+ case 1:
+ StringExpandPlaceholders(gStringVar4, gText_OnlyPkmnForBattle);
+ break;
+ case 2:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
+ break;
+ case 3:
+ StringExpandPlaceholders(gStringVar4, gText_EggCantBeTradedNow);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gJPText_PutVar1IntoSpinner);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B53FC;
+ return;
+ }
+ PlaySE(SE_HAZURE);
+ StringAppend(gStringVar4, gText_PauseUntilPress);
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B1C1C;
+}
+
+void sub_81B53FC(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B5430;
+ }
+}
+
+void sub_81B5430(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ sub_81B12C0(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ sub_81B1C1C(taskId);
+ break;
+ }
+}
+
+void sub_81B5470(u8 taskId)
+{
+ u8 fieldMove = gUnknown_0203CEC4->unkF[Menu_GetCursorPos()] - 19;
+ struct MapHeader const *mapHeader;
+ u8 fieldMove2;
+
+ PlaySE(SE_SELECT);
+ if (gUnknown_08615D9C[fieldMove].fieldMoveFunc != NULL)
+ {
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ if (sub_81221AC() == TRUE || InUnionRoom() == TRUE)
+ {
+ fieldMove2 = fieldMove - 11;
+ if (fieldMove2 <= 1)
+ display_pokemon_menu_message(13);
+ else
+ display_pokemon_menu_message(gUnknown_08615D9C[fieldMove].msgID);
+ gTasks[taskId].func = task_brm_cancel_1_on_keypad_a_or_b;
+ }
+ else
+ {
+ if (fieldMove <= 7 && FlagGet(FLAG_BADGE01_GET + fieldMove) != TRUE)
+ {
+ sub_81B1B5C(gText_CantUseUntilNewBadge, 1);
+ gTasks[taskId].func = sub_81B1C1C;
+ }
+ else if (gUnknown_08615D9C[fieldMove].fieldMoveFunc() == TRUE)
+ {
+ switch (fieldMove - 5)
+ {
+ case 6:
+ case 7:
+ sub_8161560(taskId);
+ break;
+ case 3:
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum);
+ sub_81245DC(gStringVar1, mapHeader->regionMapSectionId);
+ StringExpandPlaceholders(gStringVar4, gText_ReturnToHealingSpot);
+ sub_81B5674(taskId);
+ gUnknown_0203CEC4->data[0] = fieldMove;
+ break;
+ case 4:
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp4.mapGroup, gSaveBlock1Ptr->warp4.mapNum);
+ sub_81245DC(gStringVar1, mapHeader->regionMapSectionId);
+ StringExpandPlaceholders(gStringVar4, gText_EscapeFromHere);
+ sub_81B5674(taskId);
+ gUnknown_0203CEC4->data[0] = fieldMove;
+ break;
+ case 0:
+ gUnknown_0203CEC8.exitCallback = MCB2_FlyMap;
+ sub_81B12C0(taskId);
+ break;
+ default:
+ gUnknown_0203CEC8.exitCallback = CB2_ReturnToField;
+ sub_81B12C0(taskId);
+ break;
+ }
+ }
+ else
+ {
+ switch (fieldMove)
+ {
+ case 4:
+ sub_81B5864();
+ break;
+ case 1:
+ sub_81B57DC();
+ break;
+ default:
+ display_pokemon_menu_message(gUnknown_08615D9C[fieldMove].msgID);
+ break;
+ }
+ gTasks[taskId].func = task_brm_cancel_1_on_keypad_a_or_b;
+ }
+ }
+ }
+}
+
+void sub_81B5674(u8 taskId)
+{
+ sub_81B1B5C(gStringVar4, 1);
+ gTasks[taskId].func = sub_81B56A4;
+}
+
+void sub_81B56A4(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B56D8;
+ }
+}
+
+void sub_81B56D8(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ gUnknown_0203CEC8.exitCallback = CB2_ReturnToField;
+ sub_81B12C0(taskId);
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ gFieldCallback2 = NULL;
+ gPostMenuFieldCallback = NULL;
+ sub_81B1C1C(taskId);
+ break;
+ }
+}
+
+bool8 FieldCallback_PrepareFadeInFromMenu(void)
+{
+ pal_fill_black();
+ CreateTask(task_launch_hm_phase_2, 8);
+ return TRUE;
+}
+
+void task_launch_hm_phase_2(u8 taskId)
+{
+ if (IsWeatherNotFadingIn() == TRUE)
+ {
+ gFieldEffectArguments[0] = brm_get_selected_species();
+ gPostMenuFieldCallback();
+ DestroyTask(taskId);
+ }
+}
+
+u16 brm_get_selected_species(void)
+{
+ return GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES);
+}
+
+void task_brm_cancel_1_on_keypad_a_or_b(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ brm_cancel_1(taskId);
+}
+
+void sub_81B57DC(void)
+{
+ if (FlagGet(FLAG_SYS_USE_FLASH) == TRUE)
+ display_pokemon_menu_message(12);
+ else
+ display_pokemon_menu_message(13);
+}
+
+void hm_surf_run_dp02scr(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ FieldEffectStart(FLDEFF_USE_SURF);
+}
+
+bool8 sub_81B5820(void)
+{
+ if (PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm_surf_run_dp02scr;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_81B5864(void)
+{
+ if (TestPlayerAvatarFlags(8))
+ display_pokemon_menu_message(9);
+ else
+ display_pokemon_menu_message(8);
+}
+
+bool8 sub_81B5884(void)
+{
+ if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_81B58A8(void)
+{
+ InitPartyMenu(0, 0, 0, 1, 0, sub_81B1370, CB2_ReturnToFieldWithOpenMenu);
+}
+
+void hm2_waterfall(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ FieldEffectStart(FLDEFF_USE_WATERFALL);
+}
+
+bool8 hm_prepare_waterfall(void)
+{
+ s16 x, y;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE && IsPlayerSurfingNorth() == TRUE)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = hm2_waterfall;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_81B5958(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ FieldEffectStart(FLDEFF_USE_DIVE);
+}
+
+bool8 sub_81B5974(void)
+{
+ gFieldEffectArguments[1] = TrySetDiveWarp();
+ if (gFieldEffectArguments[1] != 0)
+ {
+ gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gPostMenuFieldCallback = sub_81B5958;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void party_menu_icon_anim(struct Pokemon *mon, struct Struct203CEDC *ptr, u32 a)
+{
+ u32 bit = 1;
+ u16 species2;
+
+ if (IsMultiBattle() == TRUE && gMain.inBattle)
+ bit = (gUnknown_08616020[a] ^ bit) ? 1 : 0;
+ species2 = GetMonData(mon, MON_DATA_SPECIES2);
+ party_menu_link_mon_icon_anim(species2, GetMonData(mon, MON_DATA_PERSONALITY), ptr, 1, bit);
+ sub_81B5B38(ptr->unk9, mon);
+}
+
+void party_menu_link_mon_icon_anim(u16 species, u32 pid, struct Struct203CEDC *ptr, u8 priority, u32 bit)
+{
+ if (species != SPECIES_NONE)
+ {
+ ptr->unk9 = CreateMonIcon(species, sub_80D3014, ptr->unk4[0], ptr->unk4[1], 4, pid, bit);
+ gSprites[ptr->unk9].oam.priority = priority;
+ }
+}
+
+void sub_81B5A8C(u8 spriteId, u16 hp, u16 maxhp)
+{
+ switch (GetHPBarLevel(hp, maxhp))
+ {
+ case HP_BAR_FULL:
+ sub_80D32C8(&gSprites[spriteId], 0);
+ break;
+ case HP_BAR_GREEN:
+ sub_80D32C8(&gSprites[spriteId], 1);
+ break;
+ case HP_BAR_YELLOW:
+ sub_80D32C8(&gSprites[spriteId], 2);
+ break;
+ case HP_BAR_RED:
+ sub_80D32C8(&gSprites[spriteId], 3);
+ break;
+ default:
+ sub_80D32C8(&gSprites[spriteId], 4);
+ break;
+ }
+}
+
+void sub_81B5B38(u8 spriteId, struct Pokemon *mon)
+{
+ sub_81B5A8C(spriteId, GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP));
+}
+
+void AnimateSelectedPartyIcon(u8 spriteId, u8 a)
+{
+ gSprites[spriteId].data[0] = 0;
+ if (a == 0)
+ {
+ if (gSprites[spriteId].pos1.x == 16)
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = -4;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = -4;
+ gSprites[spriteId].pos2.y = 0;
+ }
+ gSprites[spriteId].callback = UpdatePartyMonIconFrame;
+ }
+ else
+ {
+ gSprites[spriteId].pos2.x = 0;
+ gSprites[spriteId].pos2.y = 0;
+ gSprites[spriteId].callback = UpdatePartyMonIconFrameAndBounce;
+ }
+}
+
+void UpdatePartyMonIconFrameAndBounce(struct Sprite *sprite)
+{
+ u8 unk = UpdateMonIconFrame(sprite);
+
+ if (unk != 0)
+ {
+ if (unk & 1)
+ sprite->pos2.y = -3;
+ else
+ sprite->pos2.y = 1;
+ }
+}
+
+void UpdatePartyMonIconFrame(struct Sprite *sprite)
+{
+ UpdateMonIconFrame(sprite);
+}
+
+void party_menu_held_item_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ ptr->unkA = CreateSprite(&gSpriteTemplate_8615EC0, ptr->unk4[2], ptr->unk4[3], 0);
+ sub_81B5C94(mon, ptr);
+ }
+}
+
+void party_menu_link_mon_held_item_object(u16 species, u16 item, struct Struct203CEDC *ptr)
+{
+ if (species != SPECIES_NONE)
+ {
+ ptr->unkA = CreateSprite(&gSpriteTemplate_8615EC0, ptr->unk4[2], ptr->unk4[3], 0);
+ gSprites[ptr->unkA].oam.priority = 0;
+ sub_81B5CB0(item, ptr);
+ }
+}
+
+void sub_81B5C94(struct Pokemon *mon, struct Struct203CEDC *ptr)
+{
+ sub_81B5CB0(GetMonData(mon, MON_DATA_HELD_ITEM), ptr);
+}
+
+void sub_81B5CB0(u16 item, struct Struct203CEDC *ptr)
+{
+ if (item == ITEM_NONE)
+ {
+ gSprites[ptr->unkA].invisible = TRUE;
+ }
+ else
+ {
+ if (ItemIsMail(item))
+ StartSpriteAnim(&gSprites[ptr->unkA], 1);
+ else
+ StartSpriteAnim(&gSprites[ptr->unkA], 0);
+ gSprites[ptr->unkA].invisible = FALSE;
+ }
+}
+
+void LoadHeldItemIcons(void)
+{
+ LoadSpriteSheet(&gUnknown_08615EB0);
+ LoadSpritePalette(&gUnknown_08615EB8);
+}
+
+void sub_81B5D4C(u8 *a, u8 *b, u8 c)
+{
+ u16 i;
+ u16 item;
+
+ switch (c)
+ {
+ case 0:
+ for (i = 0; i < a[0]; i++)
+ {
+ item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM);
+ if (item != ITEM_NONE)
+ sub_81B5DF0(b[i], ItemIsMail(item));
+ }
+ break;
+ case 1:
+ for (i = 0; i < a[1]; i++)
+ {
+ item = GetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM);
+ if (item != ITEM_NONE)
+ sub_81B5DF0(b[i + 6], ItemIsMail(item));
+ }
+ break;
+ }
+}
+
+void sub_81B5DF0(u8 spriteId, u8 isMail)
+{
+ u8 subpriority = gSprites[spriteId].subpriority;
+ u8 newSpriteId = CreateSprite(&gSpriteTemplate_8615EC0, 250, 170, subpriority - 1);
+
+ gSprites[newSpriteId].pos2.x = 4;
+ gSprites[newSpriteId].pos2.y = 10;
+ gSprites[newSpriteId].callback = sub_81B5E74;
+ gSprites[newSpriteId].data[7] = spriteId;
+ StartSpriteAnim(&gSprites[newSpriteId], isMail);
+ gSprites[newSpriteId].callback(&gSprites[newSpriteId]);
+}
+
+void sub_81B5E74(struct Sprite *sprite)
+{
+ u8 otherSpriteId = sprite->data[7];
+
+ if (gSprites[otherSpriteId].invisible)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ sprite->pos1.x = gSprites[otherSpriteId].pos1.x + gSprites[otherSpriteId].pos2.x;
+ sprite->pos1.y = gSprites[otherSpriteId].pos1.y + gSprites[otherSpriteId].pos2.y;
+ }
+}
+
+void party_menu_pokeball_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ ptr->unkB = CreateSprite(&gSpriteTemplate_8615F08, ptr->unk4[6], ptr->unk4[7], 8);
+}
+
+void party_menu_link_mon_pokeball_object(u16 species, struct Struct203CEDC *ptr)
+{
+ if (species != SPECIES_NONE)
+ {
+ ptr->unkB = CreateSprite(&gSpriteTemplate_8615F08, ptr->unk4[6], ptr->unk4[7], 8);
+ gSprites[ptr->unkB].oam.priority = 0;
+ }
+}
+
+u8 sub_81B5F34(u8 x, u8 y)
+{
+ u8 spriteId = CreateSprite(&gSpriteTemplate_8615F08, x, y, 8);
+
+ gSprites[spriteId].oam.priority = 2;
+ return spriteId;
+}
+
+u8 sub_81B5F74(u8 x, u8 y)
+{
+ return CreateSprite(&gSpriteTemplate_8615F78, x, y, 8);
+}
+
+void sub_81B5F98(u8 spriteId, u8 a)
+{
+ StartSpriteAnim(&gSprites[spriteId], a);
+}
+
+void sub_81B5FBC(u8 spriteId, u8 spriteId2, u8 a)
+{
+ if (a == 0)
+ {
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ StartSpriteAnim(&gSprites[spriteId2], 4);
+ gSprites[spriteId].pos2.y = 0;
+ gSprites[spriteId2].pos2.y = 0;
+ }
+ else
+ {
+ StartSpriteAnim(&gSprites[spriteId], 3);
+ StartSpriteAnim(&gSprites[spriteId2], 5);
+ gSprites[spriteId].pos2.y = -4;
+ gSprites[spriteId2].pos2.y = 4;
+ }
+}
+
+void LoadPartyMenuPokeballGfx(void)
+{
+ LoadCompressedSpriteSheet(&gUnknown_08615EF8);
+ LoadCompressedSpriteSheet(&gUnknown_08615F70);
+ LoadCompressedSpritePalette(&gUnknown_08615F00);
+}
+
+void party_menu_status_condition_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+{
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ ptr->unkC = CreateSprite(&gSpriteTemplate_8616008, ptr->unk4[4], ptr->unk4[5], 0);
+ party_menu_get_status_condition_and_update_object(mon, ptr);
+ }
+}
+
+void party_menu_link_mon_status_condition_object(u16 species, u8 status, struct Struct203CEDC *ptr)
+{
+ if (species != SPECIES_NONE)
+ {
+ ptr->unkC = CreateSprite(&gSpriteTemplate_8616008, ptr->unk4[4], ptr->unk4[5], 0);
+ party_menu_update_status_condition_object(status, ptr);
+ gSprites[ptr->unkC].oam.priority = 0;
+ }
+}
+
+void party_menu_get_status_condition_and_update_object(struct Pokemon *mon, struct Struct203CEDC *ptr)
+{
+ party_menu_update_status_condition_object(sub_81B205C(mon), ptr);
+}
+
+void party_menu_update_status_condition_object(u8 status, struct Struct203CEDC *ptr)
+{
+ switch (status)
+ {
+ case AILMENT_NONE:
+ case AILMENT_PKRS:
+ gSprites[ptr->unkC].invisible = TRUE;
+ break;
+ default:
+ StartSpriteAnim(&gSprites[ptr->unkC], status - 1);
+ gSprites[ptr->unkC].invisible = FALSE;
+ break;
+ }
+}
+
+void LoadPartyMenuAilmentGfx(void)
+{
+ LoadCompressedSpriteSheet(&gUnknown_08615FF8);
+ LoadCompressedSpritePalette(&gUnknown_08616000);
+}
+
+void sub_81B617C(void)
+{
+ MainCallback callback = c2_815ABFC;
+ u8 doubleBattleStatus;
+ bool8 inBattle;
+ u8 i;
+ u8 msgIDMaybe;
+ register TaskFunc task asm("r0");
+
+ if (gMain.inBattle)
+ {
+ inBattle = TRUE;
+ doubleBattleStatus = sub_81B8984();
+ }
+ else
+ {
+ inBattle = FALSE;
+ doubleBattleStatus = 0;
+ }
+ if (GetItemEffectType(gSpecialVar_ItemId) == 10)
+ {
+ gUnknown_0203CEC8.unk9 = 0;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ {
+ gUnknown_0203CEC8.unk9 = i;
+ break;
+ }
+ }
+ task = sub_81B6280;
+ msgIDMaybe = 0x7F;
+ }
+ else
+ {
+ msgIDMaybe = (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_TM_HM) ? 4 : 5;
+ task = sub_81B1370;
+ }
+ InitPartyMenu(inBattle, doubleBattleStatus, 3, 1, msgIDMaybe, task, callback);
+}
+
+void c2_815ABFC(void)
+{
+ if (InBattlePyramid() == FALSE)
+ GoToBagMenu(RETURN_LOCATION_UNCHANGED, POCKETS_COUNT, NULL);
+ else
+ sub_81C4F98(4, gPyramidBagCursorData.callback);
+}
+
+void sub_81B6280(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_0203CEC8.unk8_0 == 1)
+ gUnknown_0203CEC4->exitCallback = sub_81B9140;
+ gUnknown_03006328(taskId, sub_81B6794);
+ }
+}
+
+bool8 IsHPRecoveryItem(u16 item)
+{
+ const u8 *effect;
+
+ if (item == ITEM_ENIGMA_BERRY)
+ effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ else
+ effect = gItemEffectTable[item - ITEM_POTION];
+ if ((effect[4] & 4) != 0)
+ return TRUE;
+ return FALSE;
+}
+
+void GetMedicineItemEffectMessage(u16 item)
+{
+ switch (GetItemEffectType(item) - 3)
+ {
+ case 0:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfPoison);
+ break;
+ case 1:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnWokeUp2);
+ break;
+ case 2:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBurnHealed);
+ break;
+ case 3:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnThawedOut);
+ break;
+ case 4:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCuredOfParalysis);
+ break;
+ case 5:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnSnappedOutOfConfusion);
+ break;
+ case 6:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnGotOverInfatuation);
+ break;
+ case 8:
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBecameHealthy);
+ break;
+ case 10:
+ StringCopy(gStringVar2, gText_HP3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case 9:
+ StringCopy(gStringVar2, gText_Attack3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case 14:
+ StringCopy(gStringVar2, gText_Defense3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case 13:
+ StringCopy(gStringVar2, gText_Speed2);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case 11:
+ StringCopy(gStringVar2, gText_SpAtk3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case 12:
+ StringCopy(gStringVar2, gText_SpDef3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnBaseVar2StatIncreased);
+ break;
+ case 16:
+ case 17:
+ StringExpandPlaceholders(gStringVar4, gText_MovesPPIncreased);
+ break;
+ case 18:
+ StringExpandPlaceholders(gStringVar4, gText_PPWasRestored);
+ break;
+ default:
+ StringExpandPlaceholders(gStringVar4, gText_WontHaveEffect);
+ break;
+ }
+}
+
+bool8 UsingHPEVItemOnShedinja(struct Pokemon *mon, u16 item)
+{
+ if (GetItemEffectType(item) == 13 && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_SHEDINJA)
+ return FALSE;
+ return TRUE;
+}
+
+bool8 IsBlueYellowRedFlute(u16 item)
+{
+ if (item == ITEM_BLUE_FLUTE || item == ITEM_RED_FLUTE || item == ITEM_YELLOW_FLUTE)
+ return TRUE;
+ return FALSE;
+}
+
+bool8 ExecuteTableBasedItemEffect__(u8 partyMonIndex, u16 item, u8 monMoveIndex)
+{
+ if (gMain.inBattle)
+ return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, sub_81B8F38(partyMonIndex), monMoveIndex);
+ else
+ return ExecuteTableBasedItemEffect(&gPlayerParty[partyMonIndex], item, partyMonIndex, monMoveIndex);
+}
+
+void ItemUseCB_Medicine(u8 taskId, TaskFunc task)
+{
+ u16 hp = 0;
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 item = gSpecialVar_ItemId;
+ bool8 canHeal;
+
+ if (UsingHPEVItemOnShedinja(mon, item))
+ {
+ canHeal = IsHPRecoveryItem(item);
+ if (canHeal == TRUE)
+ {
+ hp = GetMonData(mon, MON_DATA_HP);
+ if (hp == GetMonData(mon, MON_DATA_MAX_HP))
+ canHeal = FALSE;
+ }
+ if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, item, 0))
+ {
+ iTriedHonestlyIDid:
+ gUnknown_0203CEE8 = 0;
+ PlaySE(SE_SELECT);
+ sub_81B1B5C(gText_WontHaveEffect, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = task;
+ return;
+ }
+ }
+ else
+ {
+ goto iTriedHonestlyIDid;
+ }
+ gUnknown_0203CEE8 = 1;
+ if (IsBlueYellowRedFlute(item) == FALSE)
+ {
+ PlaySE(SE_KAIFUKU);
+ if (gUnknown_0203CEC8.unkB != 14)
+ RemoveBagItem(item, 1);
+ }
+ else
+ {
+ PlaySE(SE_BIDORO);
+ }
+ party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]);
+ if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].unkC].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1);
+ if (canHeal == TRUE)
+ {
+ if (hp == 0)
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 1);
+ sub_81B1F18(taskId, gUnknown_0203CEC8.unk9, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B672C);
+ sub_81B1FA8(taskId, 0, hp);
+ return;
+ }
+ else
+ {
+ GetMonNickname(mon, gStringVar1);
+ GetMedicineItemEffectMessage(item);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = task;
+ }
+}
+
+void sub_81B672C(u8 taskId)
+{
+ GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
+ sub_81B1B5C(gStringVar4, 0);
+ schedule_bg_copy_tilemap_to_vram(2);
+ HandleBattleLowHpMusicChange();
+ gTasks[taskId].func = sub_81B6794;
+}
+
+void sub_81B6794(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ if (gUnknown_0203CEE8 == 0)
+ gUnknown_0203CEC4->exitCallback = NULL;
+ sub_81B12C0(taskId);
+ }
+}
+
+void sub_81B67C8(u8 taskId, TaskFunc task)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 item = gSpecialVar_ItemId;
+ u8 effectType = GetItemEffectType(item);
+ u16 friendship = GetMonData(mon, MON_DATA_FRIENDSHIP);
+ u16 relevantEV = sub_81B691C(mon, effectType);
+ bool8 cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, item, 0);
+ u16 newFriendship = GetMonData(mon, MON_DATA_FRIENDSHIP);
+ u16 newRelevantEV = sub_81B691C(mon, effectType);
+
+ if (cannotUseEffect || (friendship == newFriendship && relevantEV == newRelevantEV))
+ {
+ gUnknown_0203CEE8 = 0;
+ PlaySE(SE_SELECT);
+ sub_81B1B5C(gText_WontHaveEffect, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = task;
+ }
+ else
+ {
+ gUnknown_0203CEE8 = 1;
+ PlaySE(SE_KAIFUKU);
+ RemoveBagItem(item, 1);
+ GetMonNickname(mon, gStringVar1);
+ option_menu_get_string(effectType, gStringVar2);
+ if (friendship != newFriendship)
+ {
+ if (relevantEV != newRelevantEV)
+ StringExpandPlaceholders(gStringVar4, gText_PkmnFriendlyBaseVar2Fell);
+ else
+ StringExpandPlaceholders(gStringVar4, gText_PkmnFriendlyBaseVar2CantFall);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAdoresBaseVar2Fell);
+ }
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = task;
+ }
+}
+
+u16 sub_81B691C(struct Pokemon *mon, u8 effectType)
+{
+ switch (effectType)
+ {
+ case 13:
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_SHEDINJA)
+ return GetMonData(mon, MON_DATA_HP_EV);
+ break;
+ case 12:
+ return GetMonData(mon, MON_DATA_ATK_EV);
+ case 17:
+ return GetMonData(mon, MON_DATA_DEF_EV);
+ case 16:
+ return GetMonData(mon, MON_DATA_SPEED_EV);
+ case 14:
+ return GetMonData(mon, MON_DATA_SPATK_EV);
+ case 15:
+ return GetMonData(mon, MON_DATA_SPDEF_EV);
+ }
+ return 0;
+}
+
+void option_menu_get_string(u8 effectType, u8 *dest)
+{
+ switch (effectType)
+ {
+ case 13:
+ StringCopy(dest, gText_HP3);
+ break;
+ case 12:
+ StringCopy(dest, gText_Attack3);
+ break;
+ case 17:
+ StringCopy(dest, gText_Defense3);
+ break;
+ case 16:
+ StringCopy(dest, gText_Speed2);
+ break;
+ case 14:
+ StringCopy(dest, gText_SpAtk3);
+ break;
+ case 15:
+ StringCopy(dest, gText_SpDef3);
+ break;
+ }
+}
+
+void sub_81B6A10(u8 slot)
+{
+ u8 i;
+ u8 moveCount = 0;
+ u8 fontId = 1;
+ u8 windowId = sub_81B31B0(3);
+ u16 move;
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ move = GetMonData(&gPlayerParty[slot], MON_DATA_MOVE1 + i);
+ AddTextPrinterParameterized(windowId, fontId, gMoveNames[move], 8, (i * 16) + 1, 0xFF, NULL);
+ if (move != MOVE_NONE)
+ moveCount++;
+ }
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, moveCount, 0);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void ether_effect_related_3(u8 taskId)
+{
+ s8 input = Menu_ProcessInput();
+
+ if (input != MENU_NOTHING_CHOSEN)
+ {
+ if (input == MENU_B_PRESSED)
+ {
+ PlaySE(SE_SELECT);
+ sub_81B6BB4(taskId);
+ }
+ else
+ {
+ sub_81B302C(&gUnknown_0203CEC4->unkC[1]);
+ ether_effect_related_2(taskId);
+ }
+ }
+}
+
+void dp05_ether(u8 taskId, TaskFunc unused)
+{
+ const u8 *effect;
+ u16 item = gSpecialVar_ItemId;
+
+ if (item == ITEM_ENIGMA_BERRY)
+ effect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ else
+ effect = gItemEffectTable[item - ITEM_POTION];
+ if ((effect[4] & 0x10) == 0)
+ {
+ gUnknown_0203CEC8.unkE = 0;
+ ether_effect_related(taskId);
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ display_pokemon_menu_message(22);
+ sub_81B6A10(gUnknown_0203CEC8.unk9);
+ gTasks[taskId].func = ether_effect_related_3;
+ }
+}
+
+void ether_effect_related_2(u8 taskId)
+{
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ gUnknown_0203CEC8.unkE = Menu_GetCursorPos();
+ ether_effect_related(taskId);
+}
+
+void sub_81B6BB4(u8 taskId)
+{
+ gTasks[taskId].func = sub_81B1370;
+ gUnknown_0203CEC4->exitCallback = NULL;
+ sub_81B302C(&gUnknown_0203CEC4->unkC[0]);
+ display_pokemon_menu_message(5);
+}
+
+void ether_effect_related(u8 taskId)
+{
+ u16 move = MOVE_NONE;
+ s16 *moveslot = &gUnknown_0203CEC8.unkE;
+ u16 item = gSpecialVar_ItemId;
+ struct Struct203CEC8 *ptr = &gUnknown_0203CEC8;
+ struct Pokemon *mon;
+
+ if (ExecuteTableBasedItemEffect__(ptr->unk9, item, *moveslot))
+ {
+ gUnknown_0203CEE8 = 0;
+ PlaySE(SE_SELECT);
+ sub_81B1B5C(gText_WontHaveEffect, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B6794;
+ }
+ else
+ {
+ gUnknown_0203CEE8 = 1;
+ mon = &gPlayerParty[ptr->unk9];
+ PlaySE(SE_KAIFUKU);
+ RemoveBagItem(item, 1);
+ move = GetMonData(mon, MON_DATA_MOVE1 + *moveslot);
+ StringCopy(gStringVar1, gMoveNames[move]);
+ GetMedicineItemEffectMessage(item);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B6794;
+ }
+}
+
+void dp05_pp_up(u8 taskId, TaskFunc unused)
+{
+ PlaySE(SE_SELECT);
+ display_pokemon_menu_message(23);
+ sub_81B6A10(gUnknown_0203CEC8.unk9);
+ gTasks[taskId].func = ether_effect_related_3;
+}
+
+u16 ItemIdToBattleMoveId(u16 item)
+{
+ u16 tmNumber = item - ITEM_TM01_FOCUS_PUNCH;
+ return gUnknown_08616040[tmNumber];
+}
+
+bool8 sub_81B6D14(u16 move)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_HIDDEN_MACHINES; i++)
+ {
+ if (gUnknown_08616040[i + NUM_TECHNICAL_MACHINES] == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 pokemon_has_move(struct Pokemon *mon, u16 move)
+{
+ u8 i;
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (GetMonData(mon, MON_DATA_MOVE1 + i) == move)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_81B6D74(const u8 *str)
+{
+ StringExpandPlaceholders(gStringVar4, str);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void sub_81B6D98(u8 taskId, const u8 *str)
+{
+ sub_81B6D74(str);
+ gTasks[taskId].func = sub_81B6794;
+}
+
+// move[1] doesn't use constants cause I don't know if it's actually a move ID storage
+
+void sub_81B6DC4(u8 taskId, TaskFunc unused)
+{
+ struct Pokemon *mon;
+ s16 *move;
+ u16 item;
+
+ PlaySE(SE_SELECT);
+ mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ move = &gUnknown_0203CEC8.unkE;
+ item = gSpecialVar_ItemId;
+ GetMonNickname(mon, gStringVar1);
+ move[0] = ItemIdToBattleMoveId(item);
+ StringCopy(gStringVar2, gMoveNames[move[0]]);
+ move[1] = 0;
+ switch (CanPartyPokemonLearnTMTutor(mon, item, 0))
+ {
+ case CANNOT_LEARN_MOVE:
+ sub_81B6D98(taskId, gText_PkmnCantLearnMove);
+ return;
+ case ALREADY_KNOWS_MOVE:
+ sub_81B6D98(taskId, gText_PkmnAlreadyKnows);
+ return;
+ }
+ if (GiveMoveToMon(mon, move[0]) != 0xFFFF)
+ {
+ gTasks[taskId].func = sub_81B6EB4;
+ }
+ else
+ {
+ sub_81B6D74(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = sub_81B6FF4;
+ }
+}
+
+void sub_81B6EB4(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ s16 *move = &gUnknown_0203CEC8.unkE;
+ u16 item = gSpecialVar_ItemId;
+
+ if (move[1] == 0)
+ {
+ AdjustFriendship(mon, 4);
+ if (item < ITEM_HM01_CUT)
+ RemoveBagItem(item, 1);
+ }
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move[0]]);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B6F60;
+}
+
+void sub_81B6F60(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ PlayFanfare(MUS_FANFA1);
+ gTasks[taskId].func = sub_81B6F98;
+ }
+}
+
+void sub_81B6F98(u8 taskId)
+{
+ if (IsFanfareTaskInactive() && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
+ {
+ if (gUnknown_0203CEC8.unk10 == 1)
+ sub_81B77AC(taskId);
+ else
+ {
+ if (gUnknown_0203CEC8.unk10 == 2)
+ gSpecialVar_Result = TRUE;
+ sub_81B12C0(taskId);
+ }
+ }
+}
+
+void sub_81B6FF4(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B7028;
+ }
+}
+
+void sub_81B7028(u8 taskId)
+{
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ sub_81B1B5C(gText_WhichMoveToForget, 1);
+ gTasks[taskId].func = sub_81B7088;
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ sub_81B7230(taskId);
+ break;
+ }
+}
+
+void sub_81B7088(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ gUnknown_0203CEC4->exitCallback = sub_81B70B8;
+ sub_81B12C0(taskId);
+ }
+}
+
+void sub_81B70B8(void)
+{
+ ShowSelectMovePokemonSummaryScreen(gPlayerParty, gUnknown_0203CEC8.unk9, gPlayerPartyCount - 1, sub_81B70F0, gUnknown_0203CEC8.unkE);
+}
+
+void sub_81B70F0(void)
+{
+ InitPartyMenu(0, 0, 0, 1, 0x7F, sub_81B711C, gUnknown_0203CEC8.exitCallback);
+}
+
+void sub_81B711C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (sub_81C1B94() != 4)
+ sub_81B7154(taskId);
+ else
+ sub_81B7230(taskId);
+ }
+}
+
+void sub_81B7154(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 move = GetMonData(mon, MON_DATA_MOVE1 + sub_81C1B94());
+
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move]);
+ sub_81B6D74(gText_12PoofForgotMove);
+ gTasks[taskId].func = sub_81B71D4;
+}
+
+void sub_81B71D4(u8 taskId)
+{
+ struct Pokemon *mon;
+ u16 move;
+
+ if (sub_81B1BD4() != TRUE)
+ {
+ mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ RemoveMonPPBonus(mon, sub_81C1B94());
+ move = gUnknown_0203CEC8.unkE;
+ SetMonMoveSlot(mon, move, sub_81C1B94());
+ sub_81B6EB4(taskId);
+ }
+}
+
+void sub_81B7230(u8 taskId)
+{
+ StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
+ StringExpandPlaceholders(gStringVar4, gText_StopLearningMove2);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B7294;
+}
+
+void sub_81B7294(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B72C8;
+ }
+}
+
+void sub_81B72C8(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
+ StringExpandPlaceholders(gStringVar4, gText_MoveNotLearned);
+ sub_81B1B5C(gStringVar4, 1);
+ if (gUnknown_0203CEC8.unk10 == 1)
+ {
+ gTasks[taskId].func = sub_81B73E4;
+ }
+ else
+ {
+ if (gUnknown_0203CEC8.unk10 == 2)
+ gSpecialVar_Result = FALSE;
+ gTasks[taskId].func = sub_81B6794;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
+ sub_81B6D74(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = sub_81B6FF4;
+ break;
+ }
+}
+
+void sub_81B73E4(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ sub_81B77AC(taskId);
+}
+
+void dp05_rare_candy(u8 taskId, TaskFunc task)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ struct Struct203CEC4 *ptr = gUnknown_0203CEC4;
+ s16 *arrayPtr = ptr->data;
+ u16 *itemPtr = &gSpecialVar_ItemId;
+ bool8 cannotUseEffect;
+
+ if (GetMonData(mon, MON_DATA_LEVEL) != MAX_LEVEL)
+ {
+ sub_81B79A0(mon, arrayPtr);
+ cannotUseEffect = ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, *itemPtr, 0);
+ sub_81B79A0(mon, &ptr->data[6]);
+ }
+ else
+ {
+ cannotUseEffect = TRUE;
+ }
+ PlaySE(SE_SELECT);
+ if (cannotUseEffect)
+ {
+ gUnknown_0203CEE8 = 0;
+ sub_81B1B5C(gText_WontHaveEffect, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = task;
+ }
+ else
+ {
+ gUnknown_0203CEE8 = 1;
+ PlayFanfareByFanfareNum(0);
+ sub_81B754C(gUnknown_0203CEC8.unk9, mon);
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ GetMonNickname(mon, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, GetMonData(mon, MON_DATA_LEVEL), 0, 3);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnElevatedToLvVar2);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B75D4;
+ }
+}
+
+void sub_81B754C(u8 slot, struct Pokemon *mon)
+{
+ party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[slot]);
+ if (gSprites[gUnknown_0203CEDC[slot].unkC].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[slot], 1);
+ DisplayPartyPokemonHPCheck(mon, &gUnknown_0203CEDC[slot], 1);
+ DisplayPartyPokemonMaxHPCheck(mon, &gUnknown_0203CEDC[slot], 1);
+ DisplayPartyPokemonHPBarCheck(mon, &gUnknown_0203CEDC[slot]);
+ sub_81B5B38(gUnknown_0203CEDC[slot].unk9, mon);
+ sub_81B0FCC(slot, 1);
+ schedule_bg_copy_tilemap_to_vram(0);
+}
+
+void sub_81B75D4(u8 taskId)
+{
+ if (WaitFanfare(FALSE) && sub_81B1BD4() != TRUE && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
+ {
+ PlaySE(SE_SELECT);
+ sub_81B767C(taskId);
+ gTasks[taskId].func = sub_81B7634;
+ }
+}
+
+void sub_81B7634(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ sub_81B76C8(taskId);
+ gTasks[taskId].func = sub_81B7704;
+ }
+}
+
+void sub_81B767C(u8 taskId)
+{
+ s16 *arrayPtr = gUnknown_0203CEC4->data;
+
+ arrayPtr[12] = sub_81B3364();
+ sub_81D3640(arrayPtr[12], arrayPtr, &arrayPtr[6], 1, 2, 3);
+ CopyWindowToVram(arrayPtr[12], 2);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void sub_81B76C8(u8 taskIdUnused)
+{
+ s16 *arrayPtr = gUnknown_0203CEC4->data;
+
+ sub_81D3784(arrayPtr[12], &arrayPtr[6], 1, 2, 3);
+ CopyWindowToVram(arrayPtr[12], 2);
+ schedule_bg_copy_tilemap_to_vram(2);
+}
+
+void sub_81B7704(u8 taskId)
+{
+ u16 result;
+
+ if (WaitFanfare(0) && ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON)))
+ {
+ sub_81B3394();
+ result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.unk9], 1);
+ gUnknown_0203CEC8.unk10 = 1;
+ switch (result)
+ {
+ case 0:
+ sub_81B7810(taskId);
+ break;
+ case 0xFFFF:
+ sub_81B787C(taskId);
+ break;
+ case 0xFFFE:
+ gTasks[taskId].func = sub_81B77AC;
+ break;
+ default:
+ sub_81B7910(taskId, result);
+ break;
+ }
+ }
+}
+
+void sub_81B77AC(u8 taskId)
+{
+ u16 result = MonTryLearningNewMove(&gPlayerParty[gUnknown_0203CEC8.unk9], 0);
+
+ switch (result)
+ {
+ case 0:
+ sub_81B7810(taskId);
+ break;
+ case 0xFFFF:
+ sub_81B787C(taskId);
+ break;
+ case 0xFFFE:
+ return;
+ default:
+ sub_81B7910(taskId, result);
+ break;
+ }
+}
+
+void sub_81B7810(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 targetSpecies = GetEvolutionTargetSpecies(mon, 0, 0);
+
+ if (targetSpecies != SPECIES_NONE)
+ {
+ FreePartyPointers();
+ gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback;
+ BeginEvolutionScene(mon, targetSpecies, 1, gUnknown_0203CEC8.unk9);
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].func = sub_81B6794;
+ }
+}
+
+void sub_81B787C(u8 taskId)
+{
+ GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[gMoveToLearn]);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnNeedsToReplaceMove);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gUnknown_0203CEC8.unkE = gMoveToLearn;
+ gTasks[taskId].func = sub_81B6FF4;
+}
+
+void sub_81B7910(u8 taskId, u16 move)
+{
+ GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move]);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnLearnedMove3);
+ sub_81B1B5C(gStringVar4, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gUnknown_0203CEC8.unkE = move;
+ gTasks[taskId].func = sub_81B6F60;
+}
+
+void sub_81B79A0(struct Pokemon *mon, s16 *data)
+{
+ data[0] = GetMonData(mon, MON_DATA_MAX_HP);
+ data[1] = GetMonData(mon, MON_DATA_ATK);
+ data[2] = GetMonData(mon, MON_DATA_DEF);
+ data[4] = GetMonData(mon, MON_DATA_SPATK);
+ data[5] = GetMonData(mon, MON_DATA_SPDEF);
+ data[3] = GetMonData(mon, MON_DATA_SPEED);
+}
+
+void sub_81B79E8(u8 taskId, TaskFunc unused)
+{
+ gUnknown_0203CEC4->data[0] = 0;
+ gUnknown_0203CEC4->data[1] = 0;
+ gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.unk9;
+ sub_81B7A28(taskId);
+}
+
+#ifdef NONMATCHING
+void sub_81B7A28(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 hp;
+
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE)
+ {
+ hp = GetMonData(mon, MON_DATA_HP);
+ if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, gSpecialVar_ItemId, 0))
+ {
+ gTasks[taskId].func = task_sacred_ash_party_loop;
+ return;
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = task_sacred_ash_party_loop;
+ return;
+ }
+ PlaySE(SE_KAIFUKU);
+ party_menu_get_status_condition_and_update_object(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9]);
+ if (gSprites[gUnknown_0203CEDC[gUnknown_0203CEC8.unk9].unkC].invisible)
+ DisplayPartyPokemonLevelCheck(mon, &gUnknown_0203CEDC[gUnknown_0203CEC8.unk9], 1);
+ sub_81B0FCC(gUnknown_0203CEC4->data[2], 0);
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 1);
+ sub_81B1F18(taskId, gUnknown_0203CEC8.unk9, 1, GetMonData(mon, MON_DATA_HP) - hp, sub_81B7C10);
+ sub_81B1FA8(taskId, 0, hp);
+ gUnknown_0203CEC4->data[0] = 1;
+ gUnknown_0203CEC4->data[1] = 1;
+}
+#else
+NAKED
+void sub_81B7A28(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ sub sp, 0x4\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ mov r8, r4\n\
+ ldr r6, =gUnknown_0203CEC8\n\
+ movs r1, 0x9\n\
+ ldrsb r1, [r6, r1]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, =gPlayerParty\n\
+ adds r5, r1, r0\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _081B7A6E\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ ldrb r0, [r6, 0x9]\n\
+ ldr r1, =gSpecialVar_ItemId\n\
+ ldrh r1, [r1]\n\
+ movs r2, 0\n\
+ bl ExecuteTableBasedItemEffect__\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _081B7A94\n\
+_081B7A6E:\n\
+ ldr r0, =gTasks\n\
+ lsls r1, r4, 2\n\
+ adds r1, r4\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ ldr r0, =task_sacred_ash_party_loop\n\
+ str r0, [r1]\n\
+ b _081B7B2A\n\
+ .pool\n\
+_081B7A94:\n\
+ movs r0, 0x1\n\
+ bl PlaySE\n\
+ ldr r4, =gUnknown_0203CEDC\n\
+ movs r0, 0x9\n\
+ ldrsb r0, [r6, r0]\n\
+ lsls r0, 4\n\
+ ldr r1, [r4]\n\
+ adds r1, r0\n\
+ adds r0, r5, 0\n\
+ bl party_menu_get_status_condition_and_update_object\n\
+ ldr r2, =gSprites\n\
+ movs r0, 0x9\n\
+ ldrsb r0, [r6, r0]\n\
+ ldr r1, [r4]\n\
+ lsls r0, 4\n\
+ adds r3, r0, r1\n\
+ ldrb r1, [r3, 0xC]\n\
+ lsls r0, r1, 4\n\
+ adds r0, r1\n\
+ lsls r0, 2\n\
+ adds r0, r2\n\
+ adds r0, 0x3E\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 29\n\
+ cmp r0, 0\n\
+ bge _081B7AD6\n\
+ adds r0, r5, 0\n\
+ adds r1, r3, 0\n\
+ movs r2, 0x1\n\
+ bl DisplayPartyPokemonLevelCheck\n\
+_081B7AD6:\n\
+ ldr r4, =gUnknown_0203CEC4\n\
+ ldr r0, [r4]\n\
+ movs r1, 0x87\n\
+ lsls r1, 2\n\
+ adds r0, r1\n\
+ ldrb r0, [r0]\n\
+ movs r1, 0\n\
+ bl sub_81B0FCC\n\
+ ldrb r0, [r6, 0x9]\n\
+ movs r1, 0x1\n\
+ bl sub_81B0FCC\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x39\n\
+ bl GetMonData\n\
+ adds r3, r0, 0\n\
+ subs r3, r7\n\
+ lsls r3, 16\n\
+ asrs r3, 16\n\
+ ldrb r1, [r6, 0x9]\n\
+ ldr r0, =sub_81B7C10\n\
+ str r0, [sp]\n\
+ mov r0, r8\n\
+ movs r2, 0x1\n\
+ bl sub_81B1F18\n\
+ mov r0, r8\n\
+ movs r1, 0\n\
+ adds r2, r7, 0\n\
+ bl sub_81B1FA8\n\
+ ldr r0, [r4]\n\
+ movs r2, 0x86\n\
+ lsls r2, 2\n\
+ adds r1, r0, r2\n\
+ movs r2, 0x1\n\
+ strh r2, [r1]\n\
+ ldr r1, =0x0000021a\n\
+ adds r0, r1\n\
+ strh r2, [r0]\n\
+_081B7B2A:\n\
+ add sp, 0x4\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+void task_sacred_ash_party_loop(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ if (gUnknown_0203CEC4->data[0] == 1)
+ {
+ gUnknown_0203CEC4->data[0] = 0;
+ gUnknown_0203CEC4->data[2] = gUnknown_0203CEC8.unk9;
+ }
+ if (++(gUnknown_0203CEC8.unk9) == PARTY_SIZE)
+ {
+ if (gUnknown_0203CEC4->data[1] == 0)
+ {
+ gUnknown_0203CEE8 = 0;
+ sub_81B1B5C(gText_WontHaveEffect, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ }
+ else
+ {
+ gUnknown_0203CEE8 = 1;
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ }
+ gTasks[taskId].func = sub_81B6794;
+ gUnknown_0203CEC8.unk9 = 0;
+ }
+ else
+ {
+ sub_81B7A28(taskId);
+ }
+ }
+}
+
+void sub_81B7C10(u8 taskId)
+{
+ GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unk9], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
+ sub_81B1B5C(gStringVar4, 0);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = task_sacred_ash_party_loop;
+}
+
+void sub_81B7C74(u8 taskId, TaskFunc task)
+{
+ PlaySE(SE_SELECT);
+ gCB2_AfterEvolution = gUnknown_0203CEC8.exitCallback;
+ if (ExecuteTableBasedItemEffect__(gUnknown_0203CEC8.unk9, gSpecialVar_ItemId, 0))
+ {
+ gUnknown_0203CEE8 = 0;
+ sub_81B1B5C(gText_WontHaveEffect, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = task;
+ }
+ else
+ {
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+ FreePartyPointers();
+ }
+}
+
+u8 GetItemEffectType(u16 item)
+{
+ const u8 *itemEffect;
+#ifndef NONMATCHING
+ register u8 itemEffect0 asm("r1");
+ register u8 itemEffect3 asm("r3");
+ register u32 itemEffect0_r0 asm("r0"); // u32 to prevent shifting when transferring itemEffect0 to this
+ u8 mask;
+#else
+#define itemEffect0 itemEffect[0]
+#define itemEffect3 itemEffect[3]
+#define mask 0x3F
+#endif
+
+ if (!IS_POKEMON_ITEM(item))
+ {
+ return 22;
+ }
+ else
+ {
+ // Read the item's effect properties.
+ if (item == ITEM_ENIGMA_BERRY)
+ {
+ itemEffect = gSaveBlock1Ptr->enigmaBerry.itemEffect;
+ }
+ else
+ {
+ itemEffect = gItemEffectTable[item - ITEM_POTION];
+ }
+
+#ifndef NONMATCHING
+ itemEffect0 = itemEffect[0];
+ mask = 0x3F;
+#endif
+
+ if ((itemEffect0 & mask) || itemEffect[1] || itemEffect[2])
+ {
+ return 0;
+ }
+#ifndef NONMATCHING
+ itemEffect3 = itemEffect[3];
+#endif
+ if (itemEffect3 & 0x80)
+ {
+ return 0;
+ }
+ else if (itemEffect0 & 0x40)
+ {
+ return 10;
+ }
+ else if (itemEffect3 & 0x40)
+ {
+ return 1;
+ }
+ else if ((itemEffect3 & mask) || (itemEffect0 >> 7))
+ {
+ if ((itemEffect3 & mask) == 0x20)
+ {
+ return 4;
+ }
+ else if ((itemEffect3 & mask) == 0x10)
+ {
+ return 3;
+ }
+ else if ((itemEffect3 & mask) == 0x8)
+ {
+ return 5;
+ }
+ else if ((itemEffect3 & mask) == 0x4)
+ {
+ return 6;
+ }
+ else if ((itemEffect3 & mask) == 0x2)
+ {
+ return 7;
+ }
+ else if ((itemEffect3 & mask) == 0x1)
+ {
+ return 8;
+ }
+ // alternate fakematching
+ // itemEffect0_r0 = itemEffect0 >> 7;
+ // asm(""); // increase live length for greg
+ // if ((itemEffect0_r0 != 0) && (itemEffect3 & mask) == 0)
+#ifndef NONMATCHING
+ else if (((itemEffect0_r0 = itemEffect0 >> 7) != 0) && (itemEffect3 & mask) == 0)
+#else
+ else if (((itemEffect[0] >> 7) != 0) && (itemEffect[3] & 0x3F) == 0)
+#endif
+ {
+ return 9;
+ }
+ else
+ {
+ return 11;
+ }
+ }
+ else if (itemEffect[4] & 0x44)
+ {
+ return 2;
+ }
+ else if (itemEffect[4] & 0x2)
+ {
+ return 12;
+ }
+ else if (itemEffect[4] & 0x1)
+ {
+ return 13;
+ }
+ else if (itemEffect[5] & 0x8)
+ {
+ return 14;
+ }
+ else if (itemEffect[5] & 0x4)
+ {
+ return 15;
+ }
+ else if (itemEffect[5] & 0x2)
+ {
+ return 16;
+ }
+ else if (itemEffect[5] & 0x1)
+ {
+ return 17;
+ }
+ else if (itemEffect[4] & 0x80)
+ {
+ return 18;
+ }
+ else if (itemEffect[4] & 0x20)
+ {
+ return 19;
+ }
+ else if (itemEffect[5] & 0x10)
+ {
+ return 20;
+ }
+ else if (itemEffect[4] & 0x18)
+ {
+ return 21;
+ }
+ return 22;
+ }
+#ifdef NONMATCHING
+#undef itemEffect0
+#undef itemEffect3
+#undef mask
+#endif
+}
+
+void sub_81B7E4C(u8 taskId)
+{
+ struct Pokemon *mon;
+ s16 *move;
+
+ if (!gPaletteFade.active)
+ {
+ mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ move = &gUnknown_0203CEC8.unkE;
+ GetMonNickname(mon, gStringVar1);
+ gUnknown_0203CEC8.unkE = sub_81B2360(gSpecialVar_0x8005);
+ StringCopy(gStringVar2, gMoveNames[gUnknown_0203CEC8.unkE]);
+ move[1] = 2;
+ switch (CanPartyPokemonLearnTMTutor(mon, 0, gSpecialVar_0x8005))
+ {
+ case CANNOT_LEARN_MOVE:
+ sub_81B6D98(taskId, gText_PkmnCantLearnMove);
+ return;
+ case ALREADY_KNOWS_MOVE:
+ sub_81B6D98(taskId, gText_PkmnAlreadyKnows);
+ return;
+ default:
+ if (GiveMoveToMon(mon, gUnknown_0203CEC8.unkE) != 0xFFFF)
+ {
+ sub_81B6EB4(taskId);
+ return;
+ }
+ break;
+ }
+ sub_81B6D74(gText_PkmnNeedsToReplaceMove);
+ gTasks[taskId].func = sub_81B6FF4;
+ }
+}
+
+void CB2_PartyMenuFromStartMenu(void)
+{
+ InitPartyMenu(0, 0, 0, 0, 0, sub_81B1370, CB2_ReturnToFieldWithOpenMenu);
+}
+
+void sub_81B7F60(void)
+{
+ MainCallback callback = (InBattlePyramid() == FALSE) ? c2_815ABFC : sub_81C4F84;
+ InitPartyMenu(0, 0, 5, 0, 6, sub_81B1370, callback);
+ gUnknown_0203CEC8.unkC = gSpecialVar_ItemId;
+}
+
+void sub_81B7FAC(u8 taskId)
+{
+ gUnknown_0203CEFC = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_HELD_ITEM);
+ if (gUnknown_0203CEFC == ITEM_NONE)
+ {
+ sub_81B8044(taskId);
+ }
+ else if (ItemIsMail(gUnknown_0203CEFC))
+ {
+ sub_81B83B8(taskId);
+ }
+ else
+ {
+ sub_81B1D1C(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEFC, 1);
+ gTasks[taskId].func = sub_81B82A0;
+ }
+}
+
+void sub_81B8044(u8 taskId)
+{
+ if (ItemIsMail(gUnknown_0203CEC8.unkC))
+ {
+ sub_81B83F0(gUnknown_0203CEC8.unkC);
+ gUnknown_0203CEC4->exitCallback = sub_81B814C;
+ sub_81B12C0(taskId);
+ }
+ else
+ {
+ sub_81B8088(taskId);
+ }
+}
+
+void sub_81B8088(u8 taskId)
+{
+ u16 item;
+
+ if (!gPaletteFade.active)
+ {
+ item = gUnknown_0203CEC8.unkC;
+ sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], item, 0, 1);
+ sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], item);
+ sub_81B83F0(item);
+ gTasks[taskId].func = sub_81B8104;
+ }
+}
+
+void sub_81B8104(u8 taskId)
+{
+ s8 slot = gUnknown_0203CEC8.unk9;
+
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B5C94(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]);
+ sub_81B12C0(taskId);
+ }
+}
+
+void sub_81B814C(void)
+{
+ u8 mail;
+
+ sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEC8.unkC);
+ mail = GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAIL);
+ sub_811A20C(4, gSaveBlock1Ptr->mail[mail].words, sub_81B81A8, 3);
+}
+
+void sub_81B81A8(void)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ u16 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+
+ if (gSpecialVar_Result == FALSE)
+ {
+ TakeMailFromMon(mon);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &gUnknown_0203CEFC);
+ RemoveBagItem(gUnknown_0203CEFC, 1);
+ sub_81B841C(item);
+ SetMainCallback2(gUnknown_0203CEC8.exitCallback);
+ }
+ else
+ {
+ InitPartyMenu(gUnknown_0203CEC8.unk8_0, 0xFF, gUnknown_0203CEC8.unkB, 1, 0x7F, sub_81B8230, gUnknown_0203CEC8.exitCallback);
+ }
+}
+
+void sub_81B8230(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gUnknown_0203CEFC != ITEM_NONE)
+ sub_81B1D68(gUnknown_0203CEC8.unkC, gUnknown_0203CEFC, 0);
+ else
+ sub_81B1C84(&gPlayerParty[gUnknown_0203CEC8.unk9], gUnknown_0203CEC8.unkC, 0, 1);
+ gTasks[taskId].func = sub_81B8104;
+ }
+}
+
+void sub_81B82A0(u8 taskId)
+{
+ if (sub_81B1BD4() != TRUE)
+ {
+ sub_81B334C();
+ gTasks[taskId].func = sub_81B82D4;
+ }
+}
+
+void sub_81B82D4(u8 taskId)
+{
+ u16 item;
+
+ switch (Menu_ProcessInputNoWrapClearOnChoose())
+ {
+ case 0:
+ item = gUnknown_0203CEC8.unkC;
+ sub_81B83F0(item);
+ if (AddBagItem(gUnknown_0203CEFC, 1) == FALSE)
+ {
+ sub_81B841C(item);
+ pokemon_item_not_removed(gUnknown_0203CEFC);
+ sub_81B1B5C(gStringVar4, 0);
+ gTasks[taskId].func = sub_81B8104;
+ }
+ else if (ItemIsMail(item))
+ {
+ gUnknown_0203CEC4->exitCallback = sub_81B814C;
+ sub_81B12C0(taskId);
+ }
+ else
+ {
+ sub_81B1DB8(&gPlayerParty[gUnknown_0203CEC8.unk9], item);
+ sub_81B1D68(item, gUnknown_0203CEFC, 1);
+ gTasks[taskId].func = sub_81B8104;
+ }
+ break;
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ case 1:
+ gTasks[taskId].func = sub_81B8104;
+ break;
+ }
+}
+
+void sub_81B83B8(u8 taskId)
+{
+ sub_81B1B5C(gText_RemoveMailBeforeItem, 1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B8104;
+}
+
+void sub_81B83F0(u16 item)
+{
+ if (gUnknown_0203CEC8.unkB == 6)
+ RemovePCItem(item, 1);
+ else
+ RemoveBagItem(item, 1);
+}
+
+bool8 sub_81B841C(u16 item)
+{
+ if (gUnknown_0203CEC8.unkB == 5)
+ return AddBagItem(item, 1);
+ else
+ return AddPCItem(item, 1);
+}
+
+void sub_81B8448(void)
+{
+ InitPartyMenu(0, 0, 7, 0, 6, sub_81B1370, Mailbox_ReturnToMailListAfterDeposit);
+}
+
+void sub_81B8474(u8 taskId)
+{
+ struct Pokemon *mon = &gPlayerParty[gUnknown_0203CEC8.unk9];
+ struct MailStruct *mail;
+
+ gUnknown_0203CEE8 = 0;
+ mail = &gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos];
+ if (GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE)
+ {
+ sub_81B1B5C(gText_PkmnHoldingItemCantHoldMail, 1);
+ }
+ else
+ {
+ GiveMailToMon2(mon, mail);
+ ClearMailStruct(mail);
+ sub_81B1B5C(gText_MailTransferredFromMailbox, 1);
+ }
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_81B8104;
+}
+
+void sub_81B8518(u8 unused)
+{
+ sub_81B8558();
+ InitPartyMenu(4, 0, 0, 0, 0, sub_81B1370, gMain.savedCallback);
+ gUnknown_0203CEC8.unk4 = sub_81B879C;
+}
+
+void sub_81B8558(void)
+{
+ memset(gSelectedOrderFromParty, 0, ARRAY_COUNT(gSelectedOrderFromParty));
+}
+
+u8 sub_81B856C(s8 slot)
+{
+ if (GetBattleEntryEligibility(&gPlayerParty[slot]) == FALSE)
+ return 2;
+ if (sub_81B8770(slot + 1) == TRUE)
+ return 1;
+ return 0;
+}
+
+bool8 GetBattleEntryEligibility(struct Pokemon *mon)
+{
+ u16 i = 0;
+ u16 species;
+
+ if (GetMonData(mon, MON_DATA_IS_EGG) || GetMonData(mon, MON_DATA_LEVEL) > sub_81B8888() ||
+ (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY) &&
+ gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY) &&
+ GetMonData(mon, MON_DATA_HELD_ITEM) != ITEM_NONE))
+ return FALSE;
+ switch (VarGet(VAR_FRONTIER_FACILITY)) // oddly the specific cases are beyond 6, turns out case 9 is apparently related to link battles
+ {
+ case 9:
+ if (GetMonData(mon, MON_DATA_HP) != 0)
+ return TRUE;
+ return FALSE;
+ case 8:
+ return TRUE;
+ default:
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ for (; gFrontierBannedSpecies[i] != 0xFFFF; i++)
+ {
+ if (gFrontierBannedSpecies[i] == species)
+ return FALSE;
+ }
+ return TRUE;
+ }
+}
+
+#ifdef NONMATCHING
+u8 sub_81B865C(void)
+{
+ u8 unk = sub_81B885C();
+ u8 unk2;
+ u8 i, j;
+ u16 species;
+ u16 item;
+ u8 facilityNum;
+
+ if (gSelectedOrderFromParty[unk - 1] == 0)
+ {
+ if (unk == 1)
+ return 14;
+ ConvertIntToDecimalStringN(gStringVar1, unk, 0, 1);
+ return 17;
+ }
+ facilityNum = VarGet(VAR_FRONTIER_FACILITY);
+ if (facilityNum != 8 && facilityNum != 9)
+ {
+ unk2 = sub_81B8830();
+ for (i = 0; i < (unk2 - 1); i++)
+ {
+ species = GetMonData(&gPlayerParty[gSelectedOrderFromParty[i - 1]], MON_DATA_SPECIES);
+ item = GetMonData(&gPlayerParty[gSelectedOrderFromParty[i - 1]], MON_DATA_HELD_ITEM);
+ for (j = i + 1; j < unk2; j++)
+ {
+ if (species == GetMonData(&gPlayerParty[gSelectedOrderFromParty[j - 1]], MON_DATA_SPECIES))
+ return 18;
+ if (item != ITEM_NONE && item == GetMonData(&gPlayerParty[gSelectedOrderFromParty[j - 1]], MON_DATA_HELD_ITEM))
+ return 19;
+ }
+ }
+ }
+ return 0xFF;
+}
+#else
+NAKED
+u8 sub_81B865C(void)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ bl sub_81B885C\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ adds r1, r2, 0\n\
+ ldr r3, =gSelectedOrderFromParty\n\
+ adds r0, r2, r3\n\
+ subs r0, 0x1\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _081B869C\n\
+ cmp r2, 0x1\n\
+ bne _081B8688\n\
+ movs r0, 0xE\n\
+ b _081B8758\n\
+ .pool\n\
+_081B8688:\n\
+ ldr r0, =gStringVar1\n\
+ movs r2, 0\n\
+ movs r3, 0x1\n\
+ bl ConvertIntToDecimalStringN\n\
+ movs r0, 0x11\n\
+ b _081B8758\n\
+ .pool\n\
+_081B869C:\n\
+ ldr r0, =0x000040cf\n\
+ bl VarGet\n\
+ lsls r0, 24\n\
+ movs r1, 0xF8\n\
+ lsls r1, 24\n\
+ adds r0, r1\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bhi _081B86C0\n\
+ b _081B8756\n\
+ .pool\n\
+_081B86B8:\n\
+ movs r0, 0x12\n\
+ b _081B8758\n\
+_081B86BC:\n\
+ movs r0, 0x13\n\
+ b _081B8758\n\
+_081B86C0:\n\
+ bl sub_81B8830\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ movs r5, 0\n\
+ b _081B8750\n\
+_081B86CE:\n\
+ ldr r3, =gSelectedOrderFromParty\n\
+ adds r4, r3, r5\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0x64\n\
+ muls r0, r1\n\
+ subs r0, 0x64\n\
+ ldr r3, =gPlayerParty\n\
+ adds r0, r3, r0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r10, r0\n\
+ ldrb r0, [r4]\n\
+ movs r1, 0x64\n\
+ muls r0, r1\n\
+ subs r0, 0x64\n\
+ ldr r3, =gPlayerParty\n\
+ adds r0, r3, r0\n\
+ movs r1, 0xC\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ adds r1, r5, 0x1\n\
+ lsls r0, r1, 24\n\
+ lsrs r4, r0, 24\n\
+ mov r9, r1\n\
+ cmp r4, r8\n\
+ bcs _081B8748\n\
+ movs r7, 0x64\n\
+_081B870E:\n\
+ ldr r0, =gSelectedOrderFromParty\n\
+ adds r5, r0, r4\n\
+ ldrb r0, [r5]\n\
+ muls r0, r7\n\
+ subs r0, 0x64\n\
+ ldr r1, =gPlayerParty\n\
+ adds r0, r1, r0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ cmp r10, r0\n\
+ beq _081B86B8\n\
+ cmp r6, 0\n\
+ beq _081B873E\n\
+ ldrb r0, [r5]\n\
+ muls r0, r7\n\
+ subs r0, 0x64\n\
+ ldr r3, =gPlayerParty\n\
+ adds r0, r3, r0\n\
+ movs r1, 0xC\n\
+ bl GetMonData\n\
+ cmp r6, r0\n\
+ beq _081B86BC\n\
+_081B873E:\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, r8\n\
+ bcc _081B870E\n\
+_081B8748:\n\
+ mov r1, r9\n\
+ lsls r0, r1, 24\n\
+ lsrs r5, r0, 24\n\
+ mov r0, r8\n\
+_081B8750:\n\
+ subs r0, 0x1\n\
+ cmp r5, r0\n\
+ blt _081B86CE\n\
+_081B8756:\n\
+ movs r0, 0xFF\n\
+_081B8758:\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool\n");
+}
+#endif
+
+bool8 sub_81B8770(u8 slot)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (gSelectedOrderFromParty[i] == slot)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void sub_81B879C(u8 taskId)
+{
+ u8 msgID = sub_81B865C();
+
+ if (msgID != 0xFF)
+ {
+ PlaySE(SE_HAZURE);
+ display_pokemon_menu_message(msgID);
+ gTasks[taskId].func = sub_81B87E8;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ sub_81B12C0(taskId);
+ }
+}
+
+void sub_81B87E8(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+ }
+}
+
+u8 sub_81B8830(void)
+{
+ switch (VarGet(VAR_FRONTIER_FACILITY))
+ {
+ case 9:
+ return 3;
+ case 8:
+ return 2;
+ default:
+ return gSpecialVar_0x8005;
+ }
+}
+
+u8 sub_81B885C(void)
+{
+ switch (VarGet(VAR_FRONTIER_FACILITY))
+ {
+ case 9:
+ return 1;
+ case 8:
+ return 2;
+ default:
+ return gSpecialVar_0x8005;
+ }
+}
+
+u8 sub_81B8888(void)
+{
+ switch (VarGet(VAR_FRONTIER_FACILITY))
+ {
+ case 9:
+ return 100;
+ case 8:
+ return 30;
+ default:
+ if (gSpecialVar_0x8004 == 0)
+ return 50;
+ return 100;
+ }
+}
+
+const u8* sub_81B88BC(void)
+{
+ u8 facilityNum = VarGet(VAR_FRONTIER_FACILITY);
+
+ if (!(facilityNum != 8 && facilityNum != 9))
+ return gText_CancelBattle;
+ if (facilityNum == FRONTIER_FACILITY_DOME && gSpecialVar_0x8005 == 2)
+ return gText_ReturnToWaitingRoom;
+ return gText_CancelChallenge;
+}
+
+void sub_81B8904(u8 initArg, MainCallback callback)
+{
+ InitPartyMenu(initArg, 0, 0, 0, 0, sub_81B1370, callback);
+}
+
+void sub_81B892C(void)
+{
+ InitPartyMenu(0, 0, 12, 0, 4, sub_81B1370, CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+void sub_81B8958(void)
+{
+ InitPartyMenu(11, 0, 13, 0, 1, sub_81B1370, CB2_ReturnToFieldContinueScriptPlayMapMusic);
+}
+
+u8 sub_81B8984(void)
+{
+ if (IsDoubleBattle() == FALSE)
+ return 0;
+ if (IsMultiBattle() == TRUE)
+ return 2;
+ return 1;
+}
+
+void OpenPartyMenuInBattle(u8 arg)
+{
+ InitPartyMenu(1, sub_81B8984(), arg, 0, 0, sub_81B1370, SetCB2ToReshowScreenAfterMenu);
+ nullsub_35();
+ pokemon_change_order();
+}
+
+void sub_81B89F0(void)
+{
+ InitPartyMenu(1, sub_81B8984(), 3, 0, 5, sub_81B1370, c2_815ABFC);
+ nullsub_35();
+ pokemon_change_order();
+}
+
+u8 sub_81B8A2C(struct Pokemon *mon)
+{
+ if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(mon, MON_DATA_IS_EGG) == FALSE)
+ {
+ if (gUnknown_0203CEC8.unkB == 1)
+ return 3;
+ if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA))
+ return 2;
+ }
+ return 7;
+}
+
+bool8 sub_81B8A7C(void)
+{
+ u8 slot = GetCursorSelectionMonId();
+ u8 newSlot;
+ u8 i;
+ u8 neededToMatch;
+
+ if (IsMultiBattle() == TRUE && (slot == 1 || slot == 4 || slot == 5))
+ {
+ StringCopy(gStringVar1, GetTrainerPartnerName());
+ StringExpandPlaceholders(gStringVar4, gText_CantSwitchWithAlly);
+ return FALSE;
+ }
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0)
+ {
+ GetMonNickname(&gPlayerParty[slot], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHasNoEnergy);
+ return FALSE;
+ }
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (GetBattlerSide(i) == B_SIDE_PLAYER && sub_81B8F38(slot) == gBattlerPartyIndexes[i])
+ {
+ GetMonNickname(&gPlayerParty[slot], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadyInBattle);
+ return FALSE;
+ }
+ }
+ if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG))
+ {
+ StringExpandPlaceholders(gStringVar4, gText_EggCantBattle);
+ return FALSE;
+ }
+ if (sub_81B8F38(slot) == gBattleStruct->field_8B)
+ {
+ GetMonNickname(&gPlayerParty[slot], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadySelected);
+ return FALSE;
+ }
+ if (gUnknown_0203CEC8.unkB == 4)
+ {
+ SetMonPreventsSwitchingString();
+ return FALSE;
+ }
+ if (gUnknown_0203CEC8.unkB == 2)
+ {
+ neededToMatch = gBattlerInMenuId;
+ GetMonNickname(&gPlayerParty[pokemon_order_func(gBattlerPartyIndexes[neededToMatch])], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnCantSwitchOut);
+ return FALSE;
+ }
+ gUnknown_0203CEE9 = sub_81B8F38(slot);
+ gUnknown_0203CEE8 = 1;
+ newSlot = pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]);
+ sub_81B8FB0(newSlot, slot);
+ sub_81B1288(&gPlayerParty[newSlot], &gPlayerParty[slot]);
+ return TRUE;
+}
+
+void sub_81B8C68(void)
+{
+ sub_81B8C88(gUnknown_0203CF00, sub_806D7EC());
+}
+
+void sub_81B8C88(u8 *ptr, bool8 multiplayerFlag)
+{
+ u8 partyIndexes[6];
+ int i, j;
+
+ if (IsMultiBattle() == TRUE)
+ {
+ if (multiplayerFlag)
+ {
+ ptr[0] = 0 | (3 << 4);
+ ptr[1] = 5 | (4 << 4);
+ ptr[2] = 2 | (1 << 4);
+ }
+ else
+ {
+ ptr[0] = 3 | (0 << 4);
+ ptr[1] = 2 | (1 << 4);
+ ptr[2] = 5 | (4 << 4);
+ }
+ return;
+ }
+ else if (IsDoubleBattle() == FALSE)
+ {
+ j = 1;
+ partyIndexes[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (i != partyIndexes[0])
+ {
+ partyIndexes[j] = i;
+ j++;
+ }
+ }
+ }
+ else
+ {
+ j = 2;
+ partyIndexes[0] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)];
+ partyIndexes[1] = gBattlerPartyIndexes[GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)];
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (i != partyIndexes[0] && i != partyIndexes[1])
+ {
+ partyIndexes[j] = i;
+ j++;
+ }
+ }
+ }
+ for (i = 0; i < 3; i++)
+ ptr[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)];
+}
+
+void sub_81B8D64(u8 battlerPosition, u8 multiplayerFlag)
+{
+ sub_81B8D88(gBattleStruct->field_60[battlerPosition], multiplayerFlag, battlerPosition);
+}
+
+void sub_81B8D88(u8 *ptr, bool8 multiplayerFlag, u8 battlerPosition)
+{
+ u8 partyIndexes[6];
+ int i, j;
+ u8 leftBattler;
+ u8 rightBattler;
+
+ if (GetBattlerSide(battlerPosition) == B_SIDE_PLAYER)
+ {
+ leftBattler = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ rightBattler = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ }
+ else
+ {
+ leftBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ rightBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ }
+ if (IsMultiBattle() == TRUE)
+ {
+ if (multiplayerFlag)
+ {
+ ptr[0] = 0 | (3 << 4);
+ ptr[1] = 5 | (4 << 4);
+ ptr[2] = 2 | (1 << 4);
+ }
+ else
+ {
+ ptr[0] = 3 | (0 << 4);
+ ptr[1] = 2 | (1 << 4);
+ ptr[2] = 5 | (4 << 4);
+ }
+ return;
+ }
+ else if (IsDoubleBattle() == FALSE)
+ {
+ j = 1;
+ partyIndexes[0] = gBattlerPartyIndexes[leftBattler];
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (i != partyIndexes[0])
+ {
+ partyIndexes[j] = i;
+ j++;
+ }
+ }
+ }
+ else
+ {
+ j = 2;
+ partyIndexes[0] = gBattlerPartyIndexes[leftBattler];
+ partyIndexes[1] = gBattlerPartyIndexes[rightBattler];
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (i != partyIndexes[0] && i != partyIndexes[1])
+ {
+ partyIndexes[j] = i;
+ j++;
+ }
+ }
+ }
+ for (i = 0; i < 3; i++)
+ ptr[i] = (partyIndexes[0 + (i * 2)] << 4) | partyIndexes[1 + (i * 2)];
+}
+
+void sub_81B8E80(u8 battlerPosition, u8 unk, u8 arrayIndex)
+{
+ u8 possiblePartyIndexes[6];
+ u8 unk2 = 0;
+ int i, j;
+ u8 *battleStructRelated;
+ u8 possiblePartyIndexBuffer;
+
+ if (IsMultiBattle())
+ {
+ battleStructRelated = gBattleStruct->field_60[battlerPosition];
+ for (i = j = 0; i < 3; j++, i++)
+ {
+ possiblePartyIndexes[j] = battleStructRelated[i] >> 4;
+ j++;
+ possiblePartyIndexes[j] = battleStructRelated[i] & 0xF;
+ }
+ possiblePartyIndexBuffer = possiblePartyIndexes[arrayIndex];
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (possiblePartyIndexes[i] == unk)
+ {
+ unk2 = possiblePartyIndexes[i];
+ possiblePartyIndexes[i] = possiblePartyIndexBuffer;
+ break;
+ }
+ }
+ if (i != PARTY_SIZE)
+ {
+ possiblePartyIndexes[arrayIndex] = unk2;
+ battleStructRelated[0] = (possiblePartyIndexes[0] << 4) | possiblePartyIndexes[1];
+ battleStructRelated[1] = (possiblePartyIndexes[2] << 4) | possiblePartyIndexes[3];
+ battleStructRelated[2] = (possiblePartyIndexes[4] << 4) | possiblePartyIndexes[5];
+ }
+ }
+}
+
+u8 sub_81B8F38(u8 slot)
+{
+ u8 modResult = slot & 1;
+ u8 retVal;
+
+ slot /= 2;
+ if (modResult != 0)
+ retVal = gUnknown_0203CF00[slot] & 0xF;
+ else
+ retVal = gUnknown_0203CF00[slot] >> 4;
+ return retVal;
+}
+
+void sub_81B8F6C(u8 slot, u8 setVal)
+{
+ bool32 modResult = slot & 1;
+
+ slot /= 2;
+ if (modResult != 0)
+ gUnknown_0203CF00[slot] = (gUnknown_0203CF00[slot] & 0xF0) | setVal;
+ else
+ gUnknown_0203CF00[slot] = (gUnknown_0203CF00[slot] & 0xF) | (setVal << 4);
+}
+
+void sub_81B8FB0(u8 slot, u8 slot2)
+{
+ u8 valBuffer = sub_81B8F38(slot);
+ sub_81B8F6C(slot, sub_81B8F38(slot2));
+ sub_81B8F6C(slot2, valBuffer);
+}
+
+u8 pokemon_order_func(u8 slot)
+{
+ u8 i, j;
+
+ for (j = i = 0; i < 3; j++, i++)
+ {
+ if ((gUnknown_0203CF00[i] >> 4) != slot)
+ {
+ j++;
+ if ((gUnknown_0203CF00[i] & 0xF) == slot)
+ return j;
+ }
+ else
+ {
+ return j;
+ }
+ }
+ return 0;
+}
+
+void pokemon_change_order(void)
+{
+ struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty));
+ u8 i;
+
+ memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty));
+ for (i = 0; i < PARTY_SIZE; i++)
+ memcpy(&gPlayerParty[pokemon_order_func(i)], &partyBuffer[i], sizeof(struct Pokemon));
+ Free(partyBuffer);
+}
+
+void sub_81B9080(void)
+{
+ struct Pokemon *partyBuffer = Alloc(sizeof(gPlayerParty));
+ u8 i;
+
+ memcpy(partyBuffer, gPlayerParty, sizeof(gPlayerParty));
+ for (i = 0; i < PARTY_SIZE; i++)
+ memcpy(&gPlayerParty[sub_81B8F38(i)], &partyBuffer[i], sizeof(struct Pokemon));
+ Free(partyBuffer);
+}
+
+void sub_81B90D0(void)
+{
+ u8 i;
+ struct Pokemon *mon;
+ u8 leadVal;
+
+ for (i = 1; i < PARTY_SIZE; i++)
+ {
+ mon = &gPlayerParty[sub_81B8F38(i)];
+ if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE && GetMonData(mon, MON_DATA_HP) != 0)
+ {
+ leadVal = sub_81B8F38(0);
+ sub_81B8FB0(0, i);
+ sub_81B1288(&gPlayerParty[leadVal], mon);
+ break;
+ }
+ }
+}
+
+void sub_81B9140(void)
+{
+ SetMainCallback2(SetCB2ToReshowScreenAfterMenu);
+}
+
+void sub_81B9150(void)
+{
+ InitPartyMenu(5, 3, 0, 0, 0x7F, sub_81B917C, gMain.savedCallback);
+}
+
+void sub_81B917C(u8 taskId)
+{
+ gTasks[taskId].data[0] = 256;
+ sub_81B9294(taskId);
+ ChangeBgX(2, 0x10000, 0);
+ gTasks[taskId].func = sub_81B91B4;
+}
+
+void sub_81B91B4(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 i;
+
+ if (!gPaletteFade.active)
+ {
+ data[0] -= 8;
+ sub_81B9294(taskId);
+ if (data[0] == 0)
+ {
+ for (i = 3; i < PARTY_SIZE; i++)
+ {
+ if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE)
+ AnimateSelectedPartyIcon(gUnknown_0203CEDC[i].unk9, 0);
+ }
+ PlaySE(SE_W231); // Harden SE?
+ gTasks[taskId].func = sub_81B9240;
+ }
+ }
+}
+
+void sub_81B9240(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (++data[0] == 0x100)
+ sub_81B12C0(taskId);
+}
+
+void sub_81B9270(u8 spriteId, s16 x)
+{
+ if (x >= 0)
+ gSprites[spriteId].pos2.x = x;
+}
+
+void sub_81B9294(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 i;
+
+ for (i = 3; i < PARTY_SIZE; i++)
+ {
+ if (gUnknown_02022FF8[i - 3].species != SPECIES_NONE)
+ {
+ sub_81B9270(gUnknown_0203CEDC[i].unk9, data[0] - 8);
+ sub_81B9270(gUnknown_0203CEDC[i].unkA, data[0] - 8);
+ sub_81B9270(gUnknown_0203CEDC[i].unkB, data[0] - 8);
+ sub_81B9270(gUnknown_0203CEDC[i].unkC, data[0] - 8);
+ }
+ }
+ ChangeBgX(2, 0x800, 1);
+}
+
+void sub_81B9328(void)
+{
+ InitPartyMenu(6, 0, 0, 0, 15, sub_81B1370, sub_81B9390);
+}
+
+void sub_81B9354(u8 arg1)
+{
+ gFieldCallback2 = hm_add_c3_without_phase_2;
+ InitPartyMenu(arg1, 0, 11, 0, 0, sub_81B1370, CB2_ReturnToField);
+}
+
+void sub_81B9390(void)
+{
+ gSpecialVar_0x8004 = GetCursorSelectionMonId();
+ if (gSpecialVar_0x8004 >= PARTY_SIZE)
+ gSpecialVar_0x8004 = 0xFF;
+ gFieldCallback2 = hm_add_c3_without_phase_2;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+bool8 hm_add_c3_without_phase_2(void) // might not be bool
+{
+ pal_fill_black();
+ CreateTask(task_hm_without_phase_2, 10);
+ return TRUE;
+}
+
+void task_hm_without_phase_2(u8 taskId)
+{
+ if (IsWeatherNotFadingIn())
+ {
+ DestroyTask(taskId);
+ ScriptContext2_Disable();
+ EnableBothScriptContexts();
+ }
+}
+
+void sub_81B9404(void)
+{
+ ScriptContext2_Enable();
+ FadeScreen(FADE_TO_BLACK, 0);
+ CreateTask(sub_81B9424, 10);
+}
+
+void sub_81B9424(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ InitPartyMenu(2, 0, 11, 0, 0, sub_81B1370, sub_81B9470);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81B9470(void)
+{
+ gUnknown_02039F24 = GetCursorSelectionMonId();
+ if (gUnknown_02039F24 >= PARTY_SIZE)
+ gUnknown_02039F24 = 0xFF;
+ gSpecialVar_0x8004 = gUnknown_02039F24;
+ gFieldCallback2 = hm_add_c3_without_phase_2;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+void sub_81B94B0(void)
+{
+ ScriptContext2_Enable();
+ FadeScreen(FADE_TO_BLACK, 0);
+ CreateTask(sub_81B94D0, 10);
+}
+
+void sub_81B94D0(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ InitPartyMenu(3, 0, 11, 0, 0, sub_81B1370, sub_81B9390);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81B951C(void)
+{
+ ScriptContext2_Enable();
+ FadeScreen(FADE_TO_BLACK, 0);
+ CreateTask(sub_81B953C, 10);
+}
+
+void sub_81B953C(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ InitPartyMenu(7, 0, 11, 0, 0, sub_81B1370, sub_81B9588);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81B9588(void)
+{
+ gSpecialVar_0x8004 = GetCursorSelectionMonId();
+ if (gSpecialVar_0x8004 >= PARTY_SIZE)
+ gSpecialVar_0x8004 = 0xFF;
+ else
+ gSpecialVar_0x8005 = GetNumberOfRelearnableMoves(&gPlayerParty[gSpecialVar_0x8004]);
+ gFieldCallback2 = hm_add_c3_without_phase_2;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+void sub_81B95E0(void)
+{
+ u8 i;
+
+ gSpecialVar_Result = FALSE;
+ for (i = 0; i < 3; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) != ITEM_NONE)
+ {
+ gSpecialVar_Result = TRUE;
+ break;
+ }
+ }
+}
+
+void sub_81B9620(void)
+{
+ ScriptContext2_Enable();
+ FadeScreen(FADE_TO_BLACK, 0);
+ CreateTask(sub_81B9640, 10);
+}
+
+void sub_81B9640(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ InitPartyMenu(12, 0, 0, 0, 0, sub_81B1370, sub_81B9390);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_81B968C(void)
+{
+ ShowPokemonSummaryScreen(PSS_MODE_SELECT_MOVE, gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField);
+ gFieldCallback = sub_80AF168;
+}
+
+void sub_81B96D0(void)
+{
+ u8 i;
+
+ gSpecialVar_Result = 0;
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i) != ITEM_NONE)
+ gSpecialVar_Result++;
+ }
+}
+
+void sub_81B9718(void)
+{
+ struct Pokemon *mon = &gPlayerParty[gSpecialVar_0x8004];
+ u16 move = GetMonData(mon, MON_DATA_MOVE1 + gSpecialVar_0x8005);
+
+ GetMonNickname(mon, gStringVar1);
+ StringCopy(gStringVar2, gMoveNames[move]);
+}
+
+void sub_81B9770(void)
+{
+ u16 i;
+
+ SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], MOVE_NONE, gSpecialVar_0x8005);
+ RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005);
+ for (i = gSpecialVar_0x8005; i < MAX_MON_MOVES - 1; i++)
+ sub_81B97DC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1);
+}
+
+void sub_81B97DC(struct Pokemon *mon, u8 slotTo, u8 slotFrom)
+{
+ u16 move1 = GetMonData(mon, MON_DATA_MOVE1 + slotTo);
+ u16 move0 = GetMonData(mon, MON_DATA_MOVE1 + slotFrom);
+ u8 pp1 = GetMonData(mon, MON_DATA_PP1 + slotTo);
+ u8 pp0 = GetMonData(mon, MON_DATA_PP1 + slotFrom);
+ u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
+ u8 ppBonusMask1 = gUnknown_08329D22[slotTo];
+ u8 ppBonusMove1 = (ppBonuses & ppBonusMask1) >> (slotTo * 2);
+ u8 ppBonusMask2 = gUnknown_08329D22[slotFrom];
+ u8 ppBonusMove2 = (ppBonuses & ppBonusMask2) >> (slotFrom * 2);
+ ppBonuses &= ~ppBonusMask1;
+ ppBonuses &= ~ppBonusMask2;
+ ppBonuses |= (ppBonusMove1 << (slotFrom * 2)) + (ppBonusMove2 << (slotTo * 2));
+ SetMonData(mon, MON_DATA_MOVE1 + slotTo, &move0);
+ SetMonData(mon, MON_DATA_MOVE1 + slotFrom, &move1);
+ SetMonData(mon, MON_DATA_PP1 + slotTo, &pp0);
+ SetMonData(mon, MON_DATA_PP1 + slotFrom, &pp1);
+ SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
+}
+
+void sub_81B98DC(void)
+{
+ if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_IS_EGG))
+ gSpecialVar_Result = TRUE;
+ else
+ gSpecialVar_Result = FALSE;
+}
+
+void sub_81B9918(void)
+{
+ u16 move;
+ u32 i, j;
+
+ gSpecialVar_Result = FALSE;
+ move = GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + gSpecialVar_0x8005);
+ if (move == MOVE_SURF)
+ {
+ for (i = 0; i < CalculatePlayerPartyCount(); i++)
+ {
+ if (i != gSpecialVar_0x8004)
+ {
+ for (j = 0; j < MAX_MON_MOVES; j++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j) == MOVE_SURF)
+ return;
+ }
+ }
+ }
+ if (AnyStorageMonWithMove(move) != TRUE)
+ gSpecialVar_Result = TRUE;
+ }
+}
diff --git a/src/player_pc.c b/src/player_pc.c
index ec0d250b4..b7380cee3 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -3,9 +3,8 @@
#include "bg.h"
#include "decoration.h"
#include "event_scripts.h"
-#include "field_fadetransition.h"
#include "event_object_movement.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_weather.h"
#include "international_string_util.h"
#include "item.h"
diff --git a/src/poison.c b/src/poison.c
index efa89ec13..a72aab111 100644
--- a/src/poison.c
+++ b/src/poison.c
@@ -194,7 +194,7 @@ void sub_810DBAC(struct Sprite *sprite)
if (!gBattleAnimArgs[3])
StartSpriteAnim(sprite, 2);
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
sprite->data[0] = gBattleAnimArgs[2];
sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
@@ -218,7 +218,7 @@ void sub_810DC2C(struct Sprite *sprite)
if (!gBattleAnimArgs[3])
StartSpriteAnim(sprite, 2);
- InitAnimSpritePos(sprite, 1);
+ InitSpritePosToAnimAttacker(sprite, 1);
SetAverageBattlerPositions(gBattleAnimTarget, 1, &l1, &l2);
if (GetBattlerSide(gBattleAnimAttacker))
@@ -258,7 +258,7 @@ void sub_810DCD0(struct Sprite *sprite)
static void sub_810DD24(struct Sprite *sprite)
{
- sub_80A656C(sprite);
+ AnimTranslateLinearSimple(sprite);
sprite->data[1] -= sprite->data[5];
sprite->data[2] -= sprite->data[6];
@@ -295,7 +295,7 @@ void AnimBubbleEffect(struct Sprite *sprite)
{
if (!gBattleAnimArgs[2])
{
- sub_80A6980(sprite, TRUE);
+ InitSpritePosToAnimTarget(sprite, TRUE);
}
else
{
diff --git a/src/pokeball.c b/src/pokeball.c
index d159d9254..baa165649 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -426,7 +426,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
sprite->pos2.y = 0;
sprite->data[5] = 0;
ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler));
- LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId);
sprite->sBattler = opponentBattler;
sprite->data[7] = noOfShakes;
@@ -737,7 +737,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
- LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
+ AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId);
sprite->callback = HandleBallAnimEnd;
@@ -922,7 +922,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
StartSpriteAffineAnim(sprite, 4);
}
r4 = sprite->data[0];
- TranslateAnimLinear(sprite);
+ AnimTranslateLinear(sprite);
sprite->data[7] += sprite->sBattler / 3;
sprite->pos2.y += Sin(HIBYTE(sprite->data[7]), sprite->data[5]);
sprite->oam.affineParam += 0x100;
@@ -985,9 +985,9 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
#undef sBattler
-static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d)
+static u8 AnimateBallOpenParticlesForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d)
{
- return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE);
+ return AnimateBallOpenParticles(x, y, kindOfStars, d, BALL_POKE);
}
static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2)
@@ -1036,7 +1036,7 @@ static void sub_8076524(struct Sprite *sprite)
r5 = 0;
StartSpriteAnim(sprite, 1);
- LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
+ AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4);
sprite->callback = sub_80765E0;
gSprites[r7].invisible = FALSE;
@@ -1129,7 +1129,7 @@ static void sub_80767D4(struct Sprite *sprite)
r6 = 0;
StartSpriteAnim(sprite, 1);
- LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6);
+ AnimateBallOpenParticlesForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6);
sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5);
sprite->callback = sub_807687C;
StartSpriteAffineAnim(&gSprites[r7], 2);
diff --git a/src/pokedex.c b/src/pokedex.c
index ee5c99334..755a46821 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -75,9 +75,6 @@ struct UnknownStruct4
u8 unk9;
};
-#define HOENN_DEX_COUNT 202
-#define NATIONAL_DEX_COUNT 386
-
extern struct MusicPlayerInfo gMPlayInfo_BGM;
struct PokedexListItem
@@ -132,12 +129,6 @@ struct PokedexView
enum
{
- DEX_MODE_HOENN,
- DEX_MODE_NATIONAL
-};
-
-enum
-{
AREA_SCREEN,
CRY_SCREEN,
SIZE_SCREEN,
@@ -176,7 +167,7 @@ u16 sub_80BD69C(u16, u16);
void sub_80BD8D0(void);
bool8 sub_80BD930(void);
u8 sub_80BDA40(void);
-u16 sub_80BDA8C(u16);
+u16 GetPokemonSpriteToDisplay(u16);
u32 sub_80BDACC(u16, s16, s16);
static void CreateInterfaceSprites(u8);
void sub_80BE470(struct Sprite *sprite);
@@ -1237,7 +1228,7 @@ void ResetPokedex(void)
gUnknown_02039B50 = 0;
gUnknown_02039B52 = 64;
gUnknown_030060B0 = 0;
- gSaveBlock2Ptr->pokedex.unknown1 = 0;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
gSaveBlock2Ptr->pokedex.order = 0;
gSaveBlock2Ptr->pokedex.nationalMagic = 0;
gSaveBlock2Ptr->pokedex.unknown2 = 0;
@@ -1289,7 +1280,7 @@ static void ResetPokedexView(struct PokedexView *pokedexView)
pokedexView->unk618 = 0;
pokedexView->seenCount = 0;
pokedexView->ownCount = 0;
- for (i = 0; i <= 3; i++)
+ for (i = 0; i < 4; i++)
pokedexView->unk61E[i] |= 0xFFFF;
pokedexView->unk628 = 0;
pokedexView->unk62A = 0;
@@ -1348,7 +1339,7 @@ void CB2_Pokedex(void)
sPokedexView = AllocZeroed(sizeof(struct PokedexView));
ResetPokedexView(sPokedexView);
CreateTask(sub_80BB78C, 0);
- sPokedexView->dexMode = gSaveBlock2Ptr->pokedex.unknown1;
+ sPokedexView->dexMode = gSaveBlock2Ptr->pokedex.mode;
if (!IsNationalPokedexEnabled())
sPokedexView->dexMode = DEX_MODE_HOENN;
sPokedexView->dexOrder = gSaveBlock2Ptr->pokedex.order;
@@ -1571,9 +1562,9 @@ void sub_80BBDE8(u8 taskId)
{
if (!gPaletteFade.active)
{
- gSaveBlock2Ptr->pokedex.unknown1 = sPokedexView->dexMode;
+ gSaveBlock2Ptr->pokedex.mode = sPokedexView->dexMode;
if (!IsNationalPokedexEnabled())
- gSaveBlock2Ptr->pokedex.unknown1 = DEX_MODE_HOENN;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
gSaveBlock2Ptr->pokedex.order = sPokedexView->dexOrder;
sub_80BDA40();
sub_80BC890();
@@ -1898,6 +1889,9 @@ void sub_80BC890(void)
void sub_80BC8D4(u8 dexMode, u8 sortMode)
{
u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever.
+#define temp_dexCount vars[0]
+#define temp_isHoennDex vars[1]
+#define temp_dexNum vars[2]
s16 i;
sPokedexView->pokemonListCount = 0;
@@ -1906,19 +1900,19 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
{
default:
case DEX_MODE_HOENN:
- vars[0] = HOENN_DEX_COUNT;
- vars[1] = 1;
+ temp_dexCount = HOENN_DEX_COUNT;
+ temp_isHoennDex = TRUE;
break;
case DEX_MODE_NATIONAL:
if (IsNationalPokedexEnabled())
{
- vars[0] = NATIONAL_DEX_COUNT;
- vars[1] = 0;
+ temp_dexCount = NATIONAL_DEX_COUNT;
+ temp_isHoennDex = FALSE;
}
else
{
- vars[0] = HOENN_DEX_COUNT;
- vars[1] = 1;
+ temp_dexCount = HOENN_DEX_COUNT;
+ temp_isHoennDex = TRUE;
}
break;
}
@@ -1926,14 +1920,14 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
switch (sortMode)
{
case 0:
- if (vars[1])
+ if (temp_isHoennDex)
{
- for (i = 0; i < vars[0]; i++)
+ for (i = 0; i < temp_dexCount; i++)
{
- vars[2] = HoennToNationalOrder(i + 1);
- sPokedexView->pokedexList[i].dexNum = vars[2];
- sPokedexView->pokedexList[i].seen = GetSetPokedexFlag(vars[2], 0);
- sPokedexView->pokedexList[i].owned = GetSetPokedexFlag(vars[2], 1);
+ temp_dexNum = HoennToNationalOrder(i + 1);
+ sPokedexView->pokedexList[i].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[i].seen = GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN);
+ sPokedexView->pokedexList[i].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
if (sPokedexView->pokedexList[i].seen)
sPokedexView->pokemonListCount = i + 1;
}
@@ -1944,17 +1938,17 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
s16 r5;
r10 = r5 = i = 0;
- for (i = 0; i < vars[0]; i++)
+ for (i = 0; i < temp_dexCount; i++)
{
- vars[2] = i + 1;
- if (GetSetPokedexFlag(vars[2], 0))
+ temp_dexNum = i + 1;
+ if (GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
r10 = 1;
if (r10)
{
asm(""); //Needed to match for some reason
- sPokedexView->pokedexList[r5].dexNum = vars[2];
- sPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(vars[2], 0);
- sPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(vars[2], 1);
+ sPokedexView->pokedexList[r5].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[r5].seen = GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN);
+ sPokedexView->pokedexList[r5].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
if (sPokedexView->pokedexList[r5].seen)
sPokedexView->pokemonListCount = r5 + 1;
r5++;
@@ -1965,13 +1959,13 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 1:
for (i = 0; i < POKEMON_SLOTS_NUMBER - 1; i++)
{
- vars[2] = gPokedexOrder_Alphabetical[i];
+ temp_dexNum = gPokedexOrder_Alphabetical[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 0))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_SEEN))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = GetSetPokedexFlag(vars[2], 1);
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT);
sPokedexView->pokemonListCount++;
}
}
@@ -1979,13 +1973,13 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 2:
for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
{
- vars[2] = gPokedexOrder_Weight[i];
+ temp_dexNum = gPokedexOrder_Weight[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
@@ -1993,27 +1987,27 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 3:
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
- vars[2] = gPokedexOrder_Weight[i];
+ temp_dexNum = gPokedexOrder_Weight[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
break;
case 4:
- for (i = NATIONAL_DEX_COUNT - 1; i >=0; i--)
+ for (i = NATIONAL_DEX_COUNT - 1; i >= 0; i--)
{
- vars[2] = gPokedexOrder_Height[i];
+ temp_dexNum = gPokedexOrder_Height[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
@@ -2021,13 +2015,13 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
case 5:
for (i = 0; i < NATIONAL_DEX_COUNT; i++)
{
- vars[2] = gPokedexOrder_Height[i];
+ temp_dexNum = gPokedexOrder_Height[i];
- if (NationalToHoennOrder(vars[2]) <= vars[0] && GetSetPokedexFlag(vars[2], 1))
+ if (NationalToHoennOrder(temp_dexNum) <= temp_dexCount && GetSetPokedexFlag(temp_dexNum, FLAG_GET_CAUGHT))
{
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = vars[2];
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = 1;
- sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = 1;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].dexNum = temp_dexNum;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].seen = TRUE;
+ sPokedexView->pokedexList[sPokedexView->pokemonListCount].owned = TRUE;
sPokedexView->pokemonListCount++;
}
}
@@ -2037,8 +2031,8 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode)
for (i = sPokedexView->pokemonListCount; i < NATIONAL_DEX_COUNT; i++)
{
sPokedexView->pokedexList[i].dexNum |= 0xFFFF;
- sPokedexView->pokedexList[i].seen = 0;
- sPokedexView->pokedexList[i].owned = 0;
+ sPokedexView->pokedexList[i].seen = FALSE;
+ sPokedexView->pokedexList[i].owned = FALSE;
}
}
@@ -2192,7 +2186,7 @@ static void CreateInitialPokemonSprites(u16 selectedMon, u16 b)
sPokedexView->unk61E[i] = 0xFFFF;
sPokedexView->selectedMonSpriteId = 0xFFFF;
- unk = sub_80BDA8C(selectedMon - 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon - 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2200,7 +2194,7 @@ static void CreateInitialPokemonSprites(u16 selectedMon, u16 b)
gSprites[spriteId].data[5] = -32;
}
- unk = sub_80BDA8C(selectedMon);
+ unk = GetPokemonSpriteToDisplay(selectedMon);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2208,7 +2202,7 @@ static void CreateInitialPokemonSprites(u16 selectedMon, u16 b)
gSprites[spriteId].data[5] = 0;
}
- unk = sub_80BDA8C(selectedMon + 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon + 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2274,7 +2268,7 @@ static void CreateNewPokemonSprite(u8 direction, u16 selectedMon)
switch (direction)
{
case 1: // up
- unk = sub_80BDA8C(selectedMon - 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon - 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2287,7 +2281,7 @@ static void CreateNewPokemonSprite(u8 direction, u16 selectedMon)
sPokedexView->unk630 = 15;
break;
case 2: // down
- unk = sub_80BDA8C(selectedMon + 1);
+ unk = GetPokemonSpriteToDisplay(selectedMon + 1);
if (unk != 0xFFFF)
{
spriteId = sub_80BDACC(unk, 0x60, 0x50);
@@ -2449,12 +2443,12 @@ u8 sub_80BDA40(void)
return FALSE;
}
-u16 sub_80BDA8C(u16 a1)
+u16 GetPokemonSpriteToDisplay(u16 species)
{
- if (a1 >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[a1].dexNum == 0xFFFF)
+ if (species >= NATIONAL_DEX_COUNT || sPokedexView->pokedexList[species].dexNum == 0xFFFF)
return 0xFFFF;
- else if (sPokedexView->pokedexList[a1].seen)
- return sPokedexView->pokedexList[a1].dexNum;
+ else if (sPokedexView->pokedexList[species].seen)
+ return sPokedexView->pokedexList[species].dexNum;
else
return 0;
}
@@ -2467,7 +2461,7 @@ u32 sub_80BDACC(u16 num, s16 x, s16 y)
{
if (sPokedexView->unk61E[i] == 0xFFFF)
{
- u8 spriteId = sub_80C0E9C(num, x, y, i);
+ u8 spriteId = CreateMonSpriteFromNationalDexNumber(num, x, y, i);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.priority = 3;
@@ -2963,7 +2957,7 @@ void sub_80BEA24(u8 taskId)
case 5:
if (gTasks[taskId].data[1] == 0)
{
- gTasks[taskId].data[4] = (u16)sub_80C0E9C(sPokedexListItem->dexNum, 0x30, 0x38, 0);
+ gTasks[taskId].data[4] = (u16)CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
}
gMain.state++;
@@ -3251,7 +3245,7 @@ void sub_80BF250(u8 taskId)
gMain.state++;
break;
case 5:
- gTasks[taskId].data[4] = sub_80C0E9C(sPokedexListItem->dexNum, 48, 56, 0);
+ gTasks[taskId].data[4] = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 48, 56, 0);
gSprites[gTasks[taskId].data[4]].oam.priority = 0;
gDexCryScreenState = 0;
gMain.state++;
@@ -3459,7 +3453,7 @@ void sub_80BF82C(u8 taskId)
gMain.state++;
break;
case 6:
- spriteId = sub_80C0E9C(sPokedexListItem->dexNum, 88, 56, 1);
+ spriteId = CreateMonSpriteFromNationalDexNumber(sPokedexListItem->dexNum, 88, 56, 1);
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].oam.matrixNum = 2;
gSprites[spriteId].oam.priority = 0;
@@ -3790,7 +3784,7 @@ void sub_80BFE38(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 4:
- spriteId = sub_80C0E9C(dexNum, 0x30, 0x38, 0);
+ spriteId = CreateMonSpriteFromNationalDexNumber(dexNum, 48, 56, 0);
gSprites[spriteId].oam.priority = 0;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK);
SetVBlankCallback(gUnknown_030060B4);
@@ -4348,7 +4342,7 @@ u16 GetHoennPokedexCount(u8 caseID)
u16 count = 0;
u16 i;
- for (i = 0; i < 202; i++)
+ for (i = 0; i < HOENN_DEX_COUNT; i++)
{
switch (caseID)
{
@@ -4417,17 +4411,17 @@ u16 sub_80C0944(void)
for (i = 0; i < 150; i++)
{
- if (GetSetPokedexFlag(i + 1, 1) == 0)
+ if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
return 0;
}
for (i = 151; i < 248; i++)
{
- if (GetSetPokedexFlag(i + 1, 1) == 0)
+ if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
return 0;
}
for (i = 251; i < 384; i++)
{
- if (GetSetPokedexFlag(i + 1, 1) == 0)
+ if (!GetSetPokedexFlag(i + 1, FLAG_GET_CAUGHT))
return 0;
}
return 1;
@@ -4643,10 +4637,10 @@ u32 sub_80C0E68(u16 a)
}
}
-u16 sub_80C0E9C(u16 num, s16 x, s16 y, u16 paletteSlot)
+u16 CreateMonSpriteFromNationalDexNumber(u16 nationalNum, s16 x, s16 y, u16 paletteSlot)
{
- num = NationalPokedexNumToSpecies(num);
- return CreateMonPicSprite_HandleDeoxys(num, 8, sub_80C0E68(num), TRUE, x, y, paletteSlot, 0xFFFF);
+ nationalNum = NationalPokedexNumToSpecies(nationalNum);
+ return CreateMonPicSprite_HandleDeoxys(nationalNum, 8, sub_80C0E68(nationalNum), TRUE, x, y, paletteSlot, 0xFFFF);
}
u16 sub_80C0EF8(u16 species, s16 x, s16 y, s8 paletteSlot)
@@ -4980,10 +4974,10 @@ void sub_80C170C(u8 taskId)
sPokedexView->unk62A = 0x40;
gUnknown_02039B50 = 0;
sPokedexView->unk610 = 0;
- gSaveBlock2Ptr->pokedex.unknown1 = sub_80C2318(taskId, 5);
+ gSaveBlock2Ptr->pokedex.mode = sub_80C2318(taskId, 5);
if (!IsNationalPokedexEnabled())
- gSaveBlock2Ptr->pokedex.unknown1 = 0;
- sPokedexView->unk614 = gSaveBlock2Ptr->pokedex.unknown1;
+ gSaveBlock2Ptr->pokedex.mode = DEX_MODE_HOENN;
+ sPokedexView->unk614 = gSaveBlock2Ptr->pokedex.mode;
gSaveBlock2Ptr->pokedex.order = sub_80C2318(taskId, 4);
sPokedexView->unk618 = gSaveBlock2Ptr->pokedex.order;
PlaySE(SE_PC_OFF);
diff --git a/src/pokemon.c b/src/pokemon.c
index aea52ecbb..1e8126c5e 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -45,12 +45,6 @@ struct SpeciesItem
u16 item;
};
-// Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-// Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
extern const struct OamData gUnknown_0831ACB0;
extern const struct OamData gUnknown_0831ACA8;
extern const struct SpriteFrameImage gUnknown_082FF3A8[];
@@ -2755,7 +2749,7 @@ void CreateMonWithEVSpread(struct Pokemon *mon, u16 species, u8 level, u8 fixedI
CalculateMonStats(mon);
}
-void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src)
+void sub_806819C(struct Pokemon *mon, struct BattleTowerPokemon *src)
{
s32 i;
u8 nickname[30];
@@ -2809,7 +2803,7 @@ void sub_806819C(struct Pokemon *mon, struct UnknownPokemonStruct *src)
CalculateMonStats(mon);
}
-void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lvl50)
+void sub_8068338(struct Pokemon *mon, struct BattleTowerPokemon *src, bool8 lvl50)
{
s32 i;
u8 nickname[30];
@@ -2937,7 +2931,7 @@ void CreateMonWithEVSpreadNatureOTID(struct Pokemon *mon, u16 species, u8 level,
CalculateMonStats(mon);
}
-void sub_80686FC(struct Pokemon *mon, struct UnknownPokemonStruct *dest)
+void sub_80686FC(struct Pokemon *mon, struct BattleTowerPokemon *dest)
{
s32 i;
u16 heldItem;
@@ -5864,10 +5858,10 @@ u16 HoennPokedexNumToSpecies(u16 hoennNum)
species = 0;
- while (species < 411 && gSpeciesToHoennPokedexNum[species] != hoennNum)
+ while (species < (NUM_SPECIES - 1) && gSpeciesToHoennPokedexNum[species] != hoennNum)
species++;
- if (species == 411)
+ if (species == NUM_SPECIES - 1)
return 0;
return species + 1;
@@ -5882,10 +5876,10 @@ u16 NationalPokedexNumToSpecies(u16 nationalNum)
species = 0;
- while (species < 411 && gSpeciesToNationalPokedexNum[species] != nationalNum)
+ while (species < (NUM_SPECIES - 1) && gSpeciesToNationalPokedexNum[species] != nationalNum)
species++;
- if (species == 411)
+ if (species == NUM_SPECIES - 1)
return 0;
return species + 1;
@@ -5900,10 +5894,10 @@ u16 NationalToHoennOrder(u16 nationalNum)
hoennNum = 0;
- while (hoennNum < 411 && gHoennToNationalOrder[hoennNum] != nationalNum)
+ while (hoennNum < (NUM_SPECIES - 1) && gHoennToNationalOrder[hoennNum] != nationalNum)
hoennNum++;
- if (hoennNum == 411)
+ if (hoennNum == NUM_SPECIES - 1)
return 0;
return hoennNum + 1;
@@ -5935,13 +5929,13 @@ u16 HoennToNationalOrder(u16 hoennNum)
u16 SpeciesToCryId(u16 species)
{
- if (species <= 250)
+ if (species <= SPECIES_CELEBI - 1)
return species;
- if (species < 276)
- return 200;
+ if (species < SPECIES_TREECKO - 1)
+ return SPECIES_UNOWN - 1;
- return gSpeciesIdToCryId[species - 276];
+ return gSpeciesIdToCryId[species - (SPECIES_TREECKO - 1)];
}
void sub_806D544(u16 species, u32 personality, u8 *dest)
@@ -6584,15 +6578,15 @@ u16 SpeciesToPokedexNum(u16 species)
else
{
species = SpeciesToHoennPokedexNum(species);
- if (species <= 202)
+ if (species <= HOENN_DEX_COUNT)
return species;
return 0xFFFF;
}
}
-bool32 sub_806E3F8(u16 species)
+bool32 IsSpeciesInHoennDex(u16 species)
{
- if (SpeciesToHoennPokedexNum(species) > 202)
+ if (SpeciesToHoennPokedexNum(species) > HOENN_DEX_COUNT)
return FALSE;
else
return TRUE;
@@ -6707,12 +6701,6 @@ const u32 *GetMonFrontSpritePal(struct Pokemon *mon)
return GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality);
}
-// Extracts the upper 16 bits of a 32-bit number
-#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
-
-// Extracts the lower 16 bits of a 32-bit number
-#define LOHALF(n) ((n) & 0xFFFF)
-
const u32 *GetFrontSpritePalFromSpeciesAndPersonality(u16 species, u32 otId, u32 personality)
{
u32 shinyValue;
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 5c3e1b4a6..3028b5ca1 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -6,7 +6,7 @@
#include "dma3.h"
#include "dynamic_placeholder_text_util.h"
#include "event_data.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_weather.h"
#include "gpu_regs.h"
#include "graphics.h"
@@ -10198,7 +10198,7 @@ void SetBoxWallpaper(u8 boxId, u8 wallpaperId)
gPokemonStoragePtr->boxWallpapers[boxId] = wallpaperId;
}
-s16 sub_80D214C(struct BoxPokemon *boxMons, s8 currIndex, u8 maxIndex, u8 arg3)
+s16 sub_80D214C(struct BoxPokemon *boxMons, u8 currIndex, u8 maxIndex, u8 arg3)
{
s16 i;
s16 adder = -1;
@@ -10208,7 +10208,7 @@ s16 sub_80D214C(struct BoxPokemon *boxMons, s8 currIndex, u8 maxIndex, u8 arg3)
if (arg3 == 1 || arg3 == 3)
{
- for (i = currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
+ for (i = (s8)currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
{
if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE)
return i;
@@ -10216,7 +10216,7 @@ s16 sub_80D214C(struct BoxPokemon *boxMons, s8 currIndex, u8 maxIndex, u8 arg3)
}
else
{
- for (i = currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
+ for (i = (s8)currIndex + adder; i >= 0 && i <= maxIndex; i += adder)
{
if (GetBoxMonData(&boxMons[i], MON_DATA_SPECIES) != SPECIES_NONE
&& !GetBoxMonData(&boxMons[i], MON_DATA_IS_EGG))
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index ebdb8b21a..a72e83b96 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -129,7 +129,7 @@ struct UnkStruct_61CC04
};
// forward declarations
-bool8 sub_81B1250(void);
+bool8 IsMultiBattle(void);
static bool8 SummaryScreen_LoadGraphics(void);
static void SummaryScreen_LoadingCB2(void);
static void InitBGs(void);
@@ -1500,7 +1500,7 @@ static void sub_81C0604(u8 taskId, s8 a)
}
r4_2 = sub_80D214C(pssData->monList.boxMons, pssData->curMonIndex, pssData->maxMonIndex, a);
}
- else if (sub_81B1250() == 1)
+ else if (IsMultiBattle() == TRUE)
{
r4_2 = sub_81C09B4(a);
}
@@ -3254,7 +3254,7 @@ static void PrintHeldItemName(void)
const u8 *text;
int offset;
- if (pssData->summary.item == ITEM_ENIGMA_BERRY && sub_81B1250() == TRUE && (pssData->curMonIndex == 1 || pssData->curMonIndex == 4 || pssData->curMonIndex == 5))
+ if (pssData->summary.item == ITEM_ENIGMA_BERRY && IsMultiBattle() == TRUE && (pssData->curMonIndex == 1 || pssData->curMonIndex == 4 || pssData->curMonIndex == 5))
{
text = ItemId_GetName(ITEM_ENIGMA_BERRY);
}
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 975b51386..2b497c82b 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -22,8 +22,8 @@
#include "constants/songs.h"
#include "menu.h"
#include "overworld.h"
-#include "field_screen.h"
-#include "fldeff_80F9BCC.h"
+#include "field_screen_effect.h"
+#include "fldeff_misc.h"
#include "script.h"
#include "event_data.h"
#include "lilycove_lady.h"
@@ -647,7 +647,7 @@ static void ReceiveOldManData(OldMan *oldMan, size_t recordSize, u8 which)
static void ReceiveBattleTowerData(void *battleTowerRecord, size_t recordSize, u8 which)
{
struct EmeraldBattleTowerRecord *dest;
- struct UnknownPokemonStruct *btPokemon;
+ struct BattleTowerPokemon *btPokemon;
u32 mixIndices[4];
s32 i;
@@ -1866,7 +1866,7 @@ static void SanitizeEmeraldBattleTowerRecord(struct EmeraldBattleTowerRecord *ds
for (i = 0; i < 4; i++)
{
- struct UnknownPokemonStruct *towerMon = &dst->party[i];
+ struct BattleTowerPokemon *towerMon = &dst->party[i];
if (towerMon->species != 0)
StripExtCtrlCodes(towerMon->nickname);
}
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index 7f2eb3746..06d2af5b7 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -226,7 +226,7 @@ static void CreateBattlerSprite(u8 battler)
return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -241,7 +241,7 @@ static void CreateBattlerSprite(u8 battler)
SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(B_POSITION_PLAYER_LEFT));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
(8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].coords) * 4 + 80,
- sub_80A82E4(0));
+ GetBattlerSpriteSubpriority(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -251,7 +251,7 @@ static void CreateBattlerSprite(u8 battler)
SetMultiuseSpriteTemplateToTrainerBack(TRAINER_BACK_PIC_WALLY, GetBattlerPosition(0));
gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, 0x50,
(8 - gTrainerBackPicCoords[TRAINER_BACK_PIC_WALLY].coords) * 4 + 80,
- sub_80A82E4(0));
+ GetBattlerSpriteSubpriority(0));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
@@ -262,7 +262,7 @@ static void CreateBattlerSprite(u8 battler)
return;
SetMultiuseSpriteTemplateToPokemon(GetMonData(&gPlayerParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES), GetBattlerPosition(battler));
- gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, sub_80A82E4(battler));
+ gBattlerSpriteIds[battler] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battler, 2), posY, GetBattlerSpriteSubpriority(battler));
gSprites[gBattlerSpriteIds[battler]].oam.paletteNum = battler;
gSprites[gBattlerSpriteIds[battler]].callback = SpriteCallbackDummy;
gSprites[gBattlerSpriteIds[battler]].data[0] = battler;
diff --git a/src/rock.c b/src/rock.c
index 3b8e505d8..ff3840fb3 100644
--- a/src/rock.c
+++ b/src/rock.c
@@ -340,7 +340,7 @@ static void sub_8110A70(struct Sprite *sprite)
sprite->data[3] = 32;
sprite->data[4] = -24;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
sprite->callback = sub_80A6450;
sprite->callback(sprite);
}
@@ -367,16 +367,16 @@ void sub_8110AB4(struct Sprite *sprite)
sprite->data[3] = 0;
sprite->data[4] = 0;
- sprite->callback = sub_80A656C;
- StoreSpriteCallbackInData6(sprite, move_anim_8074EE0);
+ sprite->callback = AnimTranslateLinearSimple;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
}
void sub_8110B38(struct Sprite *sprite)
{
if (gBattleAnimArgs[6] == 0)
- InitAnimSpritePos(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, 0);
else
- sub_80A6980(sprite, FALSE);
+ InitSpritePosToAnimTarget(sprite, FALSE);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[1] = gBattleAnimArgs[2];
@@ -555,7 +555,7 @@ void AnimDirtParticleAcrossScreen(struct Sprite *sprite)
void AnimRaiseSprite(struct Sprite *sprite)
{
StartSpriteAnim(sprite, gBattleAnimArgs[4]);
- InitAnimSpritePos(sprite, 0);
+ InitSpritePosToAnimAttacker(sprite, 0);
sprite->data[0] = gBattleAnimArgs[3];
sprite->data[2] = sprite->pos1.x;
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index 0553b9cf4..deec55c9d 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -32,7 +32,7 @@
#include "decompress.h"
#include "start_menu.h"
#include "data2.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
extern void HealPlayerParty(void);
diff --git a/src/save.c b/src/save.c
index 4ae516fc9..905f075fb 100644
--- a/src/save.c
+++ b/src/save.c
@@ -5,6 +5,7 @@
#include "decompress.h"
#include "load_save.h"
#include "overworld.h"
+#include "pokemon_storage_system.h"
#include "main.h"
#include "constants/game_stat.h"
diff --git a/src/scrcmd.c b/src/scrcmd.c
index f486b93a6..9d9c62a82 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -13,7 +13,6 @@
#include "event_data.h"
#include "field_door.h"
#include "field_effect.h"
-#include "field_fadetransition.h"
#include "event_object_movement.h"
#include "field_message_box.h"
#include "field_player_avatar.h"
@@ -1486,7 +1485,7 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
StringExpandPlaceholders(gStringVar4, ptr + 6);
- width = GetStringWidth(6, gStringVar4, -1) / 8;
+ width = GetStringWidth(6, gStringVar4, -1) / 8u;
if (width > 0x1C)
width = 0x1C;
diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c
index 9f18d4b3a..9e4cb7719 100755
--- a/src/script_pokemon_util_80F87D8.c
+++ b/src/script_pokemon_util_80F87D8.c
@@ -220,7 +220,7 @@ static void ShowContestWinnerCleanup(void)
void ShowContestWinner(void)
{
- SetMainCallback2(sub_812FDEC);
+ SetMainCallback2(CB2_ContestPainting);
gMain.savedCallback = ShowContestWinnerCleanup;
}
@@ -563,8 +563,8 @@ u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 u
{
case 0:
case 1:
- GetSetPokedexFlag(nationalDexNum, 2);
- GetSetPokedexFlag(nationalDexNum, 3);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
break;
}
return sentToPc;
diff --git a/src/secret_base.c b/src/secret_base.c
index 4bf1709d2..a32186419 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -1,5 +1,3 @@
-
-// Includes
#include "global.h"
#include "constants/bg_event_constants.h"
#include "constants/decorations.h"
@@ -19,11 +17,11 @@
#include "fieldmap.h"
#include "field_camera.h"
#include "field_player_avatar.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_weather.h"
#include "event_object_movement.h"
#include "field_effect.h"
-#include "fldeff_80F9BCC.h"
+#include "fldeff_misc.h"
#include "metatile_behavior.h"
#include "map_name_popup.h"
#include "string_util.h"
@@ -190,7 +188,7 @@ void sub_80E8B6C(void)
continue;
}
gSpecialVar_Result = TRUE;
- VarSet(VAR_0x4054, i);
+ VarSet(VAR_CURRENT_SECRET_BASE, i);
break;
}
}
@@ -320,7 +318,7 @@ void sub_80E8E18(void)
{
gSaveBlock1Ptr->secretBases[0].trainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
}
- VarSet(VAR_0x4054, 0);
+ VarSet(VAR_CURRENT_SECRET_BASE, 0);
StringCopyN(gSaveBlock1Ptr->secretBases[0].trainerName, gSaveBlock2Ptr->playerName, sub_80E8DF4(gSaveBlock2Ptr->playerName));
gSaveBlock1Ptr->secretBases[0].gender = gSaveBlock2Ptr->playerGender;
gSaveBlock1Ptr->secretBases[0].language = GAME_LANGUAGE;
@@ -383,7 +381,7 @@ void sub_80E8FD0(u8 taskId)
}
break;
case 1:
- secretBaseRecordId = VarGet(VAR_0x4054);
+ secretBaseRecordId = VarGet(VAR_CURRENT_SECRET_BASE);
if (gSaveBlock1Ptr->secretBases[secretBaseRecordId].sbr_field_10 < 255)
{
gSaveBlock1Ptr->secretBases[secretBaseRecordId].sbr_field_10 ++;
@@ -479,7 +477,7 @@ void sub_80E9238(u8 flagIn)
if (CurrentMapIsSecretBase())
{
- curBaseId = VarGet(VAR_0x4054);
+ curBaseId = VarGet(VAR_CURRENT_SECRET_BASE);
decorations = gSaveBlock1Ptr->secretBases[curBaseId].decorations;
decorPos = gSaveBlock1Ptr->secretBases[curBaseId].decorationPos;
for (x = 0; x < 16; x ++)
@@ -522,7 +520,7 @@ void sub_80E933C(void)
}
else
{
- curBase = VarGet(VAR_0x4054);
+ curBase = VarGet(VAR_CURRENT_SECRET_BASE);
roomDecor = gSaveBlock1Ptr->secretBases[curBase].decorations;
roomDecorPos = gSaveBlock1Ptr->secretBases[curBase].decorationPos;
nDecor = 16;
@@ -558,7 +556,7 @@ void sub_80E933C(void)
show_sprite(gSpecialVar_Result, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
sub_808EBA8(gSpecialVar_Result, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007);
sub_808F254(gSpecialVar_Result, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
- if (CurrentMapIsSecretBase() == TRUE && VarGet(VAR_0x4054) != 0)
+ if (CurrentMapIsSecretBase() == TRUE && VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
if (category == DECORCAT_DOLL)
{
@@ -594,7 +592,7 @@ void sub_80E9578(void)
void sub_80E95D4(void)
{
- VarSet(VAR_OBJ_GFX_ID_F, gUnknown_0858D060[sub_80EA20C(VarGet(VAR_0x4054))]);
+ VarSet(VAR_OBJ_GFX_ID_F, gUnknown_0858D060[sub_80EA20C(VarGet(VAR_CURRENT_SECRET_BASE))]);
}
void sub_80E9608(const struct MapPosition *position, const struct MapEvents *events)
@@ -681,7 +679,7 @@ u8 *sub_80E9780(u8 *dest, u8 secretBaseRecordId)
u8 *GetSecretBaseMapName(u8 *dest)
{
- return sub_80E9780(dest, VarGet(VAR_0x4054));
+ return sub_80E9780(dest, VarGet(VAR_CURRENT_SECRET_BASE));
}
void sub_80E980C(void)
@@ -689,7 +687,7 @@ void sub_80E980C(void)
u8 secretBaseRecordId;
const u8 *src;
- secretBaseRecordId = VarGet(VAR_0x4054);
+ secretBaseRecordId = VarGet(VAR_CURRENT_SECRET_BASE);
src = gSaveBlock1Ptr->secretBases[secretBaseRecordId].trainerName;
*StringCopyN(gStringVar1, src, sub_80E8DF4(src)) = EOS;
ConvertInternationalString(gStringVar1, gSaveBlock1Ptr->secretBases[secretBaseRecordId].language);
@@ -829,7 +827,7 @@ u8 sub_80E9BA8(void)
void sub_80E9BDC(void)
{
- if (sub_80E9878(VarGet(VAR_0x4054)) == TRUE)
+ if (sub_80E9878(VarGet(VAR_CURRENT_SECRET_BASE)) == TRUE)
{
gSpecialVar_Result = 1;
}
@@ -845,7 +843,7 @@ void sub_80E9BDC(void)
void sub_80E9C2C(void)
{
- gSaveBlock1Ptr->secretBases[VarGet(VAR_0x4054)].sbr_field_1_6 ^= 1;
+ gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].sbr_field_1_6 ^= 1;
FlagSet(0x10C);
}
@@ -1081,7 +1079,7 @@ void sub_80EA18C(u8 taskId)
void task_pc_turn_off(u8 taskId)
{
- if (VarGet(VAR_0x4054) == 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) == 0)
{
ScriptContext1_SetupScript(gUnknown_0823B4E8);
}
@@ -1101,7 +1099,7 @@ const u8 *GetSecretBaseTrainerLoseText(void)
{
u8 param;
- param = sub_80EA20C(VarGet(VAR_0x4054));
+ param = sub_80EA20C(VarGet(VAR_CURRENT_SECRET_BASE));
if (param == 0)
{
return SecretBase_RedCave1_Text_274966;
@@ -1150,7 +1148,7 @@ void sub_80EA2E4(void)
void sub_80EA30C(void)
{
- gSaveBlock1Ptr->secretBases[VarGet(VAR_0x4054)].sbr_field_1_5 = gSpecialVar_Result;
+ gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].sbr_field_1_5 = gSpecialVar_Result;
}
void sub_80EA354(void)
@@ -1158,7 +1156,7 @@ void sub_80EA354(void)
u16 secretBaseRecordId;
u8 i;
- secretBaseRecordId = VarGet(VAR_0x4054);
+ secretBaseRecordId = VarGet(VAR_CURRENT_SECRET_BASE);
if (!FlagGet(0x922))
{
for (i = 0; i < 20; i ++)
@@ -1183,7 +1181,7 @@ void sub_80EA3E4(u8 taskId)
switch (data[1])
{
case 0:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
gUnknown_0203A01D = TRUE;
}
@@ -1256,7 +1254,7 @@ void sub_80EA3E4(u8 taskId)
}
else if (MetatileBehavior_IsSecretBaseBalloon(behavior) == TRUE)
{
- sub_80FA5E4(MapGridGetMetatileIdAt(x, y), x, y);
+ PopSecretBaseBalloon(MapGridGetMetatileIdAt(x, y), x, y);
if (gUnknown_0203A01D == TRUE)
{
switch ((int)MapGridGetMetatileIdAt(x, y))
@@ -1278,7 +1276,7 @@ void sub_80EA3E4(u8 taskId)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x400);
}
- sub_80FA794(x, y);
+ ShatterSecretBaseBreakableDoor(x, y);
}
else if (MetatileBehavior_IsSecretBaseSoundMat(behavior) == TRUE){
if (gUnknown_0203A01D == TRUE) {
@@ -1783,7 +1781,7 @@ void sub_80EB1AC(void)
VarSet(VAR_0x40ED, 0);
VarSet(VAR_0x40EE, 0);
VarSet(VAR_0x40EF, 0);
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40F0, TRUE);
}
@@ -1811,7 +1809,7 @@ void sub_80EB218(void)
void sub_80EB290(void)
{
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x800);
}
@@ -1819,7 +1817,7 @@ void sub_80EB290(void)
void sub_80EB2C8(void)
{
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x400);
}
@@ -1827,7 +1825,7 @@ void sub_80EB2C8(void)
void sub_80EB300(void)
{
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) & ~0x3800);
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) & ~0x001);
@@ -1837,7 +1835,7 @@ void sub_80EB300(void)
void sub_80EB368(void)
{
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) & ~0x3800);
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) & ~0x001);
@@ -1847,7 +1845,7 @@ void sub_80EB368(void)
void sub_80EB3D0(void)
{
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) & ~0x3800);
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) & ~0x001);
@@ -1857,7 +1855,7 @@ void sub_80EB3D0(void)
void sub_80EB438(void)
{
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) & ~0x3800);
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) & ~0x001);
@@ -1888,7 +1886,7 @@ void sub_80EB498(void)
case 0x332:
case 0x333:
case 0x334:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x4000);
}
@@ -1906,7 +1904,7 @@ void sub_80EB56C(void)
{
case 0x28a:
case 0x28b:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x40);
}
@@ -1929,21 +1927,21 @@ void sub_80EB56C(void)
case 0x2f9:
case 0x2fa:
case 0x2fb:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x8);
}
break;
case 0x22c:
case 0x233:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x40);
}
break;
case 0x288:
case 0x289:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x100);
}
@@ -1951,7 +1949,7 @@ void sub_80EB56C(void)
case 0x22d:
case 0x22e:
case 0x22f:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x10);
}
@@ -1979,7 +1977,7 @@ void sub_80EB56C(void)
case 0x2cd:
case 0x2ce:
case 0x2cf:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x8);
}
@@ -2006,7 +2004,7 @@ void sub_80EB9E0(void)
case 0x2be:
case 0x2c3:
case 0x2c6:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x8);
}
@@ -2044,14 +2042,14 @@ void sub_80EBB28(void)
case 0x2c4:
case 0x2c5:
case 0x2c7:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x8);
}
break;
case 0x280:
case 0x281:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x100);
}
@@ -2059,7 +2057,7 @@ void sub_80EBB28(void)
case 0x225:
case 0x226:
case 0x227:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x10);
}
@@ -2077,7 +2075,7 @@ void sub_80EBE7C(void)
{
case 0x28d:
case 0x28e:
- if (VarGet(VAR_0x4054) != 0)
+ if (VarGet(VAR_CURRENT_SECRET_BASE) != 0)
{
VarSet(VAR_0x40EF, VarGet(VAR_0x40EF) | 0x4);
}
diff --git a/src/shop.c b/src/shop.c
index b08d94545..c44cbca12 100755
--- a/src/shop.c
+++ b/src/shop.c
@@ -6,7 +6,7 @@
#include "decoration_inventory.h"
#include "event_object_movement.h"
#include "field_player_avatar.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
#include "field_weather.h"
#include "fieldmap.h"
#include "gpu_regs.h"
diff --git a/src/start_menu.c b/src/start_menu.c
index 62fdc07d5..ad7b4b6cc 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -88,7 +88,7 @@ extern void sub_80AF688(void);
extern void var_800D_set_xB(void);
extern void sub_808B864(void);
extern void CB2_Pokedex(void);
-extern void play_some_sound(void);
+extern void PlayRainSoundEffect(void);
extern void CB2_PartyMenuFromStartMenu(void);
extern void CB2_PokeNav(void);
extern void sub_80C4DDC(void (*)(void));
@@ -621,7 +621,7 @@ static bool8 StartMenuPokedexCallback(void)
if (!gPaletteFade.active)
{
IncrementGameStat(GAME_STAT_CHECKED_POKEDEX);
- play_some_sound();
+ PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
SetMainCallback2(CB2_Pokedex);
@@ -636,7 +636,7 @@ static bool8 StartMenuPokemonCallback(void)
{
if (!gPaletteFade.active)
{
- play_some_sound();
+ PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
SetMainCallback2(CB2_PartyMenuFromStartMenu); // Display party menu
@@ -651,7 +651,7 @@ static bool8 StartMenuBagCallback(void)
{
if (!gPaletteFade.active)
{
- play_some_sound();
+ PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
SetMainCallback2(CB2_BagMenuFromStartMenu); // Display bag menu
@@ -666,7 +666,7 @@ static bool8 StartMenuPokeNavCallback(void)
{
if (!gPaletteFade.active)
{
- play_some_sound();
+ PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
SetMainCallback2(CB2_PokeNav); // Display PokeNav
@@ -681,7 +681,7 @@ static bool8 StartMenuPlayerNameCallback(void)
{
if (!gPaletteFade.active)
{
- play_some_sound();
+ PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
@@ -720,7 +720,7 @@ static bool8 StartMenuOptionCallback(void)
{
if (!gPaletteFade.active)
{
- play_some_sound();
+ PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
SetMainCallback2(CB2_InitOptionMenu); // Display option menu
@@ -753,7 +753,7 @@ static bool8 StartMenuLinkModePlayerNameCallback(void)
{
if (!gPaletteFade.active)
{
- play_some_sound();
+ PlayRainSoundEffect();
overworld_free_bg_tilemaps();
TrainerCard_ShowLinkCard(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu);
@@ -782,7 +782,7 @@ static bool8 StartMenuBattlePyramidBagCallback(void)
{
if (!gPaletteFade.active)
{
- play_some_sound();
+ PlayRainSoundEffect();
RemoveExtraStartMenuWindows();
overworld_free_bg_tilemaps();
SetMainCallback2(CB2_PyramidBagMenuFromStartMenu);
diff --git a/src/tv.c b/src/tv.c
index 032bcde6a..0ae105580 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -2572,13 +2572,13 @@ void sub_80EEA70(void)
show->secretBaseSecrets.flags = VarGet(0x40ee) + (VarGet(0x40ef) << 16);
tv_store_id_3x(show);
show->secretBaseSecrets.language = gGameLanguage;
- if (show->secretBaseSecrets.language == LANGUAGE_JAPANESE || gSaveBlock1Ptr->secretBases[VarGet(VAR_0x4054)].language == LANGUAGE_JAPANESE)
+ if (show->secretBaseSecrets.language == LANGUAGE_JAPANESE || gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].language == LANGUAGE_JAPANESE)
{
show->secretBaseSecrets.baseOwnersNameLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->secretBaseSecrets.baseOwnersNameLanguage = gSaveBlock1Ptr->secretBases[VarGet(VAR_0x4054)].language;
+ show->secretBaseSecrets.baseOwnersNameLanguage = gSaveBlock1Ptr->secretBases[VarGet(VAR_CURRENT_SECRET_BASE)].language;
}
}
}
@@ -3229,9 +3229,9 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
species = (Random() % (NUM_SPECIES - 1)) + 1;
initSpecies = species;
- while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) != 1 || species == passedSpecies)
+ while (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN) != TRUE || species == passedSpecies)
{
- if (species == 1)
+ if (species == SPECIES_NONE + 1)
{
species = NUM_SPECIES - 1;
}
@@ -4376,7 +4376,7 @@ void SetTvShowInactive(u8 showIdx)
static void sub_80F0B24(u16 species, u8 showIdx)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0)
+ if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_SEEN))
{
gSaveBlock1Ptr->tvShows[showIdx].common.active = FALSE;
}
diff --git a/src/walda_phrase.c b/src/walda_phrase.c
index 10a899583..83004777f 100644
--- a/src/walda_phrase.c
+++ b/src/walda_phrase.c
@@ -8,7 +8,7 @@
#include "new_game.h"
#include "overworld.h"
#include "pokemon_storage_system.h"
-#include "field_screen.h"
+#include "field_screen_effect.h"
extern const u8 gText_Peekaboo[];
diff --git a/src/water.c b/src/water.c
index 955526ccd..42ab1d67f 100644
--- a/src/water.c
+++ b/src/water.c
@@ -1,21 +1,60 @@
#include "global.h"
+#include "battle.h"
#include "battle_anim.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "palette.h"
+#include "random.h"
+#include "scanline_effect.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/battle.h"
#include "constants/rgb.h"
extern void sub_810721C(struct Sprite *);
+extern void sub_8107228(struct Sprite *);
extern void sub_8107260(struct Sprite *);
+extern void sub_8107380(struct Sprite *);
+extern void sub_8107408(struct Sprite *);
+extern void sub_8107430(struct Sprite *);
extern void sub_810744C(struct Sprite *);
+extern void sub_81074E4(struct Sprite *);
extern void sub_81075EC(struct Sprite *);
+extern void sub_8107674(struct Sprite *);
extern void sub_8107730(struct Sprite *);
+extern void sub_81077A4(struct Sprite *);
extern void sub_81077C0(struct Sprite *);
extern void sub_80A78AC(struct Sprite *);
extern void sub_8107894(struct Sprite *);
extern void sub_81078D0(struct Sprite *);
+extern void sub_810790C(struct Sprite *);
extern void sub_8108034(struct Sprite *);
+extern void sub_8108098(struct Sprite *);
extern void sub_810851C(struct Sprite *);
+extern void sub_81087C0(struct Sprite *);
+extern void sub_810886C(struct Sprite *);
+extern void sub_8108B2C(struct Sprite *);
+extern void sub_8108B94(struct Sprite *);
extern void sub_8108BE0(struct Sprite *);
+extern void sub_8108C08(struct Sprite *);
extern void sub_8108C54(struct Sprite *);
+extern void sub_8108CDC(struct Sprite *);
extern void sub_80A8EE4(struct Sprite *);
+void sub_810756C(u8);
+void sub_81076F4(u8);
+void sub_8107B84(u8);
+void sub_8107CC4(u8);
+void sub_8107D58(u8);
+void sub_8108140(u8);
+void sub_810862C(u8);
+void sub_8108978(u8);
+u8 sub_8108384(void);
+void sub_8108408(struct Task*, u8);
+void sub_810871C(struct Task*, u8);
+void sub_8108AC0(struct Task*);
+void sub_8108D54(struct Sprite*, int, int);
extern const union AffineAnimCmd *const gUnknown_08593420[];
extern const union AffineAnimCmd *const gUnknown_08596208[];
@@ -440,3 +479,2149 @@ const struct SpriteTemplate gUnknown_08595328 =
.affineAnims = gUnknown_085952F4,
.callback = sub_80A8EE4,
};
+
+extern const struct SpriteTemplate gUnknown_08597388;
+
+void AnimTask_CreateRaindrops(u8 taskId)
+{
+ u8 x, y;
+
+ if (gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].data[1] = gBattleAnimArgs[0];
+ gTasks[taskId].data[2] = gBattleAnimArgs[1];
+ gTasks[taskId].data[3] = gBattleAnimArgs[2];
+ }
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0] % gTasks[taskId].data[2] == 1)
+ {
+ x = Random2() % 240;
+ y = Random2() % 80;
+ CreateSprite(&gUnknown_08595020, x, y, 4);
+ }
+ if (gTasks[taskId].data[0] == gTasks[taskId].data[3])
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_810721C(struct Sprite *sprite)
+{
+ sprite->callback = sub_8107228;
+}
+
+void sub_8107228(struct Sprite *sprite)
+{
+ if (++sprite->data[0] <= 13)
+ {
+ sprite->pos2.x++;
+ sprite->pos2.y += 4;
+ }
+ if (sprite->animEnded)
+ DestroySprite(sprite);
+}
+
+void sub_8107260(struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) - gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
+ sprite->animPaused = TRUE;
+ }
+ else
+ {
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2) + gBattleAnimArgs[0];
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3) + gBattleAnimArgs[1];
+ sprite->animPaused = TRUE;
+ }
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[6];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ spriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy);
+ sprite->data[5] = spriteId;
+ sprite->pos1.x -= Sin((u8)gBattleAnimArgs[4], gBattleAnimArgs[2]);
+ sprite->pos1.y -= Cos((u8)gBattleAnimArgs[4], gBattleAnimArgs[3]);
+ gSprites[spriteId].data[0] = gBattleAnimArgs[2];
+ gSprites[spriteId].data[1] = gBattleAnimArgs[3];
+ gSprites[spriteId].data[2] = gBattleAnimArgs[5];
+ gSprites[spriteId].data[3] = (u8)gBattleAnimArgs[4] * 256;
+ gSprites[spriteId].data[4] = gBattleAnimArgs[6];
+ sprite->callback = sub_8107380;
+ sprite->callback(sprite);
+}
+
+void sub_8107380(struct Sprite *sprite)
+{
+ u8 otherSpriteId = sprite->data[5];
+ u8 timer = gSprites[otherSpriteId].data[4];
+ u16 trigIndex = gSprites[otherSpriteId].data[3];
+
+ sprite->data[0] = 1;
+ AnimTranslateLinear(sprite);
+ sprite->pos2.x += Sin(trigIndex >> 8, gSprites[otherSpriteId].data[0]);
+ sprite->pos2.y += Cos(trigIndex >> 8, gSprites[otherSpriteId].data[1]);
+ gSprites[otherSpriteId].data[3] = trigIndex + gSprites[otherSpriteId].data[2];
+ if (--timer != 0)
+ {
+ gSprites[otherSpriteId].data[4] = timer;
+ }
+ else
+ {
+ sprite->callback = sub_8107408;
+ DestroySprite(&gSprites[otherSpriteId]);
+ }
+}
+
+void sub_8107408(struct Sprite *sprite)
+{
+ sprite->animPaused = FALSE;
+ sprite->callback = RunStoredCallbackWhenAnimEnds;
+ StoreSpriteCallbackInData6(sprite, sub_8107430);
+}
+
+void sub_8107430(struct Sprite *sprite)
+{
+ sprite->data[0] = 10;
+ sprite->callback = WaitAnimForDuration;
+ StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix);
+}
+
+void sub_810744C(struct Sprite *sprite)
+{
+ s16 unkArg;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ unkArg = -gBattleAnimArgs[2];
+ else
+ unkArg = gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + unkArg;
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3) + gBattleAnimArgs[3];
+ InitAnimLinearTranslation(sprite);
+ sprite->callback = sub_81074E4;
+ sprite->affineAnimPaused = TRUE;
+ sprite->callback(sprite);
+}
+
+void sub_81074E4(struct Sprite *sprite)
+{
+ if ((u16)gBattleAnimArgs[ARG_RET_ID] == 0xFFFF)
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->affineAnimPaused = FALSE;
+ }
+ if (AnimTranslateLinear(sprite))
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8107528(u8 taskId)
+{
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[2] = IndexOfSpritePaletteTag(ANIM_TAG_RAINBOW_RINGS) * 16 + 256;
+ gTasks[taskId].func = sub_810756C;
+}
+
+#ifdef NONMATCHING
+void sub_810756C(u8 taskId)
+{
+ int i;
+ u16 palIndex;
+ u16 *palPtr1;
+ u16 *palPtr2;
+ u16 rgbBuffer;
+
+ if (++gTasks[taskId].data[10] == 3)
+ {
+ gTasks[taskId].data[10] = 0;
+ palIndex = gTasks[taskId].data[2] + 1;
+ palPtr1 = &gPlttBufferFaded[palIndex];
+ rgbBuffer = *palPtr1;
+ palPtr2 = &palPtr1[1];
+ for (i = 0; i < 7; i++)
+ palPtr1[i] = palPtr2[i];
+ gPlttBufferFaded[palIndex + 7] = rgbBuffer;
+ }
+ if (++gTasks[taskId].data[11] == gTasks[taskId].data[0])
+ DestroyAnimVisualTask(taskId);
+}
+#else
+NAKED
+void sub_810756C(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ ldr r1, =gTasks\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ adds r2, r0, r1\n\
+ ldrh r0, [r2, 0x1C]\n\
+ adds r0, 0x1\n\
+ strh r0, [r2, 0x1C]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ mov r12, r1\n\
+ cmp r0, 0x3\n\
+ bne _081075BE\n\
+ movs r0, 0\n\
+ strh r0, [r2, 0x1C]\n\
+ ldrh r0, [r2, 0xC]\n\
+ adds r0, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ ldr r1, =gPlttBufferFaded\n\
+ lsls r0, r5, 1\n\
+ adds r0, r1\n\
+ ldrh r6, [r0]\n\
+ adds r7, r1, 0\n\
+ adds r3, r0, 0x2\n\
+ movs r1, 0x6\n\
+ adds r2, r0, 0\n\
+_081075A8:\n\
+ ldrh r0, [r3]\n\
+ strh r0, [r2]\n\
+ adds r3, 0x2\n\
+ adds r2, 0x2\n\
+ subs r1, 0x1\n\
+ cmp r1, 0\n\
+ bge _081075A8\n\
+ adds r0, r5, 0x7\n\
+ lsls r0, 1\n\
+ adds r0, r7\n\
+ strh r6, [r0]\n\
+_081075BE:\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ add r0, r12\n\
+ ldrh r1, [r0, 0x1E]\n\
+ adds r1, 0x1\n\
+ strh r1, [r0, 0x1E]\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ movs r2, 0x8\n\
+ ldrsh r0, [r0, r2]\n\
+ cmp r1, r0\n\
+ bne _081075DE\n\
+ adds r0, r4, 0\n\
+ bl DestroyAnimVisualTask\n\
+_081075DE:\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+void sub_81075EC(struct Sprite *sprite)
+{
+ u16 retArg;
+
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[0] = 30;
+ sprite->data[1] = sprite->pos1.x;
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[3] = sprite->pos1.y;
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ InitAnimLinearTranslation(sprite);
+ sprite->data[5] = 0xD200 / sprite->data[0];
+ sprite->data[7] = gBattleAnimArgs[3];
+ retArg = gBattleAnimArgs[ARG_RET_ID];
+ if (gBattleAnimArgs[ARG_RET_ID] > 127)
+ {
+ sprite->data[6] = (retArg - 127) * 256;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] = retArg * 256;
+ }
+ sprite->callback = sub_8107674;
+ sprite->callback(sprite);
+}
+
+void sub_8107674(struct Sprite *sprite)
+{
+ if (AnimTranslateLinear(sprite))
+ DestroyAnimSprite(sprite);
+ sprite->pos2.y += Sin(sprite->data[6] >> 8, sprite->data[7]);
+ if ((sprite->data[6] + sprite->data[5]) >> 8 > 127)
+ {
+ sprite->data[6] = 0;
+ sprite->data[7] = -sprite->data[7];
+ }
+ else
+ {
+ sprite->data[6] += sprite->data[5];
+ }
+}
+
+void sub_81076C8(u8 taskId)
+{
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gBattleAnimArgs[ARG_RET_ID] = 0;
+ gTasks[taskId].func = sub_81076F4;
+}
+
+void sub_81076F4(u8 taskId)
+{
+ gBattleAnimArgs[ARG_RET_ID] = (gBattleAnimArgs[ARG_RET_ID] + 3) & 0xFF;
+ if (--gTasks[taskId].data[0] == 0)
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8107730(struct Sprite *sprite)
+{
+ u8 priority;
+
+ sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0);
+ sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1);
+ sprite->pos2.y = -10;
+ priority = GetBattlerSpriteSubpriority(gBattleAnimAttacker);
+ if (!IsContest())
+ {
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ sprite->pos2.x = 10;
+ sprite->subpriority = priority + 2;
+ }
+ else
+ {
+ sprite->pos2.x = -10;
+ sprite->subpriority = priority - 2;
+ }
+ }
+ else
+ {
+ sprite->pos2.x = -10;
+ sprite->subpriority = priority + 2;
+ }
+ sprite->callback = sub_81077A4;
+}
+
+void sub_81077A4(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81077C0(struct Sprite *sprite)
+{
+ bool8 animType;
+ u8 coordType;
+ if (GetBattlerSide(gBattleAnimAttacker) == GetBattlerSide(gBattleAnimTarget))
+ {
+ gBattleAnimArgs[0] *= -1;
+ if (GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_PLAYER_LEFT || GetBattlerPosition(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT)
+ gBattleAnimArgs[0] *= -1;
+ }
+ if ((gBattleAnimArgs[5] & 0xFF00) == 0)
+ animType = TRUE;
+ else
+ animType = FALSE;
+ if ((u8)gBattleAnimArgs[5] == 0)
+ coordType = 3;
+ else
+ coordType = 1;
+ InitSpritePosToAnimAttacker(sprite, animType);
+ if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER)
+ gBattleAnimArgs[2] = -gBattleAnimArgs[2];
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2) + gBattleAnimArgs[2];
+ sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_8107894(struct Sprite *sprite)
+{
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ sprite->data[0] = gBattleAnimArgs[4];
+ sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2];
+ sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[4];
+ sprite->callback = StartAnimLinearTranslation;
+ StoreSpriteCallbackInData6(sprite, DestroyAnimSprite);
+}
+
+void sub_81078D0(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3])
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ else
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[7] = gBattleAnimArgs[2];
+ sprite->callback = sub_810790C;
+}
+
+void sub_810790C(struct Sprite *sprite)
+{
+ sprite->data[0] = (sprite->data[0] + 11) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[0], 4);
+ sprite->data[1] += 48;
+ sprite->pos2.y = -(sprite->data[1] >> 8);
+ if (--sprite->data[7] == -1)
+ DestroyAnimSprite(sprite);
+}
+
+#ifdef NONMATCHING
+void AnimTask_CreateSurfWave(u8 taskId)
+{
+ struct UnknownAnimStruct2 unk;
+ u8 taskId2;
+
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16));
+ SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
+ SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
+ sub_80A6B30(&unk);
+ if (!IsContest())
+ {
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1);
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ sub_80A6D48(unk.bgId, gUnknown_08D95E00);
+ else
+ sub_80A6D48(unk.bgId, gUnknown_08D960D0);
+ }
+ else
+ {
+ sub_80A6D60(&unk, gUnknown_08D963A4, 1);
+ }
+ sub_80A6CC0(unk.bgId, gBattleAnimBackgroundImage_Surf, unk.tilesOffset);
+ if (gBattleAnimArgs[0] == 0)
+ LoadCompressedPalette(gBattleAnimBackgroundPalette_Surf, unk.unk8 * 16, 32);
+ else
+ LoadCompressedPalette(gBattleAnimBackgroundImageMuddyWater_Pal, unk.unk8 * 16, 32);
+ taskId2 = CreateTask(sub_8107D58, gTasks[taskId].priority + 1);
+ gTasks[taskId].data[15] = taskId2;
+ gTasks[taskId2].data[0] = 0;
+ gTasks[taskId2].data[1] = 0x1000;
+ gTasks[taskId2].data[2] = 0x1000;
+ if (IsContest())
+ {
+ gBattle_BG1_X = -80;
+ gBattle_BG1_Y = -48;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ else if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ {
+ gBattle_BG1_X = -224;
+ gBattle_BG1_Y = 256;
+ gTasks[taskId].data[0] = 2;
+ gTasks[taskId].data[1] = -1;
+ gTasks[taskId2].data[3] = 1;
+ }
+ else
+ {
+ gBattle_BG1_X = 0;
+ gBattle_BG1_Y = -48;
+ gTasks[taskId].data[0] = -2;
+ gTasks[taskId].data[1] = 1;
+ gTasks[taskId2].data[3] = 0;
+ }
+ SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
+ if (gTasks[taskId2].data[3] == 0)
+ {
+ gTasks[taskId2].data[4] = 48;
+ gTasks[taskId2].data[5] = 112;
+ }
+ else
+ {
+ gTasks[taskId2].data[4] = 0;
+ gTasks[taskId2].data[5] = 0;
+ }
+ gTasks[taskId].data[6] = 1;
+ gTasks[taskId].func = sub_8107B84;
+}
+#else
+NAKED
+void AnimTask_CreateSurfWave(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x10\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r1, =0x00003f42\n\
+ movs r0, 0x50\n\
+ bl SetGpuReg\n\
+ movs r1, 0x80\n\
+ lsls r1, 5\n\
+ movs r0, 0x52\n\
+ bl SetGpuReg\n\
+ movs r0, 0x1\n\
+ movs r1, 0x4\n\
+ movs r2, 0x1\n\
+ bl SetAnimBgAttribute\n\
+ movs r0, 0x1\n\
+ movs r1, 0\n\
+ movs r2, 0x1\n\
+ bl SetAnimBgAttribute\n\
+ mov r0, sp\n\
+ bl sub_80A6B30\n\
+ bl IsContest\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _081079E0\n\
+ movs r0, 0x1\n\
+ movs r1, 0x3\n\
+ movs r2, 0x1\n\
+ bl SetAnimBgAttribute\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _081079D0\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x9]\n\
+ ldr r1, =gUnknown_08D95E00\n\
+ bl sub_80A6D48\n\
+ b _081079EA\n\
+ .pool\n\
+_081079D0:\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x9]\n\
+ ldr r1, =gUnknown_08D960D0\n\
+ bl sub_80A6D48\n\
+ b _081079EA\n\
+ .pool\n\
+_081079E0:\n\
+ ldr r1, =gUnknown_08D963A4\n\
+ mov r0, sp\n\
+ movs r2, 0x1\n\
+ bl sub_80A6D60\n\
+_081079EA:\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x9]\n\
+ ldr r1, =gBattleAnimBackgroundImage_Surf\n\
+ mov r2, sp\n\
+ ldrh r2, [r2, 0xA]\n\
+ bl sub_80A6CC0\n\
+ ldr r0, =gBattleAnimArgs\n\
+ movs r1, 0\n\
+ ldrsh r0, [r0, r1]\n\
+ cmp r0, 0\n\
+ bne _08107A24\n\
+ ldr r0, =gBattleAnimBackgroundPalette_Surf\n\
+ mov r1, sp\n\
+ ldrb r1, [r1, 0x8]\n\
+ lsls r1, 4\n\
+ movs r2, 0x20\n\
+ bl LoadCompressedPalette\n\
+ b _08107A32\n\
+ .pool\n\
+_08107A24:\n\
+ ldr r0, =gBattleAnimBackgroundImageMuddyWater_Pal\n\
+ mov r1, sp\n\
+ ldrb r1, [r1, 0x8]\n\
+ lsls r1, 4\n\
+ movs r2, 0x20\n\
+ bl LoadCompressedPalette\n\
+_08107A32:\n\
+ ldr r0, =sub_8107D58\n\
+ ldr r4, =gTasks\n\
+ mov r2, r10\n\
+ lsls r5, r2, 2\n\
+ adds r1, r5, r2\n\
+ lsls r1, 3\n\
+ adds r6, r1, r4\n\
+ ldrb r1, [r6, 0x7]\n\
+ adds r1, 0x1\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ bl CreateTask\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ movs r0, 0\n\
+ mov r9, r0\n\
+ mov r1, r8\n\
+ strh r1, [r6, 0x26]\n\
+ mov r2, r8\n\
+ lsls r0, r2, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r7, r0, r4\n\
+ mov r0, r9\n\
+ strh r0, [r7, 0x8]\n\
+ movs r0, 0x80\n\
+ lsls r0, 5\n\
+ strh r0, [r7, 0xA]\n\
+ strh r0, [r7, 0xC]\n\
+ bl IsContest\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0\n\
+ beq _08107AB4\n\
+ ldr r1, =0x0000ffb0\n\
+ adds r0, r1, 0\n\
+ ldr r2, =gBattle_BG1_X\n\
+ strh r0, [r2]\n\
+ adds r1, 0x20\n\
+ adds r0, r1, 0\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ strh r0, [r2]\n\
+ movs r0, 0x2\n\
+ strh r0, [r6, 0x8]\n\
+ movs r0, 0x1\n\
+ strh r0, [r6, 0xA]\n\
+ mov r0, r9\n\
+ strh r0, [r7, 0xE]\n\
+ b _08107B0E\n\
+ .pool\n\
+_08107AB4:\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSide\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ cmp r1, 0x1\n\
+ bne _08107AF8\n\
+ ldr r2, =0x0000ff20\n\
+ adds r0, r2, 0\n\
+ ldr r2, =gBattle_BG1_X\n\
+ strh r0, [r2]\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ adds r0, r2, 0\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ strh r0, [r2]\n\
+ movs r0, 0x2\n\
+ strh r0, [r6, 0x8]\n\
+ ldr r0, =0x0000ffff\n\
+ strh r0, [r6, 0xA]\n\
+ strh r1, [r7, 0xE]\n\
+ b _08107B0E\n\
+ .pool\n\
+_08107AF8:\n\
+ ldr r0, =gBattle_BG1_X\n\
+ strh r4, [r0]\n\
+ ldr r1, =0x0000ffd0\n\
+ adds r0, r1, 0\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ strh r0, [r2]\n\
+ ldr r0, =0x0000fffe\n\
+ strh r0, [r6, 0x8]\n\
+ movs r0, 0x1\n\
+ strh r0, [r6, 0xA]\n\
+ strh r4, [r7, 0xE]\n\
+_08107B0E:\n\
+ ldr r0, =gBattle_BG1_X\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x14\n\
+ bl SetGpuReg\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x16\n\
+ bl SetGpuReg\n\
+ ldr r1, =gTasks\n\
+ mov r2, r8\n\
+ lsls r0, r2, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r1, r0, r1\n\
+ movs r2, 0xE\n\
+ ldrsh r0, [r1, r2]\n\
+ cmp r0, 0\n\
+ bne _08107B54\n\
+ movs r0, 0x30\n\
+ strh r0, [r1, 0x10]\n\
+ movs r0, 0x70\n\
+ b _08107B58\n\
+ .pool\n\
+_08107B54:\n\
+ movs r0, 0\n\
+ strh r0, [r1, 0x10]\n\
+_08107B58:\n\
+ strh r0, [r1, 0x12]\n\
+ ldr r1, =gTasks\n\
+ mov r2, r10\n\
+ adds r0, r5, r2\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ movs r1, 0x1\n\
+ strh r1, [r0, 0x14]\n\
+ ldr r1, =sub_8107B84\n\
+ str r1, [r0]\n\
+ add sp, 0x10\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+#ifdef NONMATCHING
+void sub_8107B84(u8 taskId)
+{
+ struct UnknownAnimStruct2 unk;
+ u8 i;
+ u16 rgbBuffer;
+ u16 *BGptrX = &gBattle_BG1_X;
+ u16 *BGptrY = &gBattle_BG1_Y;
+ s16 unkUse;
+ u32 palOffset;
+ u16 palNum;
+
+ *BGptrX += gTasks[taskId].data[0];
+ *BGptrY += gTasks[taskId].data[1];
+ sub_80A6B30(&unk);
+ gTasks[taskId].data[2] += gTasks[taskId].data[1];
+ if (++gTasks[taskId].data[5] == 4)
+ {
+ rgbBuffer = gPlttBufferFaded[unk.unk8 * 16 + 7];
+ for (i = 6; i != 0; i--)
+ {
+ palNum = unk.unk8 * 16;
+ palOffset = 1 + i;
+ gPlttBufferFaded[palNum + palOffset] = gPlttBufferFaded[palNum + palOffset - 1];
+ }
+ gPlttBufferFaded[unk.unk8 * 16 + 1] = rgbBuffer;
+ gTasks[taskId].data[5] = 0;
+ }
+ if (++gTasks[taskId].data[6] > 1)
+ {
+ gTasks[taskId].data[6] = 0;
+ unkUse = ++gTasks[taskId].data[3];
+ if (unkUse <= 13)
+ {
+ gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
+ gTasks[taskId].data[4]++;
+ }
+ if (gTasks[taskId].data[3] > 54)
+ {
+ unkUse = --gTasks[taskId].data[4];
+ gTasks[gTasks[taskId].data[15]].data[1] = unkUse | ((16 - unkUse) * 256);
+ }
+ }
+ if (!(gTasks[gTasks[taskId].data[15]].data[1] & 0x1F))
+ {
+ gTasks[taskId].data[0] = gTasks[gTasks[taskId].data[15]].data[1] & 0x1F;
+ gTasks[taskId].func = sub_8107CC4;
+ }
+}
+#else
+NAKED
+void sub_8107B84(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ sub sp, 0x10\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r1, =gBattle_BG1_X\n\
+ ldr r2, =gBattle_BG1_Y\n\
+ ldr r0, =gTasks\n\
+ lsls r4, r5, 2\n\
+ adds r4, r5\n\
+ lsls r4, 3\n\
+ adds r4, r0\n\
+ ldrh r0, [r4, 0x8]\n\
+ ldrh r3, [r1]\n\
+ adds r0, r3\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r4, 0xA]\n\
+ ldrh r1, [r2]\n\
+ adds r0, r1\n\
+ strh r0, [r2]\n\
+ mov r0, sp\n\
+ bl sub_80A6B30\n\
+ ldrh r0, [r4, 0xA]\n\
+ ldrh r3, [r4, 0xC]\n\
+ adds r0, r3\n\
+ strh r0, [r4, 0xC]\n\
+ ldrh r0, [r4, 0x12]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x12]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x4\n\
+ bne _08107C18\n\
+ ldr r1, =gPlttBufferFaded\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 4\n\
+ adds r0, 0x7\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r6, [r0]\n\
+ movs r2, 0x6\n\
+ adds r7, r1, 0\n\
+ adds r3, r7, 0\n\
+ mov r4, sp\n\
+_08107BDE:\n\
+ ldrb r0, [r4, 0x8]\n\
+ lsls r0, 4\n\
+ adds r1, r2, 0x1\n\
+ adds r0, r1\n\
+ lsls r1, r0, 1\n\
+ adds r1, r3\n\
+ subs r0, 0x1\n\
+ lsls r0, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ strh r0, [r1]\n\
+ subs r0, r2, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r2, 0\n\
+ bne _08107BDE\n\
+ mov r0, sp\n\
+ ldrb r0, [r0, 0x8]\n\
+ lsls r0, 4\n\
+ adds r0, 0x1\n\
+ lsls r0, 1\n\
+ adds r0, r7\n\
+ strh r6, [r0]\n\
+ ldr r1, =gTasks\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ strh r2, [r0, 0x12]\n\
+_08107C18:\n\
+ ldr r1, =gTasks\n\
+ lsls r2, r5, 2\n\
+ adds r0, r2, r5\n\
+ lsls r0, 3\n\
+ adds r3, r0, r1\n\
+ ldrh r0, [r3, 0x14]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x14]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ adds r4, r1, 0\n\
+ adds r6, r2, 0\n\
+ cmp r0, 0x1\n\
+ ble _08107C86\n\
+ movs r0, 0\n\
+ strh r0, [r3, 0x14]\n\
+ ldrh r0, [r3, 0xE]\n\
+ adds r2, r0, 0x1\n\
+ strh r2, [r3, 0xE]\n\
+ lsls r0, r2, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0xD\n\
+ bgt _08107C62\n\
+ movs r1, 0x26\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r4\n\
+ movs r0, 0x10\n\
+ subs r0, r2\n\
+ lsls r0, 8\n\
+ orrs r2, r0\n\
+ strh r2, [r1, 0xA]\n\
+ ldrh r0, [r3, 0x10]\n\
+ adds r0, 0x1\n\
+ strh r0, [r3, 0x10]\n\
+_08107C62:\n\
+ movs r1, 0xE\n\
+ ldrsh r0, [r3, r1]\n\
+ cmp r0, 0x36\n\
+ ble _08107C86\n\
+ ldrh r2, [r3, 0x10]\n\
+ subs r2, 0x1\n\
+ strh r2, [r3, 0x10]\n\
+ movs r1, 0x26\n\
+ ldrsh r0, [r3, r1]\n\
+ lsls r1, r0, 2\n\
+ adds r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r4\n\
+ movs r0, 0x10\n\
+ subs r0, r2\n\
+ lsls r0, 8\n\
+ orrs r2, r0\n\
+ strh r2, [r1, 0xA]\n\
+_08107C86:\n\
+ adds r0, r6, r5\n\
+ lsls r0, 3\n\
+ adds r2, r0, r4\n\
+ movs r3, 0x26\n\
+ ldrsh r1, [r2, r3]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r0, 3\n\
+ adds r0, r4\n\
+ ldrh r0, [r0, 0xA]\n\
+ movs r3, 0x1F\n\
+ ands r3, r0\n\
+ cmp r3, 0\n\
+ bne _08107CA8\n\
+ strh r3, [r2, 0x8]\n\
+ ldr r0, =sub_8107CC4\n\
+ str r0, [r2]\n\
+_08107CA8:\n\
+ add sp, 0x10\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+void sub_8107CC4(u8 taskId)
+{
+ u16 *BGptrX = &gBattle_BG1_X;
+ u16 *BGptrY = &gBattle_BG1_Y;
+ if (gTasks[taskId].data[0] == 0)
+ {
+ sub_80A6C68(1);
+ sub_80A6C68(2);
+ gTasks[taskId].data[0]++;
+ }
+ else
+ {
+ if (!IsContest())
+ SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
+ *BGptrX = 0;
+ *BGptrY = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0));
+ gTasks[gTasks[taskId].data[15]].data[15] = -1;
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+#ifdef NONMATCHING
+void sub_8107D58(u8 taskId)
+{
+ s16 i;
+ struct ScanlineEffectParams params;
+ struct Task *task = &gTasks[taskId];
+ // u16 *scanlineBuffer;
+
+ switch (task->data[0])
+ {
+ case 0:
+ for (i = 0; i < task->data[4]; i++)
+ {
+ /* scanlineBuffer = &gScanlineEffectRegBuffers[0][i];
+ *(u16 *)(&gScanlineEffect) = task->data[2];
+ *scanlineBuffer = task->data[2] & -1; */
+ gScanlineEffectRegBuffers[1][i] = task->data[2];
+ gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ }
+ for (i = task->data[4]; i < task->data[5]; i++)
+ {
+ gScanlineEffectRegBuffers[1][i] = task->data[1];
+ gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[1] & 0xFFFF));
+ }
+ for (i = task->data[5]; i < 160; i++)
+ {
+ gScanlineEffectRegBuffers[1][i] = task->data[2];
+ gScanlineEffectRegBuffers[0][i] = (u16)((int)(task->data[2] & 0xFFFF));
+ }
+ if (task->data[4] == 0)
+ {
+ gScanlineEffectRegBuffers[1][i] = task->data[1];
+ gScanlineEffectRegBuffers[0][i] = task->data[1];
+ }
+ else
+ {
+ gScanlineEffectRegBuffers[1][i] = task->data[2];
+ gScanlineEffectRegBuffers[0][i] = task->data[2];
+ }
+ params.dmaDest = (vu16 *)REG_ADDR_BLDALPHA;
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.initState = 1;
+ params.unused9 = 0;
+ ScanlineEffect_SetParams(params);
+ task->data[0]++;
+ break;
+ case 1:
+ if (task->data[3] == 0)
+ {
+ if (--task->data[4] <= 0)
+ {
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ }
+ else if (++task->data[5] > 111)
+ {
+ task->data[0]++;
+ }
+ for (i = 0; i < task->data[4]; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+ }
+ for (i = task->data[4]; i < task->data[5]; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
+ }
+ for (i = task->data[5]; i < 160; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+ }
+ break;
+ case 2:
+ for (i = 0; i < task->data[4]; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+ }
+ for (i = task->data[4]; i < task->data[5]; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[1];
+ }
+ for (i = task->data[5]; i < 160; i++)
+ {
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[2];
+ }
+ if (task->data[15] == -1)
+ {
+ ScanlineEffect_Stop();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+#else
+NAKED
+void sub_8107D58(u8 taskId)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ sub sp, 0xC\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ lsls r0, r7, 2\n\
+ adds r0, r7\n\
+ lsls r0, 3\n\
+ ldr r1, =gTasks\n\
+ adds r4, r0, r1\n\
+ movs r1, 0x8\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0x1\n\
+ bne _08107D74\n\
+ b _08107EAC\n\
+_08107D74:\n\
+ cmp r0, 0x1\n\
+ bgt _08107D84\n\
+ cmp r0, 0\n\
+ beq _08107D8C\n\
+ b _08108022\n\
+ .pool\n\
+_08107D84:\n\
+ cmp r0, 0x2\n\
+ bne _08107D8A\n\
+ b _08107F78\n\
+_08107D8A:\n\
+ b _08108022\n\
+_08107D8C:\n\
+ movs r3, 0\n\
+ movs r2, 0x10\n\
+ ldrsh r0, [r4, r2]\n\
+ ldr r1, =gScanlineEffectRegBuffers\n\
+ mov r12, r1\n\
+ cmp r3, r0\n\
+ bge _08107DCA\n\
+ mov r7, r12\n\
+ movs r5, 0xF0\n\
+ lsls r5, 3\n\
+ add r5, r12\n\
+ ldr r6, =0x0000ffff\n\
+_08107DA4:\n\
+ lsls r2, r3, 16\n\
+ asrs r2, 16\n\
+ lsls r1, r2, 1\n\
+ adds r3, r1, r7\n\
+ adds r1, r5\n\
+ ldrh r0, [r4, 0xC]\n\
+ strh r0, [r1]\n\
+ ldrh r1, [r4, 0xC]\n\
+ adds r0, r6, 0\n\
+ ands r0, r1\n\
+ strh r0, [r3]\n\
+ adds r2, 0x1\n\
+ lsls r2, 16\n\
+ lsrs r3, r2, 16\n\
+ asrs r2, 16\n\
+ movs r1, 0x10\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r2, r0\n\
+ blt _08107DA4\n\
+_08107DCA:\n\
+ ldrh r3, [r4, 0x10]\n\
+ lsls r2, r3, 16\n\
+ asrs r1, r2, 16\n\
+ movs r3, 0x12\n\
+ ldrsh r0, [r4, r3]\n\
+ cmp r1, r0\n\
+ bge _08107E04\n\
+ ldr r5, =gScanlineEffectRegBuffers\n\
+ movs r0, 0xF0\n\
+ lsls r0, 3\n\
+ adds r6, r5, r0\n\
+ ldr r7, =0x0000ffff\n\
+_08107DE2:\n\
+ asrs r2, 16\n\
+ lsls r1, r2, 1\n\
+ adds r3, r1, r5\n\
+ adds r1, r6\n\
+ ldrh r0, [r4, 0xA]\n\
+ strh r0, [r1]\n\
+ ldrh r1, [r4, 0xA]\n\
+ adds r0, r7, 0\n\
+ ands r0, r1\n\
+ strh r0, [r3]\n\
+ adds r2, 0x1\n\
+ lsls r2, 16\n\
+ asrs r1, r2, 16\n\
+ movs r3, 0x12\n\
+ ldrsh r0, [r4, r3]\n\
+ cmp r1, r0\n\
+ blt _08107DE2\n\
+_08107E04:\n\
+ ldrh r3, [r4, 0x12]\n\
+ lsls r2, r3, 16\n\
+ asrs r0, r2, 16\n\
+ cmp r0, 0x9F\n\
+ bgt _08107E3A\n\
+ ldr r5, =gScanlineEffectRegBuffers\n\
+ movs r0, 0xF0\n\
+ lsls r0, 3\n\
+ adds r6, r5, r0\n\
+ ldr r7, =0x0000ffff\n\
+_08107E18:\n\
+ asrs r2, 16\n\
+ lsls r1, r2, 1\n\
+ adds r3, r1, r5\n\
+ adds r1, r6\n\
+ ldrh r0, [r4, 0xC]\n\
+ strh r0, [r1]\n\
+ ldrh r1, [r4, 0xC]\n\
+ adds r0, r7, 0\n\
+ ands r0, r1\n\
+ strh r0, [r3]\n\
+ adds r2, 0x1\n\
+ lsls r2, 16\n\
+ lsrs r3, r2, 16\n\
+ lsls r2, r3, 16\n\
+ asrs r0, r2, 16\n\
+ cmp r0, 0x9F\n\
+ ble _08107E18\n\
+_08107E3A:\n\
+ movs r1, 0x10\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r0, 0\n\
+ bne _08107E64\n\
+ lsls r0, r3, 16\n\
+ asrs r0, 15\n\
+ mov r3, r12\n\
+ adds r2, r0, r3\n\
+ movs r1, 0xF0\n\
+ lsls r1, 3\n\
+ add r1, r12\n\
+ adds r0, r1\n\
+ ldrh r1, [r4, 0xA]\n\
+ strh r1, [r0]\n\
+ ldrh r0, [r4, 0xA]\n\
+ b _08107E7A\n\
+ .pool\n\
+_08107E64:\n\
+ lsls r0, r3, 16\n\
+ asrs r0, 15\n\
+ mov r1, r12\n\
+ adds r2, r0, r1\n\
+ movs r1, 0xF0\n\
+ lsls r1, 3\n\
+ add r1, r12\n\
+ adds r0, r1\n\
+ ldrh r1, [r4, 0xC]\n\
+ strh r1, [r0]\n\
+ ldrh r0, [r4, 0xC]\n\
+_08107E7A:\n\
+ strh r0, [r2]\n\
+ ldr r0, =0x04000052\n\
+ str r0, [sp]\n\
+ ldr r0, =0xa2600001\n\
+ str r0, [sp, 0x4]\n\
+ mov r1, sp\n\
+ movs r2, 0\n\
+ movs r0, 0x1\n\
+ strb r0, [r1, 0x8]\n\
+ mov r0, sp\n\
+ strb r2, [r0, 0x9]\n\
+ ldr r0, [sp]\n\
+ ldr r1, [sp, 0x4]\n\
+ ldr r2, [sp, 0x8]\n\
+ bl ScanlineEffect_SetParams\n\
+ ldrh r0, [r4, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x8]\n\
+ b _08108022\n\
+ .pool\n\
+_08107EAC:\n\
+ movs r2, 0xE\n\
+ ldrsh r1, [r4, r2]\n\
+ cmp r1, 0\n\
+ bne _08107EC4\n\
+ ldrh r0, [r4, 0x10]\n\
+ subs r0, 0x1\n\
+ strh r0, [r4, 0x10]\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ bgt _08107ED8\n\
+ strh r1, [r4, 0x10]\n\
+ b _08107ED2\n\
+_08107EC4:\n\
+ ldrh r0, [r4, 0x12]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x12]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ cmp r0, 0x6F\n\
+ ble _08107ED8\n\
+_08107ED2:\n\
+ ldrh r0, [r4, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r4, 0x8]\n\
+_08107ED8:\n\
+ movs r3, 0\n\
+ movs r1, 0x10\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r3, r0\n\
+ bge _08107F0C\n\
+ ldr r6, =gScanlineEffectRegBuffers\n\
+ ldr r5, =gScanlineEffect\n\
+_08107EE6:\n\
+ lsls r1, r3, 16\n\
+ asrs r1, 16\n\
+ lsls r3, r1, 1\n\
+ ldrb r2, [r5, 0x14]\n\
+ lsls r0, r2, 4\n\
+ subs r0, r2\n\
+ lsls r0, 7\n\
+ adds r3, r0\n\
+ adds r3, r6\n\
+ ldrh r0, [r4, 0xC]\n\
+ strh r0, [r3]\n\
+ adds r1, 0x1\n\
+ lsls r1, 16\n\
+ lsrs r3, r1, 16\n\
+ asrs r1, 16\n\
+ movs r2, 0x10\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r1, r0\n\
+ blt _08107EE6\n\
+_08107F0C:\n\
+ ldrh r3, [r4, 0x10]\n\
+ lsls r2, r3, 16\n\
+ asrs r1, r2, 16\n\
+ movs r3, 0x12\n\
+ ldrsh r0, [r4, r3]\n\
+ cmp r1, r0\n\
+ bge _08107F40\n\
+ ldr r6, =gScanlineEffectRegBuffers\n\
+ ldr r5, =gScanlineEffect\n\
+_08107F1E:\n\
+ asrs r3, r2, 16\n\
+ lsls r2, r3, 1\n\
+ ldrb r1, [r5, 0x14]\n\
+ lsls r0, r1, 4\n\
+ subs r0, r1\n\
+ lsls r0, 7\n\
+ adds r2, r0\n\
+ adds r2, r6\n\
+ ldrh r0, [r4, 0xA]\n\
+ strh r0, [r2]\n\
+ adds r3, 0x1\n\
+ lsls r2, r3, 16\n\
+ asrs r1, r2, 16\n\
+ movs r3, 0x12\n\
+ ldrsh r0, [r4, r3]\n\
+ cmp r1, r0\n\
+ blt _08107F1E\n\
+_08107F40:\n\
+ ldrh r3, [r4, 0x12]\n\
+ lsls r1, r3, 16\n\
+ asrs r0, r1, 16\n\
+ cmp r0, 0x9F\n\
+ bgt _08108022\n\
+ ldr r6, =gScanlineEffectRegBuffers\n\
+ ldr r5, =gScanlineEffect\n\
+_08107F4E:\n\
+ asrs r3, r1, 16\n\
+ lsls r2, r3, 1\n\
+ ldrb r1, [r5, 0x14]\n\
+ lsls r0, r1, 4\n\
+ subs r0, r1\n\
+ lsls r0, 7\n\
+ adds r2, r0\n\
+ adds r2, r6\n\
+ ldrh r0, [r4, 0xC]\n\
+ strh r0, [r2]\n\
+ adds r3, 0x1\n\
+ lsls r1, r3, 16\n\
+ asrs r0, r1, 16\n\
+ cmp r0, 0x9F\n\
+ ble _08107F4E\n\
+ b _08108022\n\
+ .pool\n\
+_08107F78:\n\
+ movs r3, 0\n\
+ movs r1, 0x10\n\
+ ldrsh r0, [r4, r1]\n\
+ cmp r3, r0\n\
+ bge _08107FAC\n\
+ ldr r6, =gScanlineEffectRegBuffers\n\
+ ldr r5, =gScanlineEffect\n\
+_08107F86:\n\
+ lsls r1, r3, 16\n\
+ asrs r1, 16\n\
+ lsls r3, r1, 1\n\
+ ldrb r2, [r5, 0x14]\n\
+ lsls r0, r2, 4\n\
+ subs r0, r2\n\
+ lsls r0, 7\n\
+ adds r3, r0\n\
+ adds r3, r6\n\
+ ldrh r0, [r4, 0xC]\n\
+ strh r0, [r3]\n\
+ adds r1, 0x1\n\
+ lsls r1, 16\n\
+ lsrs r3, r1, 16\n\
+ asrs r1, 16\n\
+ movs r2, 0x10\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r1, r0\n\
+ blt _08107F86\n\
+_08107FAC:\n\
+ ldrh r3, [r4, 0x10]\n\
+ lsls r2, r3, 16\n\
+ asrs r1, r2, 16\n\
+ movs r3, 0x12\n\
+ ldrsh r0, [r4, r3]\n\
+ cmp r1, r0\n\
+ bge _08107FE0\n\
+ ldr r6, =gScanlineEffectRegBuffers\n\
+ ldr r5, =gScanlineEffect\n\
+_08107FBE:\n\
+ asrs r3, r2, 16\n\
+ lsls r2, r3, 1\n\
+ ldrb r1, [r5, 0x14]\n\
+ lsls r0, r1, 4\n\
+ subs r0, r1\n\
+ lsls r0, 7\n\
+ adds r2, r0\n\
+ adds r2, r6\n\
+ ldrh r0, [r4, 0xA]\n\
+ strh r0, [r2]\n\
+ adds r3, 0x1\n\
+ lsls r2, r3, 16\n\
+ asrs r1, r2, 16\n\
+ movs r3, 0x12\n\
+ ldrsh r0, [r4, r3]\n\
+ cmp r1, r0\n\
+ blt _08107FBE\n\
+_08107FE0:\n\
+ ldrh r3, [r4, 0x12]\n\
+ lsls r1, r3, 16\n\
+ asrs r0, r1, 16\n\
+ cmp r0, 0x9F\n\
+ bgt _0810800C\n\
+ ldr r6, =gScanlineEffectRegBuffers\n\
+ ldr r5, =gScanlineEffect\n\
+_08107FEE:\n\
+ asrs r3, r1, 16\n\
+ lsls r2, r3, 1\n\
+ ldrb r1, [r5, 0x14]\n\
+ lsls r0, r1, 4\n\
+ subs r0, r1\n\
+ lsls r0, 7\n\
+ adds r2, r0\n\
+ adds r2, r6\n\
+ ldrh r0, [r4, 0xC]\n\
+ strh r0, [r2]\n\
+ adds r3, 0x1\n\
+ lsls r1, r3, 16\n\
+ asrs r0, r1, 16\n\
+ cmp r0, 0x9F\n\
+ ble _08107FEE\n\
+_0810800C:\n\
+ movs r0, 0x26\n\
+ ldrsh r1, [r4, r0]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ cmp r1, r0\n\
+ bne _08108022\n\
+ bl ScanlineEffect_Stop\n\
+ adds r0, r7, 0\n\
+ bl DestroyTask\n\
+_08108022:\n\
+ add sp, 0xC\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n");
+}
+#endif
+
+void sub_8108034(struct Sprite *sprite)
+{
+ s16 randData;
+ s16 randData2;
+
+ sprite->oam.tileNum += 8;
+ InitSpritePosToAnimTarget(sprite, TRUE);
+ randData = (Random2() & 0xFF) | 256;
+ randData2 = (Random2() & 0x1FF);
+ if (randData2 > 255)
+ randData2 = 256 - randData2;
+ sprite->data[1] = randData;
+ sprite->data[2] = randData2;
+ sprite->callback = sub_8108098;
+}
+
+void sub_8108098(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ if (sprite->data[1] & 1)
+ sprite->pos2.x = -(sprite->data[3] >> 8);
+ else
+ sprite->pos2.x = sprite->data[3] >> 8;
+ sprite->pos2.y = sprite->data[4] >> 8;
+ if (++sprite->data[0] == 21)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_81080E4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[15] = GetAnimBattlerSpriteId(ANIM_ATTACKER);
+ task->data[5] = gSprites[task->data[15]].pos1.y;
+ task->data[1] = sub_8108384();
+ PrepareBattlerSpriteForRotScale(task->data[15], ST_OAM_OBJ_NORMAL);
+ task->func = sub_8108140;
+}
+
+void sub_8108140(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_80A805C(task, task->data[15], 0x100, 0x100, 224, 0x200, 32);
+ task->data[0]++;
+ case 1:
+ if (++task->data[3] > 1)
+ {
+ task->data[3] = 0;
+ if (++task->data[4] & 1)
+ {
+ gSprites[task->data[15]].pos2.x = 3;
+ gSprites[task->data[15]].pos1.y++;
+ }
+ else
+ {
+ gSprites[task->data[15]].pos2.x = -3;
+ }
+ }
+ if (sub_80A80C8(task) == 0)
+ {
+ SetBattlerSpriteYOffsetFromYScale(task->data[15]);
+ gSprites[task->data[15]].pos2.x = 0;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ if (++task->data[3] > 4)
+ {
+ sub_80A805C(task, task->data[15], 224, 0x200, 384, 224, 8);
+ task->data[3] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 3:
+ if (sub_80A80C8(task) == 0)
+ {
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 4:
+ sub_8108408(task, taskId);
+ task->data[0]++;
+ case 5:
+ if (++task->data[3] > 1)
+ {
+ task->data[3] = 0;
+ if (++task->data[4] & 1)
+ gSprites[task->data[15]].pos2.y += 2;
+ else
+ gSprites[task->data[15]].pos2.y -= 2;
+ if (task->data[4] == 10)
+ {
+ sub_80A805C(task, task->data[15], 384, 224, 0x100, 0x100, 8);
+ task->data[3] = 0;
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ }
+ break;
+ case 6:
+ gSprites[task->data[15]].pos1.y--;
+ if (sub_80A80C8(task) == 0)
+ {
+ ResetSpriteRotScale(task->data[15]);
+ gSprites[task->data[15]].pos1.y = task->data[5];
+ task->data[4] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 7:
+ if (task->data[2] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+u8 sub_8108384(void)
+{
+ u8 i;
+ u16 hp;
+ u16 maxhp;
+ u16 partyIndex;
+ struct Pokemon *slot;
+
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker];
+ slot = &gPlayerParty[partyIndex];
+ maxhp = GetMonData(slot, MON_DATA_MAX_HP);
+ hp = GetMonData(slot, MON_DATA_HP);
+ maxhp /= 4;
+ }
+ else
+ {
+ partyIndex = gBattlerPartyIndexes[gBattleAnimAttacker];
+ slot = &gEnemyParty[partyIndex];
+ maxhp = GetMonData(slot, MON_DATA_MAX_HP);
+ hp = GetMonData(slot, MON_DATA_HP);
+ maxhp /= 4;
+ }
+ for (i = 0; i < 3; i++)
+ {
+ if (hp < maxhp * (i + 1))
+ return i;
+ }
+ return 3;
+}
+
+void sub_8108408(struct Task *task, u8 taskId)
+{
+ s16 i;
+ s16 attackerCoordX = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ s16 attackerCoordY = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ s16 trigIndex = 172;
+ u8 subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ s16 increment = 4 - task->data[1];
+ u8 spriteId;
+
+ if (increment <= 0)
+ increment = 1;
+ for (i = 0; i < 20; i += increment)
+ {
+ spriteId = CreateSprite(&gUnknown_08595268, attackerCoordX, attackerCoordY, subpriority);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[1] = i;
+ gSprites[spriteId].data[2] = attackerCoordX * 16;
+ gSprites[spriteId].data[3] = attackerCoordY * 16;
+ gSprites[spriteId].data[4] = Cos(trigIndex, 64);
+ gSprites[spriteId].data[5] = Sin(trigIndex, 64);
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 2;
+ if (task->data[2] & 1)
+ sub_810851C(&gSprites[spriteId]);
+ task->data[2]++;
+ }
+ trigIndex = (trigIndex + increment * 2);
+ trigIndex &= 0xFF;
+ }
+}
+
+void sub_810851C(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->data[4] += (sprite->data[1] % 6) * 3;
+ sprite->data[5] += (sprite->data[1] % 3) * 3;
+ sprite->data[0]++;
+ case 1:
+ sprite->data[2] += sprite->data[4];
+ sprite->data[3] += sprite->data[5];
+ sprite->pos1.x = sprite->data[2] >> 4;
+ sprite->pos1.y = sprite->data[3] >> 4;
+ if (sprite->pos1.x < -8 || sprite->pos1.x > 248 || sprite->pos1.y < -8 || sprite->pos1.y > 120)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ DestroySprite(sprite);
+ }
+ break;
+ }
+}
+
+void sub_81085C8(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[1] = sub_8108384();
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER)
+ {
+ task->data[4] = 136;
+ task->data[6] = 40;
+ }
+ else
+ {
+ task->data[4] = 16;
+ task->data[6] = 80;
+ }
+ task->data[5] = 98;
+ task->data[7] = task->data[4] + 49;
+ task->data[12] = task->data[1] * 5 + 5;
+ task->func = sub_810862C;
+}
+
+void sub_810862C(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ u8 taskId2;
+
+ switch (task->data[0])
+ {
+ case 0:
+ if (++task->data[2] > 2)
+ {
+ task->data[2] = 0;
+ sub_810871C(task, taskId);
+ }
+ if (task->data[10] != 0 && task->data[13] == 0)
+ {
+ gBattleAnimArgs[0] = 1;
+ gBattleAnimArgs[1] = 0;
+ gBattleAnimArgs[2] = 12;
+ taskId2 = CreateTask(sub_81152DC, 80);
+ if (taskId2 != 0xFF)
+ {
+ gTasks[taskId2].func(taskId2);
+ gAnimVisualTaskCount++;
+ }
+ gBattleAnimArgs[0] = 3;
+ taskId2 = CreateTask(sub_81152DC, 80);
+ if (taskId2 != 0xFF)
+ {
+ gTasks[taskId2].func(taskId2);
+ gAnimVisualTaskCount++;
+ }
+ task->data[13] = 1;
+ }
+ if (task->data[11] >= task->data[12])
+ task->data[0]++;
+ break;
+ case 1:
+ if (task->data[9] == 0)
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_810871C(struct Task *task, u8 taskId)
+{
+ u16 yPosArg = ((gSineTable[task->data[8]] + 3) >> 4) + task->data[6];
+ u8 spriteId = CreateSprite(&gUnknown_08595268, task->data[7], 0, 0);
+
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].callback = sub_81087C0;
+ gSprites[spriteId].data[5] = yPosArg;
+ gSprites[spriteId].data[6] = taskId;
+ gSprites[spriteId].data[7] = 9;
+ task->data[9]++;
+ }
+ task->data[11]++;
+ task->data[8] = (task->data[8] + 39) & 0xFF;
+ task->data[7] = ((task->data[7] * 0x41c64e6d + 0x3039) % task->data[5]) + task->data[4];
+}
+
+void sub_81087C0(struct Sprite *sprite)
+{
+ if (sprite->data[0] == 0)
+ {
+ sprite->pos1.y += 8;
+ if (sprite->pos1.y >= sprite->data[5])
+ {
+ gTasks[sprite->data[6]].data[10] = 1;
+ sprite->data[1] = CreateSprite(&gUnknown_08597388, sprite->pos1.x, sprite->pos1.y, 1);
+ if (sprite->data[1] != MAX_SPRITES)
+ {
+ StartSpriteAffineAnim(&gSprites[sprite->data[1]], 3);
+ gSprites[sprite->data[1]].data[6] = sprite->data[6];
+ gSprites[sprite->data[1]].data[7] = sprite->data[7];
+ gSprites[sprite->data[1]].callback = sub_810886C;
+ }
+ DestroySprite(sprite);
+ }
+ }
+}
+
+void sub_810886C(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 1)
+ {
+ sprite->data[1] = 0;
+ sprite->invisible ^= 1;
+ if (++sprite->data[2] == 12)
+ {
+ gTasks[sprite->data[6]].data[sprite->data[7]]--;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ DestroySprite(sprite);
+ }
+ }
+}
+
+void sub_81088E4(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[3] = GetBattlerSpriteCoord(gBattleAnimAttacker, 2);
+ task->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, 3);
+ task->data[7] = (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) ? 1 : -1;
+ if (IsContest())
+ task->data[7] *= -1;
+ task->data[5] = task->data[3] + task->data[7] * 8;
+ task->data[6] = task->data[4] - task->data[7] * 8;
+ task->data[9] = -32;
+ task->data[1] = 0;
+ task->data[0] = 0;
+ task->func = sub_8108978;
+}
+
+void sub_8108978(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ sub_8108AC0(task);
+ if (task->data[10] != 0)
+ task->data[0]++;
+ break;
+ case 1:
+ sub_8108AC0(task);
+ if (++task->data[1] > 16)
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 2:
+ sub_8108AC0(task);
+ task->data[5] += task->data[7] * 6;
+ if (!(task->data[5] >= -16 && task->data[5] <= 256))
+ {
+ if (++task->data[12] > 2)
+ {
+ task->data[13] = 1;
+ task->data[0] = 6;
+ task->data[1] = 0;
+ }
+ else
+ {
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ }
+ break;
+ case 3:
+ sub_8108AC0(task);
+ task->data[6] -= task->data[7] * 2;
+ if (++task->data[1] > 7)
+ task->data[0]++;
+ break;
+ case 4:
+ sub_8108AC0(task);
+ task->data[5] -= task->data[7] * 6;
+ if (!(task->data[5] >= -16 && task->data[5] <= 256))
+ {
+ task->data[12]++;
+ task->data[1] = 0;
+ task->data[0]++;
+ }
+ break;
+ case 5:
+ sub_8108AC0(task);
+ task->data[6] -= task->data[7] * 2;
+ if (++task->data[1] > 7)
+ task->data[0] = 2;
+ break;
+ case 6:
+ if (task->data[8] == 0)
+ task->data[0]++;
+ break;
+ default:
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+
+void sub_8108AC0(struct Task *task)
+{
+ u8 spriteId;
+
+ if (++task->data[2] > 1)
+ {
+ task->data[2] = 0;
+ spriteId = CreateSprite(&gUnknown_08595268, task->data[3], task->data[4], 10);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].data[0] = 16;
+ gSprites[spriteId].data[2] = task->data[5];
+ gSprites[spriteId].data[4] = task->data[6];
+ gSprites[spriteId].data[5] = task->data[9];
+ InitAnimArcTranslation(&gSprites[spriteId]);
+ gSprites[spriteId].callback = sub_8108B2C;
+ task->data[8]++;
+ }
+ }
+}
+
+void sub_8108B2C(struct Sprite *sprite)
+{
+ if (TranslateAnimArc(sprite))
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->data[0] = 6;
+ sprite->data[2] = (Random2() & 0x1F) - 16 + sprite->pos1.x;
+ sprite->data[4] = (Random2() & 0x1F) - 16 + sprite->pos1.y;
+ sprite->data[5] = ~(Random2() & 7);
+ InitAnimArcTranslation(sprite);
+ sprite->callback = sub_8108B94;
+ }
+}
+
+void sub_8108B94(struct Sprite *sprite)
+{
+ u16 i;
+
+ if (TranslateAnimArc(sprite))
+ {
+ for (i = 0; i < NUM_TASKS; i++)
+ {
+ if (gTasks[i].func == sub_8108978)
+ {
+ gTasks[i].data[10] = 1;
+ gTasks[i].data[8]--;
+ DestroySprite(sprite);
+ }
+ }
+ }
+}
+
+void sub_8108BE0(struct Sprite *sprite)
+{
+ sprite->pos1.x = gBattleAnimArgs[0];
+ sprite->pos1.y = gBattleAnimArgs[1];
+ sprite->data[0] = gBattleAnimArgs[2];
+ sprite->data[1] = gBattleAnimArgs[3];
+ sprite->data[2] = gBattleAnimArgs[4];
+ sprite->data[3] = gBattleAnimArgs[5];
+ sprite->callback = sub_8108C08;
+}
+
+void sub_8108C08(struct Sprite *sprite)
+{
+ sprite->data[4] -= sprite->data[0];
+ sprite->pos2.y = sprite->data[4] / 10;
+ sprite->data[5] = (sprite->data[5] + sprite->data[1]) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[5], sprite->data[2]);
+ if (--sprite->data[3] == 0)
+ DestroyAnimSprite(sprite);
+}
+
+void sub_8108C54(struct Sprite *sprite)
+{
+ sprite->data[3] += sprite->data[1];
+ sprite->data[4] += sprite->data[2];
+ sprite->pos2.x = sprite->data[3] >> 7;
+ sprite->pos2.y = sprite->data[4] >> 7;
+ if (--sprite->data[0] == 0)
+ {
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+}
+
+void sub_8108C94(struct Sprite *sprite)
+{
+ InitSpritePosToAnimAttacker(sprite, TRUE);
+ sprite->data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 2);
+ sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 3);
+ sprite->data[3] = gBattleAnimArgs[2];
+ sprite->data[4] = gBattleAnimArgs[3];
+ sprite->callback = sub_8108CDC;
+}
+
+void sub_8108CDC(struct Sprite *sprite)
+{
+ int xDiff = sprite->data[1] - sprite->pos1.x;
+ int yDiff = sprite->data[2] - sprite->pos1.y;
+
+ sprite->pos2.x = (sprite->data[0] * xDiff) / sprite->data[3];
+ sprite->pos2.y = (sprite->data[0] * yDiff) / sprite->data[3];
+ if (++sprite->data[5] == sprite->data[4])
+ {
+ sprite->data[5] = 0;
+ sub_8108D54(sprite, xDiff, yDiff);
+ }
+ if (sprite->data[3] == sprite->data[0])
+ DestroyAnimSprite(sprite);
+ sprite->data[0]++;
+}
+
+#ifdef NONMATCHING
+void sub_8108D54(struct Sprite *sprite, int xDiff, int yDiff)
+{
+ s16 something = sprite->data[0] / 2;
+ s16 combinedX = sprite->pos1.x + sprite->pos2.x;
+ s16 combinedY = sprite->pos1.y + sprite->pos2.y;
+ s16 randomSomethingY = yDiff + (Random2() % 10) - 5;
+ s16 randomSomethingX = -xDiff + (Random2() % 10) - 5;
+ s16 i;
+ u8 spriteId;
+
+ for (i = 0; i <= 0; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08595310, combinedX, combinedY + something, 130);
+ gSprites[spriteId].data[0] = 20;
+ gSprites[spriteId].data[1] = randomSomethingY;
+ gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ if (randomSomethingX < 0)
+ gSprites[spriteId].data[2] = -randomSomethingX;
+ else
+ gSprites[spriteId].data[2] = randomSomethingX;
+ }
+ for (i = 0; i <= 0; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08595310, combinedX, combinedY - something, 130);
+ gSprites[spriteId].data[0] = 20;
+ gSprites[spriteId].data[1] = randomSomethingY;
+ gSprites[spriteId].subpriority = GetBattlerSpriteSubpriority(gBattleAnimAttacker) - 1;
+ if (randomSomethingX > 0)
+ gSprites[spriteId].data[2] = -randomSomethingX;
+ else
+ gSprites[spriteId].data[2] = randomSomethingX;
+ }
+}
+#else
+NAKED
+void sub_8108D54(struct Sprite *sprite, int xDiff, int yDiff)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x18\n\
+ adds r4, r1, 0\n\
+ adds r5, r2, 0\n\
+ movs r2, 0x2E\n\
+ ldrsh r1, [r0, r2]\n\
+ lsrs r2, r1, 31\n\
+ adds r1, r2\n\
+ lsls r1, 15\n\
+ lsrs r1, 16\n\
+ str r1, [sp]\n\
+ ldrh r1, [r0, 0x24]\n\
+ ldrh r3, [r0, 0x20]\n\
+ adds r1, r3\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ mov r8, r1\n\
+ ldrh r1, [r0, 0x26]\n\
+ ldrh r0, [r0, 0x22]\n\
+ adds r1, r0\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ mov r10, r1\n\
+ bl Random2\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r0, r5, r0\n\
+ subs r0, 0x5\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r9, r0\n\
+ bl Random2\n\
+ negs r4, r4\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r4, r0\n\
+ subs r4, 0x5\n\
+ lsls r4, 16\n\
+ lsrs r7, r4, 16\n\
+ movs r6, 0\n\
+ mov r0, r8\n\
+ lsls r0, 16\n\
+ mov r8, r0\n\
+ mov r1, r10\n\
+ lsls r1, 16\n\
+ str r1, [sp, 0xC]\n\
+ ldr r2, [sp]\n\
+ lsls r2, 16\n\
+ str r2, [sp, 0x10]\n\
+ asrs r1, 16\n\
+ lsls r0, r7, 16\n\
+ asrs r5, r0, 16\n\
+ str r0, [sp, 0x14]\n\
+ negs r3, r5\n\
+ str r3, [sp, 0x4]\n\
+ asrs r0, r2, 16\n\
+ adds r1, r0\n\
+ lsls r1, 16\n\
+ mov r10, r1\n\
+_08108DE2:\n\
+ ldr r0, =gUnknown_08595310\n\
+ mov r2, r8\n\
+ asrs r1, r2, 16\n\
+ mov r3, r10\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0x82\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r1, =gSprites\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r4, r0, r1\n\
+ movs r0, 0x14\n\
+ strh r0, [r4, 0x2E]\n\
+ mov r0, r9\n\
+ strh r0, [r4, 0x30]\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSpriteSubpriority\n\
+ subs r0, 0x1\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x43\n\
+ strb r0, [r1]\n\
+ cmp r5, 0\n\
+ bge _08108E30\n\
+ mov r1, sp\n\
+ ldrh r1, [r1, 0x4]\n\
+ strh r1, [r4, 0x32]\n\
+ b _08108E32\n\
+ .pool\n\
+_08108E30:\n\
+ strh r7, [r4, 0x32]\n\
+_08108E32:\n\
+ lsls r0, r6, 16\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r0, r2\n\
+ lsrs r6, r0, 16\n\
+ cmp r0, 0\n\
+ ble _08108DE2\n\
+ movs r6, 0\n\
+ ldr r3, [sp, 0xC]\n\
+ asrs r1, r3, 16\n\
+ ldr r0, [sp, 0x14]\n\
+ asrs r5, r0, 16\n\
+ negs r2, r5\n\
+ str r2, [sp, 0x8]\n\
+ ldr r3, [sp, 0x10]\n\
+ asrs r0, r3, 16\n\
+ subs r1, r0\n\
+ lsls r1, 16\n\
+ mov r10, r1\n\
+_08108E58:\n\
+ ldr r0, =gUnknown_08595310\n\
+ mov r2, r8\n\
+ asrs r1, r2, 16\n\
+ mov r3, r10\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0x82\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r1, =gSprites\n\
+ lsls r0, r2, 4\n\
+ adds r0, r2\n\
+ lsls r0, 2\n\
+ adds r4, r0, r1\n\
+ movs r0, 0x14\n\
+ strh r0, [r4, 0x2E]\n\
+ mov r0, r9\n\
+ strh r0, [r4, 0x30]\n\
+ ldr r0, =gBattleAnimAttacker\n\
+ ldrb r0, [r0]\n\
+ bl GetBattlerSpriteSubpriority\n\
+ subs r0, 0x1\n\
+ adds r1, r4, 0\n\
+ adds r1, 0x43\n\
+ strb r0, [r1]\n\
+ cmp r5, 0\n\
+ ble _08108EA8\n\
+ mov r1, sp\n\
+ ldrh r1, [r1, 0x8]\n\
+ strh r1, [r4, 0x32]\n\
+ b _08108EAA\n\
+ .pool\n\
+_08108EA8:\n\
+ strh r7, [r4, 0x32]\n\
+_08108EAA:\n\
+ lsls r0, r6, 16\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r0, r2\n\
+ lsrs r6, r0, 16\n\
+ cmp r0, 0\n\
+ ble _08108E58\n\
+ add sp, 0x18\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n");
+}
+#endif
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index d21f2e1d7..00650fc8c 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -40,4558 +40,7 @@ static bool8 IsAbilityAllowingEncounter(u8 level);
EWRAM_DATA static u8 sWildEncountersDisabled = 0;
EWRAM_DATA static u32 sFeebasRngValue = 0;
-// const rom data
-const struct WildPokemon gRoute101_LandMons[] =
-{
- {2, 2, SPECIES_WURMPLE},
- {2, 2, SPECIES_POOCHYENA},
- {2, 2, SPECIES_WURMPLE},
- {3, 3, SPECIES_WURMPLE},
- {3, 3, SPECIES_POOCHYENA},
- {3, 3, SPECIES_POOCHYENA},
- {3, 3, SPECIES_WURMPLE},
- {3, 3, SPECIES_POOCHYENA},
- {2, 2, SPECIES_ZIGZAGOON},
- {2, 2, SPECIES_ZIGZAGOON},
- {3, 3, SPECIES_ZIGZAGOON},
- {3, 3, SPECIES_ZIGZAGOON},
-};
-
-const struct WildPokemonInfo gRoute101_LandMonsInfo = {20, gRoute101_LandMons};
-
-const struct WildPokemon gRoute102_LandMons[] =
-{
- {3, 3, SPECIES_POOCHYENA},
- {3, 3, SPECIES_WURMPLE},
- {4, 4, SPECIES_POOCHYENA},
- {4, 4, SPECIES_WURMPLE},
- {3, 3, SPECIES_LOTAD},
- {4, 4, SPECIES_LOTAD},
- {3, 3, SPECIES_ZIGZAGOON},
- {3, 3, SPECIES_ZIGZAGOON},
- {4, 4, SPECIES_ZIGZAGOON},
- {4, 4, SPECIES_RALTS},
- {4, 4, SPECIES_ZIGZAGOON},
- {3, 3, SPECIES_SEEDOT},
-};
-
-const struct WildPokemonInfo gRoute102_LandMonsInfo = {20, gRoute102_LandMons};
-
-const struct WildPokemon gRoute102_WaterMons[] =
-{
- {20, 30, SPECIES_MARILL},
- {10, 20, SPECIES_MARILL},
- {30, 35, SPECIES_MARILL},
- {5, 10, SPECIES_MARILL},
- {20, 30, SPECIES_GOLDEEN},
-};
-
-const struct WildPokemonInfo gRoute102_WaterMonsInfo = {4, gRoute102_WaterMons};
-
-const struct WildPokemon gRoute102_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_CORPHISH},
- {25, 30, SPECIES_CORPHISH},
- {30, 35, SPECIES_CORPHISH},
- {20, 25, SPECIES_CORPHISH},
- {35, 40, SPECIES_CORPHISH},
- {40, 45, SPECIES_CORPHISH},
-};
-
-const struct WildPokemonInfo gRoute102_FishingMonsInfo = {30, gRoute102_FishingMons};
-
-const struct WildPokemon gRoute103_LandMons[] =
-{
- {2, 2, SPECIES_POOCHYENA},
- {3, 3, SPECIES_POOCHYENA},
- {3, 3, SPECIES_POOCHYENA},
- {4, 4, SPECIES_POOCHYENA},
- {2, 2, SPECIES_WINGULL},
- {3, 3, SPECIES_ZIGZAGOON},
- {3, 3, SPECIES_ZIGZAGOON},
- {4, 4, SPECIES_ZIGZAGOON},
- {3, 3, SPECIES_WINGULL},
- {3, 3, SPECIES_WINGULL},
- {2, 2, SPECIES_WINGULL},
- {4, 4, SPECIES_WINGULL},
-};
-
-const struct WildPokemonInfo gRoute103_LandMonsInfo = {20, gRoute103_LandMons};
-
-const struct WildPokemon gRoute103_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute103_WaterMonsInfo = {4, gRoute103_WaterMons};
-
-const struct WildPokemon gRoute103_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute103_FishingMonsInfo = {30, gRoute103_FishingMons};
-
-const struct WildPokemon gRoute104_LandMons[] =
-{
- {4, 4, SPECIES_POOCHYENA},
- {4, 4, SPECIES_WURMPLE},
- {5, 5, SPECIES_POOCHYENA},
- {5, 5, SPECIES_MARILL},
- {4, 4, SPECIES_MARILL},
- {5, 5, SPECIES_POOCHYENA},
- {4, 4, SPECIES_TAILLOW},
- {5, 5, SPECIES_TAILLOW},
- {4, 4, SPECIES_WINGULL},
- {4, 4, SPECIES_WINGULL},
- {3, 3, SPECIES_WINGULL},
- {5, 5, SPECIES_WINGULL},
-};
-
-const struct WildPokemonInfo gRoute104_LandMonsInfo = {20, gRoute104_LandMons};
-
-const struct WildPokemon gRoute104_WaterMons[] =
-{
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute104_WaterMonsInfo = {4, gRoute104_WaterMons};
-
-const struct WildPokemon gRoute104_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_MAGIKARP},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_MAGIKARP},
- {25, 30, SPECIES_MAGIKARP},
- {30, 35, SPECIES_MAGIKARP},
- {20, 25, SPECIES_MAGIKARP},
- {35, 40, SPECIES_MAGIKARP},
- {40, 45, SPECIES_MAGIKARP},
-};
-
-const struct WildPokemonInfo gRoute104_FishingMonsInfo = {30, gRoute104_FishingMons};
-
-const struct WildPokemon gRoute105_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute105_WaterMonsInfo = {4, gRoute105_WaterMons};
-
-const struct WildPokemon gRoute105_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute105_FishingMonsInfo = {30, gRoute105_FishingMons};
-
-const struct WildPokemon gRoute110_LandMons[] =
-{
- {12, 12, SPECIES_POOCHYENA},
- {12, 12, SPECIES_ELECTRIKE},
- {12, 12, SPECIES_GULPIN},
- {13, 13, SPECIES_ELECTRIKE},
- {13, 13, SPECIES_MINUN},
- {13, 13, SPECIES_ODDISH},
- {13, 13, SPECIES_MINUN},
- {13, 13, SPECIES_GULPIN},
- {12, 12, SPECIES_WINGULL},
- {12, 12, SPECIES_WINGULL},
- {12, 12, SPECIES_PLUSLE},
- {13, 13, SPECIES_PLUSLE},
-};
-
-const struct WildPokemonInfo gRoute110_LandMonsInfo = {20, gRoute110_LandMons};
-
-const struct WildPokemon gRoute110_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute110_WaterMonsInfo = {4, gRoute110_WaterMons};
-
-const struct WildPokemon gRoute110_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute110_FishingMonsInfo = {30, gRoute110_FishingMons};
-
-const struct WildPokemon gRoute111_LandMons[] =
-{
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {21, 21, SPECIES_SANDSHREW},
- {21, 21, SPECIES_TRAPINCH},
- {19, 19, SPECIES_BALTOY},
- {21, 21, SPECIES_BALTOY},
- {19, 19, SPECIES_SANDSHREW},
- {19, 19, SPECIES_TRAPINCH},
- {20, 20, SPECIES_BALTOY},
- {20, 20, SPECIES_CACNEA},
- {22, 22, SPECIES_CACNEA},
- {22, 22, SPECIES_CACNEA},
-};
-
-const struct WildPokemonInfo gRoute111_LandMonsInfo = {10, gRoute111_LandMons};
-
-const struct WildPokemon gRoute111_WaterMons[] =
-{
- {20, 30, SPECIES_MARILL},
- {10, 20, SPECIES_MARILL},
- {30, 35, SPECIES_MARILL},
- {5, 10, SPECIES_MARILL},
- {20, 30, SPECIES_GOLDEEN},
-};
-
-const struct WildPokemonInfo gRoute111_WaterMonsInfo = {4, gRoute111_WaterMons};
-
-const struct WildPokemon gRoute111_RockSmashMons[] =
-{
- {10, 15, SPECIES_GEODUDE},
- {5, 10, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
-};
-
-const struct WildPokemonInfo gRoute111_RockSmashMonsInfo = {20, gRoute111_RockSmashMons};
-
-const struct WildPokemon gRoute111_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {20, 25, SPECIES_BARBOACH},
- {35, 40, SPECIES_BARBOACH},
- {40, 45, SPECIES_BARBOACH},
-};
-
-const struct WildPokemonInfo gRoute111_FishingMonsInfo = {30, gRoute111_FishingMons};
-
-const struct WildPokemon gRoute112_LandMons[] =
-{
- {15, 15, SPECIES_NUMEL},
- {15, 15, SPECIES_NUMEL},
- {15, 15, SPECIES_MARILL},
- {14, 14, SPECIES_NUMEL},
- {14, 14, SPECIES_NUMEL},
- {14, 14, SPECIES_MARILL},
- {16, 16, SPECIES_NUMEL},
- {16, 16, SPECIES_MARILL},
- {16, 16, SPECIES_NUMEL},
- {16, 16, SPECIES_NUMEL},
- {16, 16, SPECIES_NUMEL},
- {16, 16, SPECIES_NUMEL},
-};
-
-const struct WildPokemonInfo gRoute112_LandMonsInfo = {20, gRoute112_LandMons};
-
-const struct WildPokemon gRoute113_LandMons[] =
-{
- {15, 15, SPECIES_SPINDA},
- {15, 15, SPECIES_SPINDA},
- {15, 15, SPECIES_SLUGMA},
- {14, 14, SPECIES_SPINDA},
- {14, 14, SPECIES_SPINDA},
- {14, 14, SPECIES_SLUGMA},
- {16, 16, SPECIES_SPINDA},
- {16, 16, SPECIES_SLUGMA},
- {16, 16, SPECIES_SPINDA},
- {16, 16, SPECIES_SKARMORY},
- {16, 16, SPECIES_SPINDA},
- {16, 16, SPECIES_SKARMORY},
-};
-
-const struct WildPokemonInfo gRoute113_LandMonsInfo = {20, gRoute113_LandMons};
-
-const struct WildPokemon gRoute114_LandMons[] =
-{
- {16, 16, SPECIES_SWABLU},
- {16, 16, SPECIES_LOTAD},
- {17, 17, SPECIES_SWABLU},
- {15, 15, SPECIES_SWABLU},
- {15, 15, SPECIES_LOTAD},
- {16, 16, SPECIES_LOMBRE},
- {16, 16, SPECIES_LOMBRE},
- {18, 18, SPECIES_LOMBRE},
- {17, 17, SPECIES_SEVIPER},
- {15, 15, SPECIES_SEVIPER},
- {17, 17, SPECIES_SEVIPER},
- {15, 15, SPECIES_NUZLEAF},
-};
-
-const struct WildPokemonInfo gRoute114_LandMonsInfo = {20, gRoute114_LandMons};
-
-const struct WildPokemon gRoute114_WaterMons[] =
-{
- {20, 30, SPECIES_MARILL},
- {10, 20, SPECIES_MARILL},
- {30, 35, SPECIES_MARILL},
- {5, 10, SPECIES_MARILL},
- {20, 30, SPECIES_GOLDEEN},
-};
-
-const struct WildPokemonInfo gRoute114_WaterMonsInfo = {4, gRoute114_WaterMons};
-
-const struct WildPokemon gRoute114_RockSmashMons[] =
-{
- {10, 15, SPECIES_GEODUDE},
- {5, 10, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
-};
-
-const struct WildPokemonInfo gRoute114_RockSmashMonsInfo = {20, gRoute114_RockSmashMons};
-
-const struct WildPokemon gRoute114_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {20, 25, SPECIES_BARBOACH},
- {35, 40, SPECIES_BARBOACH},
- {40, 45, SPECIES_BARBOACH},
-};
-
-const struct WildPokemonInfo gRoute114_FishingMonsInfo = {30, gRoute114_FishingMons};
-
-const struct WildPokemon gRoute116_LandMons[] =
-{
- {6, 6, SPECIES_POOCHYENA},
- {6, 6, SPECIES_WHISMUR},
- {6, 6, SPECIES_NINCADA},
- {7, 7, SPECIES_ABRA},
- {7, 7, SPECIES_NINCADA},
- {6, 6, SPECIES_TAILLOW},
- {7, 7, SPECIES_TAILLOW},
- {8, 8, SPECIES_TAILLOW},
- {7, 7, SPECIES_POOCHYENA},
- {8, 8, SPECIES_POOCHYENA},
- {7, 7, SPECIES_SKITTY},
- {8, 8, SPECIES_SKITTY},
-};
-
-const struct WildPokemonInfo gRoute116_LandMonsInfo = {20, gRoute116_LandMons};
-
-const struct WildPokemon gRoute117_LandMons[] =
-{
- {13, 13, SPECIES_POOCHYENA},
- {13, 13, SPECIES_ODDISH},
- {14, 14, SPECIES_POOCHYENA},
- {14, 14, SPECIES_ODDISH},
- {13, 13, SPECIES_MARILL},
- {13, 13, SPECIES_ODDISH},
- {13, 13, SPECIES_ILLUMISE},
- {13, 13, SPECIES_ILLUMISE},
- {14, 14, SPECIES_ILLUMISE},
- {14, 14, SPECIES_ILLUMISE},
- {13, 13, SPECIES_VOLBEAT},
- {13, 13, SPECIES_SEEDOT},
-};
-
-const struct WildPokemonInfo gRoute117_LandMonsInfo = {20, gRoute117_LandMons};
-
-const struct WildPokemon gRoute117_WaterMons[] =
-{
- {20, 30, SPECIES_MARILL},
- {10, 20, SPECIES_MARILL},
- {30, 35, SPECIES_MARILL},
- {5, 10, SPECIES_MARILL},
- {20, 30, SPECIES_GOLDEEN},
-};
-
-const struct WildPokemonInfo gRoute117_WaterMonsInfo = {4, gRoute117_WaterMons};
-
-const struct WildPokemon gRoute117_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_CORPHISH},
- {25, 30, SPECIES_CORPHISH},
- {30, 35, SPECIES_CORPHISH},
- {20, 25, SPECIES_CORPHISH},
- {35, 40, SPECIES_CORPHISH},
- {40, 45, SPECIES_CORPHISH},
-};
-
-const struct WildPokemonInfo gRoute117_FishingMonsInfo = {30, gRoute117_FishingMons};
-
-const struct WildPokemon gRoute118_LandMons[] =
-{
- {24, 24, SPECIES_ZIGZAGOON},
- {24, 24, SPECIES_ELECTRIKE},
- {26, 26, SPECIES_ZIGZAGOON},
- {26, 26, SPECIES_ELECTRIKE},
- {26, 26, SPECIES_LINOONE},
- {26, 26, SPECIES_MANECTRIC},
- {25, 25, SPECIES_WINGULL},
- {25, 25, SPECIES_WINGULL},
- {26, 26, SPECIES_WINGULL},
- {26, 26, SPECIES_WINGULL},
- {27, 27, SPECIES_WINGULL},
- {25, 25, SPECIES_KECLEON},
-};
-
-const struct WildPokemonInfo gRoute118_LandMonsInfo = {20, gRoute118_LandMons};
-
-const struct WildPokemon gRoute118_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute118_WaterMonsInfo = {4, gRoute118_WaterMons};
-
-const struct WildPokemon gRoute118_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_CARVANHA},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_CARVANHA},
- {20, 25, SPECIES_CARVANHA},
- {35, 40, SPECIES_CARVANHA},
- {40, 45, SPECIES_CARVANHA},
-};
-
-const struct WildPokemonInfo gRoute118_FishingMonsInfo = {30, gRoute118_FishingMons};
-
-const struct WildPokemon gRoute124_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute124_WaterMonsInfo = {4, gRoute124_WaterMons};
-
-const struct WildPokemon gRoute124_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute124_FishingMonsInfo = {30, gRoute124_FishingMons};
-
-const struct WildPokemon gPetalburgWoods_LandMons[] =
-{
- {5, 5, SPECIES_POOCHYENA},
- {5, 5, SPECIES_WURMPLE},
- {5, 5, SPECIES_SHROOMISH},
- {6, 6, SPECIES_POOCHYENA},
- {5, 5, SPECIES_SILCOON},
- {5, 5, SPECIES_CASCOON},
- {6, 6, SPECIES_WURMPLE},
- {6, 6, SPECIES_SHROOMISH},
- {5, 5, SPECIES_TAILLOW},
- {5, 5, SPECIES_SLAKOTH},
- {6, 6, SPECIES_TAILLOW},
- {6, 6, SPECIES_SLAKOTH},
-};
-
-const struct WildPokemonInfo gPetalburgWoods_LandMonsInfo = {20, gPetalburgWoods_LandMons};
-
-const struct WildPokemon gRusturfTunnel_LandMons[] =
-{
- {6, 6, SPECIES_WHISMUR},
- {7, 7, SPECIES_WHISMUR},
- {6, 6, SPECIES_WHISMUR},
- {6, 6, SPECIES_WHISMUR},
- {7, 7, SPECIES_WHISMUR},
- {7, 7, SPECIES_WHISMUR},
- {5, 5, SPECIES_WHISMUR},
- {8, 8, SPECIES_WHISMUR},
- {5, 5, SPECIES_WHISMUR},
- {8, 8, SPECIES_WHISMUR},
- {5, 5, SPECIES_WHISMUR},
- {8, 8, SPECIES_WHISMUR},
-};
-
-const struct WildPokemonInfo gRusturfTunnel_LandMonsInfo = {10, gRusturfTunnel_LandMons};
-
-const struct WildPokemon gGraniteCave_1F_LandMons[] =
-{
- {7, 7, SPECIES_ZUBAT},
- {8, 8, SPECIES_MAKUHITA},
- {7, 7, SPECIES_MAKUHITA},
- {8, 8, SPECIES_ZUBAT},
- {9, 9, SPECIES_MAKUHITA},
- {8, 8, SPECIES_ABRA},
- {10, 10, SPECIES_MAKUHITA},
- {6, 6, SPECIES_MAKUHITA},
- {7, 7, SPECIES_GEODUDE},
- {8, 8, SPECIES_GEODUDE},
- {6, 6, SPECIES_GEODUDE},
- {9, 9, SPECIES_GEODUDE},
-};
-
-const struct WildPokemonInfo gGraniteCave_1F_LandMonsInfo = {10, gGraniteCave_1F_LandMons};
-
-const struct WildPokemon gGraniteCave_B1F_LandMons[] =
-{
- {9, 9, SPECIES_ZUBAT},
- {10, 10, SPECIES_ARON},
- {9, 9, SPECIES_ARON},
- {11, 11, SPECIES_ARON},
- {10, 10, SPECIES_ZUBAT},
- {9, 9, SPECIES_ABRA},
- {10, 10, SPECIES_MAKUHITA},
- {11, 11, SPECIES_MAKUHITA},
- {10, 10, SPECIES_SABLEYE},
- {10, 10, SPECIES_SABLEYE},
- {9, 9, SPECIES_SABLEYE},
- {11, 11, SPECIES_SABLEYE},
-};
-
-const struct WildPokemonInfo gGraniteCave_B1F_LandMonsInfo = {10, gGraniteCave_B1F_LandMons};
-
-const struct WildPokemon gMtPyre_1F_LandMons[] =
-{
- {27, 27, SPECIES_SHUPPET},
- {28, 28, SPECIES_SHUPPET},
- {26, 26, SPECIES_SHUPPET},
- {25, 25, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {23, 23, SPECIES_SHUPPET},
- {22, 22, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
-};
-
-const struct WildPokemonInfo gMtPyre_1F_LandMonsInfo = {10, gMtPyre_1F_LandMons};
-
-const struct WildPokemon gVictoryRoad_1F_LandMons[] =
-{
- {40, 40, SPECIES_GOLBAT},
- {40, 40, SPECIES_HARIYAMA},
- {40, 40, SPECIES_LAIRON},
- {40, 40, SPECIES_LOUDRED},
- {36, 36, SPECIES_ZUBAT},
- {36, 36, SPECIES_MAKUHITA},
- {38, 38, SPECIES_GOLBAT},
- {38, 38, SPECIES_HARIYAMA},
- {36, 36, SPECIES_ARON},
- {36, 36, SPECIES_WHISMUR},
- {36, 36, SPECIES_ARON},
- {36, 36, SPECIES_WHISMUR},
-};
-
-const struct WildPokemonInfo gVictoryRoad_1F_LandMonsInfo = {10, gVictoryRoad_1F_LandMons};
-
-const struct WildPokemon gSafariZone_South_LandMons[] =
-{
- {25, 25, SPECIES_ODDISH},
- {27, 27, SPECIES_ODDISH},
- {25, 25, SPECIES_GIRAFARIG},
- {27, 27, SPECIES_GIRAFARIG},
- {25, 25, SPECIES_NATU},
- {25, 25, SPECIES_DODUO},
- {25, 25, SPECIES_GLOOM},
- {27, 27, SPECIES_WOBBUFFET},
- {25, 25, SPECIES_PIKACHU},
- {27, 27, SPECIES_WOBBUFFET},
- {27, 27, SPECIES_PIKACHU},
- {29, 29, SPECIES_WOBBUFFET},
-};
-
-const struct WildPokemonInfo gSafariZone_South_LandMonsInfo = {25, gSafariZone_South_LandMons};
-
-const struct WildPokemon gUnderwater2_WaterMons[] =
-{
- {20, 30, SPECIES_CLAMPERL},
- {20, 30, SPECIES_CHINCHOU},
- {30, 35, SPECIES_CLAMPERL},
- {30, 35, SPECIES_RELICANTH},
- {30, 35, SPECIES_RELICANTH},
-};
-
-const struct WildPokemonInfo gUnderwater2_WaterMonsInfo = {4, gUnderwater2_WaterMons};
-
-const struct WildPokemon gAbandonedShip_Rooms_B1F_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_TENTACOOL},
- {30, 35, SPECIES_TENTACRUEL},
-};
-
-const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_WaterMonsInfo = {4, gAbandonedShip_Rooms_B1F_WaterMons};
-
-const struct WildPokemon gAbandonedShip_Rooms_B1F_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_TENTACOOL},
- {25, 30, SPECIES_TENTACOOL},
- {30, 35, SPECIES_TENTACOOL},
- {30, 35, SPECIES_TENTACRUEL},
- {25, 30, SPECIES_TENTACRUEL},
- {20, 25, SPECIES_TENTACRUEL},
-};
-
-const struct WildPokemonInfo gAbandonedShip_Rooms_B1F_FishingMonsInfo = {20, gAbandonedShip_Rooms_B1F_FishingMons};
-
-const struct WildPokemon gGraniteCave_B2F_LandMons[] =
-{
- {10, 10, SPECIES_ZUBAT},
- {11, 11, SPECIES_ARON},
- {10, 10, SPECIES_ARON},
- {11, 11, SPECIES_ZUBAT},
- {12, 12, SPECIES_ARON},
- {10, 10, SPECIES_ABRA},
- {10, 10, SPECIES_SABLEYE},
- {11, 11, SPECIES_SABLEYE},
- {12, 12, SPECIES_SABLEYE},
- {10, 10, SPECIES_SABLEYE},
- {12, 12, SPECIES_SABLEYE},
- {10, 10, SPECIES_SABLEYE},
-};
-
-const struct WildPokemonInfo gGraniteCave_B2F_LandMonsInfo = {10, gGraniteCave_B2F_LandMons};
-
-const struct WildPokemon gGraniteCave_B2F_RockSmashMons[] =
-{
- {10, 15, SPECIES_GEODUDE},
- {10, 20, SPECIES_NOSEPASS},
- {5, 10, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
-};
-
-const struct WildPokemonInfo gGraniteCave_B2F_RockSmashMonsInfo = {20, gGraniteCave_B2F_RockSmashMons};
-
-const struct WildPokemon gFieryPath_LandMons[] =
-{
- {15, 15, SPECIES_NUMEL},
- {15, 15, SPECIES_KOFFING},
- {16, 16, SPECIES_NUMEL},
- {15, 15, SPECIES_MACHOP},
- {15, 15, SPECIES_TORKOAL},
- {15, 15, SPECIES_SLUGMA},
- {16, 16, SPECIES_KOFFING},
- {16, 16, SPECIES_MACHOP},
- {14, 14, SPECIES_TORKOAL},
- {16, 16, SPECIES_TORKOAL},
- {14, 14, SPECIES_GRIMER},
- {14, 14, SPECIES_GRIMER},
-};
-
-const struct WildPokemonInfo gFieryPath_LandMonsInfo = {10, gFieryPath_LandMons};
-
-const struct WildPokemon gMeteorFalls_B1F_2R_LandMons[] =
-{
- {33, 33, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {30, 30, SPECIES_BAGON},
- {35, 35, SPECIES_SOLROCK},
- {35, 35, SPECIES_BAGON},
- {37, 37, SPECIES_SOLROCK},
- {25, 25, SPECIES_BAGON},
- {39, 39, SPECIES_SOLROCK},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gMeteorFalls_B1F_2R_LandMonsInfo = {10, gMeteorFalls_B1F_2R_LandMons};
-
-const struct WildPokemon gMeteorFalls_B1F_2R_WaterMons[] =
-{
- {30, 35, SPECIES_GOLBAT},
- {30, 35, SPECIES_GOLBAT},
- {25, 35, SPECIES_SOLROCK},
- {15, 25, SPECIES_SOLROCK},
- {5, 15, SPECIES_SOLROCK},
-};
-
-const struct WildPokemonInfo gMeteorFalls_B1F_2R_WaterMonsInfo = {4, gMeteorFalls_B1F_2R_WaterMons};
-
-const struct WildPokemon gMeteorFalls_B1F_2R_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {30, 35, SPECIES_WHISCASH},
- {35, 40, SPECIES_WHISCASH},
- {40, 45, SPECIES_WHISCASH},
-};
-
-const struct WildPokemonInfo gMeteorFalls_B1F_2R_FishingMonsInfo = {30, gMeteorFalls_B1F_2R_FishingMons};
-
-const struct WildPokemon gJaggedPass_LandMons[] =
-{
- {21, 21, SPECIES_NUMEL},
- {21, 21, SPECIES_NUMEL},
- {21, 21, SPECIES_MACHOP},
- {20, 20, SPECIES_NUMEL},
- {20, 20, SPECIES_SPOINK},
- {20, 20, SPECIES_MACHOP},
- {21, 21, SPECIES_SPOINK},
- {22, 22, SPECIES_MACHOP},
- {22, 22, SPECIES_NUMEL},
- {22, 22, SPECIES_SPOINK},
- {22, 22, SPECIES_NUMEL},
- {22, 22, SPECIES_SPOINK},
-};
-
-const struct WildPokemonInfo gJaggedPass_LandMonsInfo = {20, gJaggedPass_LandMons};
-
-const struct WildPokemon gRoute106_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute106_WaterMonsInfo = {4, gRoute106_WaterMons};
-
-const struct WildPokemon gRoute106_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute106_FishingMonsInfo = {30, gRoute106_FishingMons};
-
-const struct WildPokemon gRoute107_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute107_WaterMonsInfo = {4, gRoute107_WaterMons};
-
-const struct WildPokemon gRoute107_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute107_FishingMonsInfo = {30, gRoute107_FishingMons};
-
-const struct WildPokemon gRoute108_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute108_WaterMonsInfo = {4, gRoute108_WaterMons};
-
-const struct WildPokemon gRoute108_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute108_FishingMonsInfo = {30, gRoute108_FishingMons};
-
-const struct WildPokemon gRoute109_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute109_WaterMonsInfo = {4, gRoute109_WaterMons};
-
-const struct WildPokemon gRoute109_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute109_FishingMonsInfo = {30, gRoute109_FishingMons};
-
-const struct WildPokemon gRoute115_LandMons[] =
-{
- {23, 23, SPECIES_SWABLU},
- {23, 23, SPECIES_TAILLOW},
- {25, 25, SPECIES_SWABLU},
- {24, 24, SPECIES_TAILLOW},
- {25, 25, SPECIES_TAILLOW},
- {25, 25, SPECIES_SWELLOW},
- {24, 24, SPECIES_JIGGLYPUFF},
- {25, 25, SPECIES_JIGGLYPUFF},
- {24, 24, SPECIES_WINGULL},
- {24, 24, SPECIES_WINGULL},
- {26, 26, SPECIES_WINGULL},
- {25, 25, SPECIES_WINGULL},
-};
-
-const struct WildPokemonInfo gRoute115_LandMonsInfo = {20, gRoute115_LandMons};
-
-const struct WildPokemon gRoute115_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute115_WaterMonsInfo = {4, gRoute115_WaterMons};
-
-const struct WildPokemon gRoute115_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute115_FishingMonsInfo = {30, gRoute115_FishingMons};
-
-const struct WildPokemon gNewMauville_Inside_LandMons[] =
-{
- {24, 24, SPECIES_VOLTORB},
- {24, 24, SPECIES_MAGNEMITE},
- {25, 25, SPECIES_VOLTORB},
- {25, 25, SPECIES_MAGNEMITE},
- {23, 23, SPECIES_VOLTORB},
- {23, 23, SPECIES_MAGNEMITE},
- {26, 26, SPECIES_VOLTORB},
- {26, 26, SPECIES_MAGNEMITE},
- {22, 22, SPECIES_VOLTORB},
- {22, 22, SPECIES_MAGNEMITE},
- {26, 26, SPECIES_ELECTRODE},
- {26, 26, SPECIES_MAGNETON},
-};
-
-const struct WildPokemonInfo gNewMauville_Inside_LandMonsInfo = {10, gNewMauville_Inside_LandMons};
-
-const struct WildPokemon gRoute119_LandMons[] =
-{
- {25, 25, SPECIES_ZIGZAGOON},
- {25, 25, SPECIES_LINOONE},
- {27, 27, SPECIES_ZIGZAGOON},
- {25, 25, SPECIES_ODDISH},
- {27, 27, SPECIES_LINOONE},
- {26, 26, SPECIES_ODDISH},
- {27, 27, SPECIES_ODDISH},
- {24, 24, SPECIES_ODDISH},
- {25, 25, SPECIES_TROPIUS},
- {26, 26, SPECIES_TROPIUS},
- {27, 27, SPECIES_TROPIUS},
- {25, 25, SPECIES_KECLEON},
-};
-
-const struct WildPokemonInfo gRoute119_LandMonsInfo = {15, gRoute119_LandMons};
-
-const struct WildPokemon gRoute119_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute119_WaterMonsInfo = {4, gRoute119_WaterMons};
-
-const struct WildPokemon gRoute119_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_CARVANHA},
- {25, 30, SPECIES_CARVANHA},
- {30, 35, SPECIES_CARVANHA},
- {20, 25, SPECIES_CARVANHA},
- {35, 40, SPECIES_CARVANHA},
- {40, 45, SPECIES_CARVANHA},
-};
-
-const struct WildPokemonInfo gRoute119_FishingMonsInfo = {30, gRoute119_FishingMons};
-
-const struct WildPokemon gRoute120_LandMons[] =
-{
- {25, 25, SPECIES_POOCHYENA},
- {25, 25, SPECIES_MIGHTYENA},
- {27, 27, SPECIES_MIGHTYENA},
- {25, 25, SPECIES_ODDISH},
- {25, 25, SPECIES_MARILL},
- {26, 26, SPECIES_ODDISH},
- {27, 27, SPECIES_ODDISH},
- {27, 27, SPECIES_MARILL},
- {25, 25, SPECIES_ABSOL},
- {27, 27, SPECIES_ABSOL},
- {25, 25, SPECIES_KECLEON},
- {25, 25, SPECIES_SEEDOT},
-};
-
-const struct WildPokemonInfo gRoute120_LandMonsInfo = {20, gRoute120_LandMons};
-
-const struct WildPokemon gRoute120_WaterMons[] =
-{
- {20, 30, SPECIES_MARILL},
- {10, 20, SPECIES_MARILL},
- {30, 35, SPECIES_MARILL},
- {5, 10, SPECIES_MARILL},
- {20, 30, SPECIES_GOLDEEN},
-};
-
-const struct WildPokemonInfo gRoute120_WaterMonsInfo = {4, gRoute120_WaterMons};
-
-const struct WildPokemon gRoute120_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {20, 25, SPECIES_BARBOACH},
- {35, 40, SPECIES_BARBOACH},
- {40, 45, SPECIES_BARBOACH},
-};
-
-const struct WildPokemonInfo gRoute120_FishingMonsInfo = {30, gRoute120_FishingMons};
-
-const struct WildPokemon gRoute121_LandMons[] =
-{
- {26, 26, SPECIES_POOCHYENA},
- {26, 26, SPECIES_SHUPPET},
- {26, 26, SPECIES_MIGHTYENA},
- {28, 28, SPECIES_SHUPPET},
- {28, 28, SPECIES_MIGHTYENA},
- {26, 26, SPECIES_ODDISH},
- {28, 28, SPECIES_ODDISH},
- {28, 28, SPECIES_GLOOM},
- {26, 26, SPECIES_WINGULL},
- {27, 27, SPECIES_WINGULL},
- {28, 28, SPECIES_WINGULL},
- {25, 25, SPECIES_KECLEON},
-};
-
-const struct WildPokemonInfo gRoute121_LandMonsInfo = {20, gRoute121_LandMons};
-
-const struct WildPokemon gRoute121_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute121_WaterMonsInfo = {4, gRoute121_WaterMons};
-
-const struct WildPokemon gRoute121_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute121_FishingMonsInfo = {30, gRoute121_FishingMons};
-
-const struct WildPokemon gRoute122_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute122_WaterMonsInfo = {4, gRoute122_WaterMons};
-
-const struct WildPokemon gRoute122_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute122_FishingMonsInfo = {30, gRoute122_FishingMons};
-
-const struct WildPokemon gRoute123_LandMons[] =
-{
- {26, 26, SPECIES_POOCHYENA},
- {26, 26, SPECIES_SHUPPET},
- {26, 26, SPECIES_MIGHTYENA},
- {28, 28, SPECIES_SHUPPET},
- {28, 28, SPECIES_MIGHTYENA},
- {26, 26, SPECIES_ODDISH},
- {28, 28, SPECIES_ODDISH},
- {28, 28, SPECIES_GLOOM},
- {26, 26, SPECIES_WINGULL},
- {27, 27, SPECIES_WINGULL},
- {28, 28, SPECIES_WINGULL},
- {25, 25, SPECIES_KECLEON},
-};
-
-const struct WildPokemonInfo gRoute123_LandMonsInfo = {20, gRoute123_LandMons};
-
-const struct WildPokemon gRoute123_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute123_WaterMonsInfo = {4, gRoute123_WaterMons};
-
-const struct WildPokemon gRoute123_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute123_FishingMonsInfo = {30, gRoute123_FishingMons};
-
-const struct WildPokemon gMtPyre_2F_LandMons[] =
-{
- {27, 27, SPECIES_SHUPPET},
- {28, 28, SPECIES_SHUPPET},
- {26, 26, SPECIES_SHUPPET},
- {25, 25, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {23, 23, SPECIES_SHUPPET},
- {22, 22, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
-};
-
-const struct WildPokemonInfo gMtPyre_2F_LandMonsInfo = {10, gMtPyre_2F_LandMons};
-
-const struct WildPokemon gMtPyre_3F_LandMons[] =
-{
- {27, 27, SPECIES_SHUPPET},
- {28, 28, SPECIES_SHUPPET},
- {26, 26, SPECIES_SHUPPET},
- {25, 25, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {23, 23, SPECIES_SHUPPET},
- {22, 22, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
-};
-
-const struct WildPokemonInfo gMtPyre_3F_LandMonsInfo = {10, gMtPyre_3F_LandMons};
-
-const struct WildPokemon gMtPyre_4F_LandMons[] =
-{
- {27, 27, SPECIES_SHUPPET},
- {28, 28, SPECIES_SHUPPET},
- {26, 26, SPECIES_SHUPPET},
- {25, 25, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {23, 23, SPECIES_SHUPPET},
- {22, 22, SPECIES_SHUPPET},
- {27, 27, SPECIES_DUSKULL},
- {27, 27, SPECIES_DUSKULL},
- {25, 25, SPECIES_DUSKULL},
- {29, 29, SPECIES_DUSKULL},
-};
-
-const struct WildPokemonInfo gMtPyre_4F_LandMonsInfo = {10, gMtPyre_4F_LandMons};
-
-const struct WildPokemon gMtPyre_5F_LandMons[] =
-{
- {27, 27, SPECIES_SHUPPET},
- {28, 28, SPECIES_SHUPPET},
- {26, 26, SPECIES_SHUPPET},
- {25, 25, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {23, 23, SPECIES_SHUPPET},
- {22, 22, SPECIES_SHUPPET},
- {27, 27, SPECIES_DUSKULL},
- {27, 27, SPECIES_DUSKULL},
- {25, 25, SPECIES_DUSKULL},
- {29, 29, SPECIES_DUSKULL},
-};
-
-const struct WildPokemonInfo gMtPyre_5F_LandMonsInfo = {10, gMtPyre_5F_LandMons};
-
-const struct WildPokemon gMtPyre_6F_LandMons[] =
-{
- {27, 27, SPECIES_SHUPPET},
- {28, 28, SPECIES_SHUPPET},
- {26, 26, SPECIES_SHUPPET},
- {25, 25, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {23, 23, SPECIES_SHUPPET},
- {22, 22, SPECIES_SHUPPET},
- {27, 27, SPECIES_DUSKULL},
- {27, 27, SPECIES_DUSKULL},
- {25, 25, SPECIES_DUSKULL},
- {29, 29, SPECIES_DUSKULL},
-};
-
-const struct WildPokemonInfo gMtPyre_6F_LandMonsInfo = {10, gMtPyre_6F_LandMons};
-
-const struct WildPokemon gMtPyre_Exterior_LandMons[] =
-{
- {27, 27, SPECIES_SHUPPET},
- {27, 27, SPECIES_SHUPPET},
- {28, 28, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {29, 29, SPECIES_VULPIX},
- {27, 27, SPECIES_VULPIX},
- {29, 29, SPECIES_VULPIX},
- {25, 25, SPECIES_VULPIX},
- {27, 27, SPECIES_WINGULL},
- {27, 27, SPECIES_WINGULL},
- {26, 26, SPECIES_WINGULL},
- {28, 28, SPECIES_WINGULL},
-};
-
-const struct WildPokemonInfo gMtPyre_Exterior_LandMonsInfo = {10, gMtPyre_Exterior_LandMons};
-
-const struct WildPokemon gMtPyre_Summit_LandMons[] =
-{
- {28, 28, SPECIES_SHUPPET},
- {29, 29, SPECIES_SHUPPET},
- {27, 27, SPECIES_SHUPPET},
- {26, 26, SPECIES_SHUPPET},
- {30, 30, SPECIES_SHUPPET},
- {25, 25, SPECIES_SHUPPET},
- {24, 24, SPECIES_SHUPPET},
- {28, 28, SPECIES_DUSKULL},
- {26, 26, SPECIES_DUSKULL},
- {30, 30, SPECIES_DUSKULL},
- {28, 28, SPECIES_CHIMECHO},
- {28, 28, SPECIES_CHIMECHO},
-};
-
-const struct WildPokemonInfo gMtPyre_Summit_LandMonsInfo = {10, gMtPyre_Summit_LandMons};
-
-const struct WildPokemon gGraniteCave_StevensRoom_LandMons[] =
-{
- {7, 7, SPECIES_ZUBAT},
- {8, 8, SPECIES_MAKUHITA},
- {7, 7, SPECIES_MAKUHITA},
- {8, 8, SPECIES_ZUBAT},
- {9, 9, SPECIES_MAKUHITA},
- {8, 8, SPECIES_ABRA},
- {10, 10, SPECIES_MAKUHITA},
- {6, 6, SPECIES_MAKUHITA},
- {7, 7, SPECIES_ARON},
- {8, 8, SPECIES_ARON},
- {7, 7, SPECIES_ARON},
- {8, 8, SPECIES_ARON},
-};
-
-const struct WildPokemonInfo gGraniteCave_StevensRoom_LandMonsInfo = {10, gGraniteCave_StevensRoom_LandMons};
-
-const struct WildPokemon gRoute125_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute125_WaterMonsInfo = {4, gRoute125_WaterMons};
-
-const struct WildPokemon gRoute125_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute125_FishingMonsInfo = {30, gRoute125_FishingMons};
-
-const struct WildPokemon gRoute126_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute126_WaterMonsInfo = {4, gRoute126_WaterMons};
-
-const struct WildPokemon gRoute126_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute126_FishingMonsInfo = {30, gRoute126_FishingMons};
-
-const struct WildPokemon gRoute127_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute127_WaterMonsInfo = {4, gRoute127_WaterMons};
-
-const struct WildPokemon gRoute127_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute127_FishingMonsInfo = {30, gRoute127_FishingMons};
-
-const struct WildPokemon gRoute128_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute128_WaterMonsInfo = {4, gRoute128_WaterMons};
-
-const struct WildPokemon gRoute128_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_LUVDISC},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_LUVDISC},
- {30, 35, SPECIES_WAILMER},
- {30, 35, SPECIES_CORSOLA},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute128_FishingMonsInfo = {30, gRoute128_FishingMons};
-
-const struct WildPokemon gRoute129_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_WAILORD},
-};
-
-const struct WildPokemonInfo gRoute129_WaterMonsInfo = {4, gRoute129_WaterMons};
-
-const struct WildPokemon gRoute129_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute129_FishingMonsInfo = {30, gRoute129_FishingMons};
-
-const struct WildPokemon gRoute130_LandMons[] =
-{
- {30, 30, SPECIES_WYNAUT},
- {35, 35, SPECIES_WYNAUT},
- {25, 25, SPECIES_WYNAUT},
- {40, 40, SPECIES_WYNAUT},
- {20, 20, SPECIES_WYNAUT},
- {45, 45, SPECIES_WYNAUT},
- {15, 15, SPECIES_WYNAUT},
- {50, 50, SPECIES_WYNAUT},
- {10, 10, SPECIES_WYNAUT},
- {5, 5, SPECIES_WYNAUT},
- {10, 10, SPECIES_WYNAUT},
- {5, 5, SPECIES_WYNAUT},
-};
-
-const struct WildPokemonInfo gRoute130_LandMonsInfo = {20, gRoute130_LandMons};
-
-const struct WildPokemon gRoute130_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute130_WaterMonsInfo = {4, gRoute130_WaterMons};
-
-const struct WildPokemon gRoute130_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute130_FishingMonsInfo = {30, gRoute130_FishingMons};
-
-const struct WildPokemon gRoute131_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute131_WaterMonsInfo = {4, gRoute131_WaterMons};
-
-const struct WildPokemon gRoute131_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute131_FishingMonsInfo = {30, gRoute131_FishingMons};
-
-const struct WildPokemon gRoute132_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute132_WaterMonsInfo = {4, gRoute132_WaterMons};
-
-const struct WildPokemon gRoute132_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_HORSEA},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute132_FishingMonsInfo = {30, gRoute132_FishingMons};
-
-const struct WildPokemon gRoute133_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute133_WaterMonsInfo = {4, gRoute133_WaterMons};
-
-const struct WildPokemon gRoute133_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_HORSEA},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute133_FishingMonsInfo = {30, gRoute133_FishingMons};
-
-const struct WildPokemon gRoute134_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gRoute134_WaterMonsInfo = {4, gRoute134_WaterMons};
-
-const struct WildPokemon gRoute134_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_HORSEA},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gRoute134_FishingMonsInfo = {30, gRoute134_FishingMons};
-
-const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_TENTACOOL},
- {30, 35, SPECIES_TENTACRUEL},
-};
-
-const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo = {4, gAbandonedShip_HiddenFloorCorridors_WaterMons};
-
-const struct WildPokemon gAbandonedShip_HiddenFloorCorridors_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_TENTACOOL},
- {25, 30, SPECIES_TENTACOOL},
- {30, 35, SPECIES_TENTACOOL},
- {30, 35, SPECIES_TENTACRUEL},
- {25, 30, SPECIES_TENTACRUEL},
- {20, 25, SPECIES_TENTACRUEL},
-};
-
-const struct WildPokemonInfo gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo = {20, gAbandonedShip_HiddenFloorCorridors_FishingMons};
-
-const struct WildPokemon gSeafloorCavern_Room1_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room1_LandMonsInfo = {4, gSeafloorCavern_Room1_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Room2_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room2_LandMonsInfo = {4, gSeafloorCavern_Room2_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Room3_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room3_LandMonsInfo = {4, gSeafloorCavern_Room3_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Room4_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room4_LandMonsInfo = {4, gSeafloorCavern_Room4_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Room5_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room5_LandMonsInfo = {4, gSeafloorCavern_Room5_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Room6_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room6_LandMonsInfo = {4, gSeafloorCavern_Room6_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Room6_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_ZUBAT},
- {30, 35, SPECIES_ZUBAT},
- {30, 35, SPECIES_GOLBAT},
- {30, 35, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room6_WaterMonsInfo = {4, gSeafloorCavern_Room6_WaterMons};
-
-const struct WildPokemon gSeafloorCavern_Room6_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room6_FishingMonsInfo = {10, gSeafloorCavern_Room6_FishingMons};
-
-const struct WildPokemon gSeafloorCavern_Room7_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room7_LandMonsInfo = {4, gSeafloorCavern_Room7_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Room7_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_ZUBAT},
- {30, 35, SPECIES_ZUBAT},
- {30, 35, SPECIES_GOLBAT},
- {30, 35, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room7_WaterMonsInfo = {4, gSeafloorCavern_Room7_WaterMons};
-
-const struct WildPokemon gSeafloorCavern_Room7_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room7_FishingMonsInfo = {10, gSeafloorCavern_Room7_FishingMons};
-
-const struct WildPokemon gSeafloorCavern_Room8_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Room8_LandMonsInfo = {4, gSeafloorCavern_Room8_LandMons};
-
-const struct WildPokemon gSeafloorCavern_Entrance_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_ZUBAT},
- {30, 35, SPECIES_ZUBAT},
- {30, 35, SPECIES_GOLBAT},
- {30, 35, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Entrance_WaterMonsInfo = {4, gSeafloorCavern_Entrance_WaterMons};
-
-const struct WildPokemon gSeafloorCavern_Entrance_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gSeafloorCavern_Entrance_FishingMonsInfo = {10, gSeafloorCavern_Entrance_FishingMons};
-
-const struct WildPokemon gCaveOfOrigin_Entrance_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {33, 33, SPECIES_ZUBAT},
- {28, 28, SPECIES_ZUBAT},
- {29, 29, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {35, 35, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gCaveOfOrigin_Entrance_LandMonsInfo = {4, gCaveOfOrigin_Entrance_LandMons};
-
-const struct WildPokemon gCaveOfOrigin_1F_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {30, 30, SPECIES_SABLEYE},
- {32, 32, SPECIES_SABLEYE},
- {34, 34, SPECIES_SABLEYE},
- {33, 33, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gCaveOfOrigin_1F_LandMonsInfo = {4, gCaveOfOrigin_1F_LandMons};
-
-const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap1_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {30, 30, SPECIES_SABLEYE},
- {32, 32, SPECIES_SABLEYE},
- {34, 34, SPECIES_SABLEYE},
- {33, 33, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap1_LandMons};
-
-const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap2_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {30, 30, SPECIES_SABLEYE},
- {32, 32, SPECIES_SABLEYE},
- {34, 34, SPECIES_SABLEYE},
- {33, 33, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap2_LandMons};
-
-const struct WildPokemon gCaveOfOrigin_UnusedRubySapphireMap3_LandMons[] =
-{
- {30, 30, SPECIES_ZUBAT},
- {31, 31, SPECIES_ZUBAT},
- {32, 32, SPECIES_ZUBAT},
- {30, 30, SPECIES_SABLEYE},
- {32, 32, SPECIES_SABLEYE},
- {34, 34, SPECIES_SABLEYE},
- {33, 33, SPECIES_ZUBAT},
- {34, 34, SPECIES_ZUBAT},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {36, 36, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo = {4, gCaveOfOrigin_UnusedRubySapphireMap3_LandMons};
-
-const struct WildPokemon gNewMauville_Entrance_LandMons[] =
-{
- {24, 24, SPECIES_VOLTORB},
- {24, 24, SPECIES_MAGNEMITE},
- {25, 25, SPECIES_VOLTORB},
- {25, 25, SPECIES_MAGNEMITE},
- {23, 23, SPECIES_VOLTORB},
- {23, 23, SPECIES_MAGNEMITE},
- {26, 26, SPECIES_VOLTORB},
- {26, 26, SPECIES_MAGNEMITE},
- {22, 22, SPECIES_VOLTORB},
- {22, 22, SPECIES_MAGNEMITE},
- {22, 22, SPECIES_VOLTORB},
- {22, 22, SPECIES_MAGNEMITE},
-};
-
-const struct WildPokemonInfo gNewMauville_Entrance_LandMonsInfo = {10, gNewMauville_Entrance_LandMons};
-
-const struct WildPokemon gSafariZone_Southwest_LandMons[] =
-{
- {25, 25, SPECIES_ODDISH},
- {27, 27, SPECIES_ODDISH},
- {25, 25, SPECIES_GIRAFARIG},
- {27, 27, SPECIES_GIRAFARIG},
- {25, 25, SPECIES_NATU},
- {27, 27, SPECIES_DODUO},
- {25, 25, SPECIES_GLOOM},
- {27, 27, SPECIES_WOBBUFFET},
- {25, 25, SPECIES_PIKACHU},
- {27, 27, SPECIES_WOBBUFFET},
- {27, 27, SPECIES_PIKACHU},
- {29, 29, SPECIES_WOBBUFFET},
-};
-
-const struct WildPokemonInfo gSafariZone_Southwest_LandMonsInfo = {25, gSafariZone_Southwest_LandMons};
-
-const struct WildPokemon gSafariZone_Southwest_WaterMons[] =
-{
- {20, 30, SPECIES_PSYDUCK},
- {20, 30, SPECIES_PSYDUCK},
- {30, 35, SPECIES_PSYDUCK},
- {30, 35, SPECIES_PSYDUCK},
- {30, 35, SPECIES_PSYDUCK},
-};
-
-const struct WildPokemonInfo gSafariZone_Southwest_WaterMonsInfo = {9, gSafariZone_Southwest_WaterMons};
-
-const struct WildPokemon gSafariZone_Southwest_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 25, SPECIES_GOLDEEN},
- {10, 30, SPECIES_GOLDEEN},
- {25, 30, SPECIES_GOLDEEN},
- {30, 35, SPECIES_GOLDEEN},
- {30, 35, SPECIES_SEAKING},
- {35, 40, SPECIES_SEAKING},
- {25, 30, SPECIES_SEAKING},
-};
-
-const struct WildPokemonInfo gSafariZone_Southwest_FishingMonsInfo = {35, gSafariZone_Southwest_FishingMons};
-
-const struct WildPokemon gSafariZone_North_LandMons[] =
-{
- {27, 27, SPECIES_PHANPY},
- {27, 27, SPECIES_ODDISH},
- {29, 29, SPECIES_PHANPY},
- {29, 29, SPECIES_ODDISH},
- {27, 27, SPECIES_NATU},
- {29, 29, SPECIES_GLOOM},
- {31, 31, SPECIES_GLOOM},
- {29, 29, SPECIES_NATU},
- {29, 29, SPECIES_XATU},
- {27, 27, SPECIES_HERACROSS},
- {31, 31, SPECIES_XATU},
- {29, 29, SPECIES_HERACROSS},
-};
-
-const struct WildPokemonInfo gSafariZone_North_LandMonsInfo = {25, gSafariZone_North_LandMons};
-
-const struct WildPokemon gSafariZone_North_RockSmashMons[] =
-{
- {10, 15, SPECIES_GEODUDE},
- {5, 10, SPECIES_GEODUDE},
- {15, 20, SPECIES_GEODUDE},
- {20, 25, SPECIES_GEODUDE},
- {25, 30, SPECIES_GEODUDE},
-};
-
-const struct WildPokemonInfo gSafariZone_North_RockSmashMonsInfo = {25, gSafariZone_North_RockSmashMons};
-
-const struct WildPokemon gSafariZone_Northwest_LandMons[] =
-{
- {27, 27, SPECIES_RHYHORN},
- {27, 27, SPECIES_ODDISH},
- {29, 29, SPECIES_RHYHORN},
- {29, 29, SPECIES_ODDISH},
- {27, 27, SPECIES_DODUO},
- {29, 29, SPECIES_GLOOM},
- {31, 31, SPECIES_GLOOM},
- {29, 29, SPECIES_DODUO},
- {29, 29, SPECIES_DODRIO},
- {27, 27, SPECIES_PINSIR},
- {31, 31, SPECIES_DODRIO},
- {29, 29, SPECIES_PINSIR},
-};
-
-const struct WildPokemonInfo gSafariZone_Northwest_LandMonsInfo = {25, gSafariZone_Northwest_LandMons};
-
-const struct WildPokemon gSafariZone_Northwest_WaterMons[] =
-{
- {20, 30, SPECIES_PSYDUCK},
- {20, 30, SPECIES_PSYDUCK},
- {30, 35, SPECIES_PSYDUCK},
- {30, 35, SPECIES_GOLDUCK},
- {25, 40, SPECIES_GOLDUCK},
-};
-
-const struct WildPokemonInfo gSafariZone_Northwest_WaterMonsInfo = {9, gSafariZone_Northwest_WaterMons};
-
-const struct WildPokemon gSafariZone_Northwest_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 25, SPECIES_GOLDEEN},
- {10, 30, SPECIES_GOLDEEN},
- {25, 30, SPECIES_GOLDEEN},
- {30, 35, SPECIES_GOLDEEN},
- {30, 35, SPECIES_SEAKING},
- {35, 40, SPECIES_SEAKING},
- {25, 30, SPECIES_SEAKING},
-};
-
-const struct WildPokemonInfo gSafariZone_Northwest_FishingMonsInfo = {35, gSafariZone_Northwest_FishingMons};
-
-const struct WildPokemon gVictoryRoad_B1F_LandMons[] =
-{
- {40, 40, SPECIES_GOLBAT},
- {40, 40, SPECIES_HARIYAMA},
- {40, 40, SPECIES_LAIRON},
- {40, 40, SPECIES_LAIRON},
- {38, 38, SPECIES_GOLBAT},
- {38, 38, SPECIES_HARIYAMA},
- {42, 42, SPECIES_GOLBAT},
- {42, 42, SPECIES_HARIYAMA},
- {42, 42, SPECIES_LAIRON},
- {38, 38, SPECIES_MAWILE},
- {42, 42, SPECIES_LAIRON},
- {38, 38, SPECIES_MAWILE},
-};
-
-const struct WildPokemonInfo gVictoryRoad_B1F_LandMonsInfo = {10, gVictoryRoad_B1F_LandMons};
-
-const struct WildPokemon gVictoryRoad_B1F_RockSmashMons[] =
-{
- {30, 40, SPECIES_GRAVELER},
- {30, 40, SPECIES_GEODUDE},
- {35, 40, SPECIES_GRAVELER},
- {35, 40, SPECIES_GRAVELER},
- {35, 40, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gVictoryRoad_B1F_RockSmashMonsInfo = {20, gVictoryRoad_B1F_RockSmashMons};
-
-const struct WildPokemon gVictoryRoad_B2F_LandMons[] =
-{
- {40, 40, SPECIES_GOLBAT},
- {40, 40, SPECIES_SABLEYE},
- {40, 40, SPECIES_LAIRON},
- {40, 40, SPECIES_LAIRON},
- {42, 42, SPECIES_GOLBAT},
- {42, 42, SPECIES_SABLEYE},
- {44, 44, SPECIES_GOLBAT},
- {44, 44, SPECIES_SABLEYE},
- {42, 42, SPECIES_LAIRON},
- {42, 42, SPECIES_MAWILE},
- {44, 44, SPECIES_LAIRON},
- {44, 44, SPECIES_MAWILE},
-};
-
-const struct WildPokemonInfo gVictoryRoad_B2F_LandMonsInfo = {10, gVictoryRoad_B2F_LandMons};
-
-const struct WildPokemon gVictoryRoad_B2F_WaterMons[] =
-{
- {30, 35, SPECIES_GOLBAT},
- {25, 30, SPECIES_GOLBAT},
- {35, 40, SPECIES_GOLBAT},
- {35, 40, SPECIES_GOLBAT},
- {35, 40, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gVictoryRoad_B2F_WaterMonsInfo = {4, gVictoryRoad_B2F_WaterMons};
-
-const struct WildPokemon gVictoryRoad_B2F_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {30, 35, SPECIES_WHISCASH},
- {35, 40, SPECIES_WHISCASH},
- {40, 45, SPECIES_WHISCASH},
-};
-
-const struct WildPokemonInfo gVictoryRoad_B2F_FishingMonsInfo = {30, gVictoryRoad_B2F_FishingMons};
-
-const struct WildPokemon gMeteorFalls_1F_1R_LandMons[] =
-{
- {16, 16, SPECIES_ZUBAT},
- {17, 17, SPECIES_ZUBAT},
- {18, 18, SPECIES_ZUBAT},
- {15, 15, SPECIES_ZUBAT},
- {14, 14, SPECIES_ZUBAT},
- {16, 16, SPECIES_SOLROCK},
- {18, 18, SPECIES_SOLROCK},
- {14, 14, SPECIES_SOLROCK},
- {19, 19, SPECIES_ZUBAT},
- {20, 20, SPECIES_ZUBAT},
- {19, 19, SPECIES_ZUBAT},
- {20, 20, SPECIES_ZUBAT},
-};
-
-const struct WildPokemonInfo gMeteorFalls_1F_1R_LandMonsInfo = {10, gMeteorFalls_1F_1R_LandMons};
-
-const struct WildPokemon gMeteorFalls_1F_1R_WaterMons[] =
-{
- {5, 35, SPECIES_ZUBAT},
- {30, 35, SPECIES_ZUBAT},
- {25, 35, SPECIES_SOLROCK},
- {15, 25, SPECIES_SOLROCK},
- {5, 15, SPECIES_SOLROCK},
-};
-
-const struct WildPokemonInfo gMeteorFalls_1F_1R_WaterMonsInfo = {4, gMeteorFalls_1F_1R_WaterMons};
-
-const struct WildPokemon gMeteorFalls_1F_1R_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {20, 25, SPECIES_BARBOACH},
- {35, 40, SPECIES_BARBOACH},
- {40, 45, SPECIES_BARBOACH},
-};
-
-const struct WildPokemonInfo gMeteorFalls_1F_1R_FishingMonsInfo = {30, gMeteorFalls_1F_1R_FishingMons};
-
-const struct WildPokemon gMeteorFalls_1F_2R_LandMons[] =
-{
- {33, 33, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {35, 35, SPECIES_SOLROCK},
- {33, 33, SPECIES_SOLROCK},
- {37, 37, SPECIES_SOLROCK},
- {35, 35, SPECIES_GOLBAT},
- {39, 39, SPECIES_SOLROCK},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gMeteorFalls_1F_2R_LandMonsInfo = {10, gMeteorFalls_1F_2R_LandMons};
-
-const struct WildPokemon gMeteorFalls_1F_2R_WaterMons[] =
-{
- {30, 35, SPECIES_GOLBAT},
- {30, 35, SPECIES_GOLBAT},
- {25, 35, SPECIES_SOLROCK},
- {15, 25, SPECIES_SOLROCK},
- {5, 15, SPECIES_SOLROCK},
-};
-
-const struct WildPokemonInfo gMeteorFalls_1F_2R_WaterMonsInfo = {4, gMeteorFalls_1F_2R_WaterMons};
-
-const struct WildPokemon gMeteorFalls_1F_2R_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {30, 35, SPECIES_WHISCASH},
- {35, 40, SPECIES_WHISCASH},
- {40, 45, SPECIES_WHISCASH},
-};
-
-const struct WildPokemonInfo gMeteorFalls_1F_2R_FishingMonsInfo = {30, gMeteorFalls_1F_2R_FishingMons};
-
-const struct WildPokemon gMeteorFalls_B1F_1R_LandMons[] =
-{
- {33, 33, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {35, 35, SPECIES_SOLROCK},
- {33, 33, SPECIES_SOLROCK},
- {37, 37, SPECIES_SOLROCK},
- {35, 35, SPECIES_GOLBAT},
- {39, 39, SPECIES_SOLROCK},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gMeteorFalls_B1F_1R_LandMonsInfo = {10, gMeteorFalls_B1F_1R_LandMons};
-
-const struct WildPokemon gMeteorFalls_B1F_1R_WaterMons[] =
-{
- {30, 35, SPECIES_GOLBAT},
- {30, 35, SPECIES_GOLBAT},
- {25, 35, SPECIES_SOLROCK},
- {15, 25, SPECIES_SOLROCK},
- {5, 15, SPECIES_SOLROCK},
-};
-
-const struct WildPokemonInfo gMeteorFalls_B1F_1R_WaterMonsInfo = {4, gMeteorFalls_B1F_1R_WaterMons};
-
-const struct WildPokemon gMeteorFalls_B1F_1R_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_BARBOACH},
- {25, 30, SPECIES_BARBOACH},
- {30, 35, SPECIES_BARBOACH},
- {30, 35, SPECIES_WHISCASH},
- {35, 40, SPECIES_WHISCASH},
- {40, 45, SPECIES_WHISCASH},
-};
-
-const struct WildPokemonInfo gMeteorFalls_B1F_1R_FishingMonsInfo = {30, gMeteorFalls_B1F_1R_FishingMons};
-
-const struct WildPokemon gShoalCave_LowTideStairsRoom_LandMons[] =
-{
- {26, 26, SPECIES_ZUBAT},
- {26, 26, SPECIES_SPHEAL},
- {28, 28, SPECIES_ZUBAT},
- {28, 28, SPECIES_SPHEAL},
- {30, 30, SPECIES_ZUBAT},
- {30, 30, SPECIES_SPHEAL},
- {32, 32, SPECIES_ZUBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideStairsRoom_LandMonsInfo = {10, gShoalCave_LowTideStairsRoom_LandMons};
-
-const struct WildPokemon gShoalCave_LowTideLowerRoom_LandMons[] =
-{
- {26, 26, SPECIES_ZUBAT},
- {26, 26, SPECIES_SPHEAL},
- {28, 28, SPECIES_ZUBAT},
- {28, 28, SPECIES_SPHEAL},
- {30, 30, SPECIES_ZUBAT},
- {30, 30, SPECIES_SPHEAL},
- {32, 32, SPECIES_ZUBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideLowerRoom_LandMonsInfo = {10, gShoalCave_LowTideLowerRoom_LandMons};
-
-const struct WildPokemon gShoalCave_LowTideInnerRoom_LandMons[] =
-{
- {26, 26, SPECIES_ZUBAT},
- {26, 26, SPECIES_SPHEAL},
- {28, 28, SPECIES_ZUBAT},
- {28, 28, SPECIES_SPHEAL},
- {30, 30, SPECIES_ZUBAT},
- {30, 30, SPECIES_SPHEAL},
- {32, 32, SPECIES_ZUBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_LandMonsInfo = {10, gShoalCave_LowTideInnerRoom_LandMons};
-
-const struct WildPokemon gShoalCave_LowTideInnerRoom_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_ZUBAT},
- {25, 30, SPECIES_SPHEAL},
- {25, 30, SPECIES_SPHEAL},
- {25, 35, SPECIES_SPHEAL},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_WaterMonsInfo = {4, gShoalCave_LowTideInnerRoom_WaterMons};
-
-const struct WildPokemon gShoalCave_LowTideInnerRoom_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideInnerRoom_FishingMonsInfo = {10, gShoalCave_LowTideInnerRoom_FishingMons};
-
-const struct WildPokemon gShoalCave_LowTideEntranceRoom_LandMons[] =
-{
- {26, 26, SPECIES_ZUBAT},
- {26, 26, SPECIES_SPHEAL},
- {28, 28, SPECIES_ZUBAT},
- {28, 28, SPECIES_SPHEAL},
- {30, 30, SPECIES_ZUBAT},
- {30, 30, SPECIES_SPHEAL},
- {32, 32, SPECIES_ZUBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
- {32, 32, SPECIES_GOLBAT},
- {32, 32, SPECIES_SPHEAL},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_LandMonsInfo = {10, gShoalCave_LowTideEntranceRoom_LandMons};
-
-const struct WildPokemon gShoalCave_LowTideEntranceRoom_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {5, 35, SPECIES_ZUBAT},
- {25, 30, SPECIES_SPHEAL},
- {25, 30, SPECIES_SPHEAL},
- {25, 35, SPECIES_SPHEAL},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_WaterMonsInfo = {4, gShoalCave_LowTideEntranceRoom_WaterMons};
-
-const struct WildPokemon gShoalCave_LowTideEntranceRoom_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideEntranceRoom_FishingMonsInfo = {10, gShoalCave_LowTideEntranceRoom_FishingMons};
-
-const struct WildPokemon gLilycoveCity_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gLilycoveCity_WaterMonsInfo = {4, gLilycoveCity_WaterMons};
-
-const struct WildPokemon gLilycoveCity_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_STARYU},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gLilycoveCity_FishingMonsInfo = {10, gLilycoveCity_FishingMons};
-
-const struct WildPokemon gDewfordTown_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gDewfordTown_WaterMonsInfo = {4, gDewfordTown_WaterMons};
-
-const struct WildPokemon gDewfordTown_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gDewfordTown_FishingMonsInfo = {10, gDewfordTown_FishingMons};
-
-const struct WildPokemon gSlateportCity_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gSlateportCity_WaterMonsInfo = {4, gSlateportCity_WaterMons};
-
-const struct WildPokemon gSlateportCity_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_WAILMER},
- {20, 25, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gSlateportCity_FishingMonsInfo = {10, gSlateportCity_FishingMons};
-
-const struct WildPokemon gMossdeepCity_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gMossdeepCity_WaterMonsInfo = {4, gMossdeepCity_WaterMons};
-
-const struct WildPokemon gMossdeepCity_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gMossdeepCity_FishingMonsInfo = {10, gMossdeepCity_FishingMons};
-
-const struct WildPokemon gPacifidlogTown_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gPacifidlogTown_WaterMonsInfo = {4, gPacifidlogTown_WaterMons};
-
-const struct WildPokemon gPacifidlogTown_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_SHARPEDO},
- {30, 35, SPECIES_WAILMER},
- {25, 30, SPECIES_WAILMER},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gPacifidlogTown_FishingMonsInfo = {10, gPacifidlogTown_FishingMons};
-
-const struct WildPokemon gEverGrandeCity_WaterMons[] =
-{
- {5, 35, SPECIES_TENTACOOL},
- {10, 30, SPECIES_WINGULL},
- {15, 25, SPECIES_WINGULL},
- {25, 30, SPECIES_PELIPPER},
- {25, 30, SPECIES_PELIPPER},
-};
-
-const struct WildPokemonInfo gEverGrandeCity_WaterMonsInfo = {4, gEverGrandeCity_WaterMons};
-
-const struct WildPokemon gEverGrandeCity_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_LUVDISC},
- {10, 30, SPECIES_WAILMER},
- {30, 35, SPECIES_LUVDISC},
- {30, 35, SPECIES_WAILMER},
- {30, 35, SPECIES_CORSOLA},
- {35, 40, SPECIES_WAILMER},
- {40, 45, SPECIES_WAILMER},
-};
-
-const struct WildPokemonInfo gEverGrandeCity_FishingMonsInfo = {10, gEverGrandeCity_FishingMons};
-
-const struct WildPokemon gPetalburgCity_WaterMons[] =
-{
- {20, 30, SPECIES_MARILL},
- {10, 20, SPECIES_MARILL},
- {30, 35, SPECIES_MARILL},
- {5, 10, SPECIES_MARILL},
- {5, 10, SPECIES_MARILL},
-};
-
-const struct WildPokemonInfo gPetalburgCity_WaterMonsInfo = {1, gPetalburgCity_WaterMons};
-
-const struct WildPokemon gPetalburgCity_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_GOLDEEN},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_GOLDEEN},
- {10, 30, SPECIES_CORPHISH},
- {25, 30, SPECIES_CORPHISH},
- {30, 35, SPECIES_CORPHISH},
- {20, 25, SPECIES_CORPHISH},
- {35, 40, SPECIES_CORPHISH},
- {40, 45, SPECIES_CORPHISH},
-};
-
-const struct WildPokemonInfo gPetalburgCity_FishingMonsInfo = {10, gPetalburgCity_FishingMons};
-
-const struct WildPokemon gUnderwater1_WaterMons[] =
-{
- {20, 30, SPECIES_CLAMPERL},
- {20, 30, SPECIES_CHINCHOU},
- {30, 35, SPECIES_CLAMPERL},
- {30, 35, SPECIES_RELICANTH},
- {30, 35, SPECIES_RELICANTH},
-};
-
-const struct WildPokemonInfo gUnderwater1_WaterMonsInfo = {4, gUnderwater1_WaterMons};
-
-const struct WildPokemon gShoalCave_LowTideIceRoom_LandMons[] =
-{
- {26, 26, SPECIES_ZUBAT},
- {26, 26, SPECIES_SPHEAL},
- {28, 28, SPECIES_ZUBAT},
- {28, 28, SPECIES_SPHEAL},
- {30, 30, SPECIES_ZUBAT},
- {30, 30, SPECIES_SPHEAL},
- {26, 26, SPECIES_SNORUNT},
- {32, 32, SPECIES_SPHEAL},
- {30, 30, SPECIES_GOLBAT},
- {28, 28, SPECIES_SNORUNT},
- {32, 32, SPECIES_GOLBAT},
- {30, 30, SPECIES_SNORUNT},
-};
-
-const struct WildPokemonInfo gShoalCave_LowTideIceRoom_LandMonsInfo = {10, gShoalCave_LowTideIceRoom_LandMons};
-
-const struct WildPokemon gSkyPillar_1F_LandMons[] =
-{
- {33, 33, SPECIES_SABLEYE},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {34, 34, SPECIES_SABLEYE},
- {36, 36, SPECIES_CLAYDOL},
- {37, 37, SPECIES_BANETTE},
- {38, 38, SPECIES_BANETTE},
- {36, 36, SPECIES_CLAYDOL},
- {37, 37, SPECIES_CLAYDOL},
- {38, 38, SPECIES_CLAYDOL},
- {37, 37, SPECIES_CLAYDOL},
- {38, 38, SPECIES_CLAYDOL},
-};
-
-const struct WildPokemonInfo gSkyPillar_1F_LandMonsInfo = {10, gSkyPillar_1F_LandMons};
-
-const struct WildPokemon gSootopolisCity_WaterMons[] =
-{
- {5, 35, SPECIES_MAGIKARP},
- {10, 30, SPECIES_MAGIKARP},
- {15, 25, SPECIES_MAGIKARP},
- {25, 30, SPECIES_MAGIKARP},
- {25, 30, SPECIES_MAGIKARP},
-};
-
-const struct WildPokemonInfo gSootopolisCity_WaterMonsInfo = {1, gSootopolisCity_WaterMons};
-
-const struct WildPokemon gSootopolisCity_FishingMons[] =
-{
- {5, 10, SPECIES_MAGIKARP},
- {5, 10, SPECIES_TENTACOOL},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_MAGIKARP},
- {10, 30, SPECIES_MAGIKARP},
- {30, 35, SPECIES_MAGIKARP},
- {30, 35, SPECIES_MAGIKARP},
- {35, 40, SPECIES_GYARADOS},
- {35, 45, SPECIES_GYARADOS},
- {5, 45, SPECIES_GYARADOS},
-};
-
-const struct WildPokemonInfo gSootopolisCity_FishingMonsInfo = {10, gSootopolisCity_FishingMons};
-
-const struct WildPokemon gSkyPillar_3F_LandMons[] =
-{
- {33, 33, SPECIES_SABLEYE},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {34, 34, SPECIES_SABLEYE},
- {36, 36, SPECIES_CLAYDOL},
- {37, 37, SPECIES_BANETTE},
- {38, 38, SPECIES_BANETTE},
- {36, 36, SPECIES_CLAYDOL},
- {37, 37, SPECIES_CLAYDOL},
- {38, 38, SPECIES_CLAYDOL},
- {37, 37, SPECIES_CLAYDOL},
- {38, 38, SPECIES_CLAYDOL},
-};
-
-const struct WildPokemonInfo gSkyPillar_3F_LandMonsInfo = {10, gSkyPillar_3F_LandMons};
-
-const struct WildPokemon gSkyPillar_5F_LandMons[] =
-{
- {33, 33, SPECIES_SABLEYE},
- {34, 34, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {34, 34, SPECIES_SABLEYE},
- {36, 36, SPECIES_CLAYDOL},
- {37, 37, SPECIES_BANETTE},
- {38, 38, SPECIES_BANETTE},
- {36, 36, SPECIES_CLAYDOL},
- {37, 37, SPECIES_CLAYDOL},
- {38, 38, SPECIES_ALTARIA},
- {39, 39, SPECIES_ALTARIA},
- {39, 39, SPECIES_ALTARIA},
-};
-
-const struct WildPokemonInfo gSkyPillar_5F_LandMonsInfo = {10, gSkyPillar_5F_LandMons};
-
-const struct WildPokemon gSafariZone_Southeast_LandMons[] =
-{
- {33, 33, SPECIES_SUNKERN},
- {34, 34, SPECIES_MAREEP},
- {35, 35, SPECIES_SUNKERN},
- {36, 36, SPECIES_MAREEP},
- {34, 34, SPECIES_AIPOM},
- {33, 33, SPECIES_SPINARAK},
- {35, 35, SPECIES_HOOTHOOT},
- {34, 34, SPECIES_SNUBBULL},
- {36, 36, SPECIES_STANTLER},
- {37, 37, SPECIES_GLIGAR},
- {39, 39, SPECIES_STANTLER},
- {40, 40, SPECIES_GLIGAR},
-};
-
-const struct WildPokemonInfo gSafariZone_Southeast_LandMonsInfo = {25, gSafariZone_Southeast_LandMons};
-
-const struct WildPokemon gSafariZone_Southeast_WaterMons[] =
-{
- {25, 30, SPECIES_WOOPER},
- {25, 30, SPECIES_MARILL},
- {25, 30, SPECIES_MARILL},
- {30, 35, SPECIES_MARILL},
- {35, 40, SPECIES_QUAGSIRE},
-};
-
-const struct WildPokemonInfo gSafariZone_Southeast_WaterMonsInfo = {9, gSafariZone_Southeast_WaterMons};
-
-const struct WildPokemon gSafariZone_Southeast_FishingMons[] =
-{
- {25, 30, SPECIES_MAGIKARP},
- {25, 30, SPECIES_GOLDEEN},
- {25, 30, SPECIES_MAGIKARP},
- {25, 30, SPECIES_GOLDEEN},
- {30, 35, SPECIES_REMORAID},
- {25, 30, SPECIES_GOLDEEN},
- {25, 30, SPECIES_REMORAID},
- {30, 35, SPECIES_REMORAID},
- {30, 35, SPECIES_REMORAID},
- {35, 40, SPECIES_OCTILLERY},
-};
-
-const struct WildPokemonInfo gSafariZone_Southeast_FishingMonsInfo = {35, gSafariZone_Southeast_FishingMons};
-
-const struct WildPokemon gSafariZone_Northeast_LandMons[] =
-{
- {33, 33, SPECIES_AIPOM},
- {34, 34, SPECIES_TEDDIURSA},
- {35, 35, SPECIES_AIPOM},
- {36, 36, SPECIES_TEDDIURSA},
- {34, 34, SPECIES_SUNKERN},
- {33, 33, SPECIES_LEDYBA},
- {35, 35, SPECIES_HOOTHOOT},
- {34, 34, SPECIES_PINECO},
- {36, 36, SPECIES_HOUNDOUR},
- {37, 37, SPECIES_MILTANK},
- {39, 39, SPECIES_HOUNDOUR},
- {40, 40, SPECIES_MILTANK},
-};
-
-const struct WildPokemonInfo gSafariZone_Northeast_LandMonsInfo = {25, gSafariZone_Northeast_LandMons};
-
-const struct WildPokemon gSafariZone_Northeast_RockSmashMons[] =
-{
- {25, 30, SPECIES_SHUCKLE},
- {20, 25, SPECIES_SHUCKLE},
- {30, 35, SPECIES_SHUCKLE},
- {30, 35, SPECIES_SHUCKLE},
- {35, 40, SPECIES_SHUCKLE},
-};
-
-const struct WildPokemonInfo gSafariZone_Northeast_RockSmashMonsInfo = {25, gSafariZone_Northeast_RockSmashMons};
-
-const struct WildPokemon gMagmaHideout_1F_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_1F_LandMonsInfo = {10, gMagmaHideout_1F_LandMons};
-
-const struct WildPokemon gMagmaHideout_2F_1R_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_2F_1R_LandMonsInfo = {10, gMagmaHideout_2F_1R_LandMons};
-
-const struct WildPokemon gMagmaHideout_2F_2R_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_2F_2R_LandMonsInfo = {10, gMagmaHideout_2F_2R_LandMons};
-
-const struct WildPokemon gMagmaHideout_3F_1R_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_3F_1R_LandMonsInfo = {10, gMagmaHideout_3F_1R_LandMons};
-
-const struct WildPokemon gMagmaHideout_3F_2R_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_3F_2R_LandMonsInfo = {10, gMagmaHideout_3F_2R_LandMons};
-
-const struct WildPokemon gMagmaHideout_4F_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_4F_LandMonsInfo = {10, gMagmaHideout_4F_LandMons};
-
-const struct WildPokemon gMagmaHideout_3F_3R_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_3F_3R_LandMonsInfo = {10, gMagmaHideout_3F_3R_LandMons};
-
-const struct WildPokemon gMagmaHideout_2F_3R_LandMons[] =
-{
- {27, 27, SPECIES_GEODUDE},
- {28, 28, SPECIES_TORKOAL},
- {28, 28, SPECIES_GEODUDE},
- {30, 30, SPECIES_TORKOAL},
- {29, 29, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GEODUDE},
- {30, 30, SPECIES_GRAVELER},
- {30, 30, SPECIES_GRAVELER},
- {31, 31, SPECIES_GRAVELER},
- {32, 32, SPECIES_GRAVELER},
- {33, 33, SPECIES_GRAVELER},
-};
-
-const struct WildPokemonInfo gMagmaHideout_2F_3R_LandMonsInfo = {10, gMagmaHideout_2F_3R_LandMons};
-
-const struct WildPokemon gMirageTower_1F_LandMons[] =
-{
- {21, 21, SPECIES_SANDSHREW},
- {21, 21, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {22, 22, SPECIES_SANDSHREW},
- {22, 22, SPECIES_TRAPINCH},
- {23, 23, SPECIES_SANDSHREW},
- {23, 23, SPECIES_TRAPINCH},
- {24, 24, SPECIES_SANDSHREW},
- {24, 24, SPECIES_TRAPINCH},
-};
-
-const struct WildPokemonInfo gMirageTower_1F_LandMonsInfo = {10, gMirageTower_1F_LandMons};
-
-const struct WildPokemon gMirageTower_2F_LandMons[] =
-{
- {21, 21, SPECIES_SANDSHREW},
- {21, 21, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {22, 22, SPECIES_SANDSHREW},
- {22, 22, SPECIES_TRAPINCH},
- {23, 23, SPECIES_SANDSHREW},
- {23, 23, SPECIES_TRAPINCH},
- {24, 24, SPECIES_SANDSHREW},
- {24, 24, SPECIES_TRAPINCH},
-};
-
-const struct WildPokemonInfo gMirageTower_2F_LandMonsInfo = {10, gMirageTower_2F_LandMons};
-
-const struct WildPokemon gMirageTower_3F_LandMons[] =
-{
- {21, 21, SPECIES_SANDSHREW},
- {21, 21, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {22, 22, SPECIES_SANDSHREW},
- {22, 22, SPECIES_TRAPINCH},
- {23, 23, SPECIES_SANDSHREW},
- {23, 23, SPECIES_TRAPINCH},
- {24, 24, SPECIES_SANDSHREW},
- {24, 24, SPECIES_TRAPINCH},
-};
-
-const struct WildPokemonInfo gMirageTower_3F_LandMonsInfo = {10, gMirageTower_3F_LandMons};
-
-const struct WildPokemon gMirageTower_4F_LandMons[] =
-{
- {21, 21, SPECIES_SANDSHREW},
- {21, 21, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {20, 20, SPECIES_SANDSHREW},
- {20, 20, SPECIES_TRAPINCH},
- {22, 22, SPECIES_SANDSHREW},
- {22, 22, SPECIES_TRAPINCH},
- {23, 23, SPECIES_SANDSHREW},
- {23, 23, SPECIES_TRAPINCH},
- {24, 24, SPECIES_SANDSHREW},
- {24, 24, SPECIES_TRAPINCH},
-};
-
-const struct WildPokemonInfo gMirageTower_4F_LandMonsInfo = {10, gMirageTower_4F_LandMons};
-
-const struct WildPokemon gDesertUnderpass_LandMons[] =
-{
- {38, 38, SPECIES_DITTO},
- {35, 35, SPECIES_WHISMUR},
- {40, 40, SPECIES_DITTO},
- {40, 40, SPECIES_LOUDRED},
- {41, 41, SPECIES_DITTO},
- {36, 36, SPECIES_WHISMUR},
- {38, 38, SPECIES_LOUDRED},
- {42, 42, SPECIES_DITTO},
- {38, 38, SPECIES_WHISMUR},
- {43, 43, SPECIES_DITTO},
- {44, 44, SPECIES_LOUDRED},
- {45, 45, SPECIES_DITTO},
-};
-
-const struct WildPokemonInfo gDesertUnderpass_LandMonsInfo = {10, gDesertUnderpass_LandMons};
-
-const struct WildPokemon gArtisanCave_B1F_LandMons[] =
-{
- {40, 40, SPECIES_SMEARGLE},
- {41, 41, SPECIES_SMEARGLE},
- {42, 42, SPECIES_SMEARGLE},
- {43, 43, SPECIES_SMEARGLE},
- {44, 44, SPECIES_SMEARGLE},
- {45, 45, SPECIES_SMEARGLE},
- {46, 46, SPECIES_SMEARGLE},
- {47, 47, SPECIES_SMEARGLE},
- {48, 48, SPECIES_SMEARGLE},
- {49, 49, SPECIES_SMEARGLE},
- {50, 50, SPECIES_SMEARGLE},
- {50, 50, SPECIES_SMEARGLE},
-};
-
-const struct WildPokemonInfo gArtisanCave_B1F_LandMonsInfo = {10, gArtisanCave_B1F_LandMons};
-
-const struct WildPokemon gArtisanCave_1F_LandMons[] =
-{
- {40, 40, SPECIES_SMEARGLE},
- {41, 41, SPECIES_SMEARGLE},
- {42, 42, SPECIES_SMEARGLE},
- {43, 43, SPECIES_SMEARGLE},
- {44, 44, SPECIES_SMEARGLE},
- {45, 45, SPECIES_SMEARGLE},
- {46, 46, SPECIES_SMEARGLE},
- {47, 47, SPECIES_SMEARGLE},
- {48, 48, SPECIES_SMEARGLE},
- {49, 49, SPECIES_SMEARGLE},
- {50, 50, SPECIES_SMEARGLE},
- {50, 50, SPECIES_SMEARGLE},
-};
-
-const struct WildPokemonInfo gArtisanCave_1F_LandMonsInfo = {10, gArtisanCave_1F_LandMons};
-
-const struct WildPokemon gAlteringCave1_LandMons[] =
-{
- {10, 10, SPECIES_ZUBAT},
- {12, 12, SPECIES_ZUBAT},
- {8, 8, SPECIES_ZUBAT},
- {14, 14, SPECIES_ZUBAT},
- {10, 10, SPECIES_ZUBAT},
- {12, 12, SPECIES_ZUBAT},
- {16, 16, SPECIES_ZUBAT},
- {6, 6, SPECIES_ZUBAT},
- {8, 8, SPECIES_ZUBAT},
- {14, 14, SPECIES_ZUBAT},
- {8, 8, SPECIES_ZUBAT},
- {14, 14, SPECIES_ZUBAT},
-};
-
-const struct WildPokemonInfo gAlteringCave1_LandMonsInfo = {7, gAlteringCave1_LandMons};
-
-const struct WildPokemon gAlteringCave2_LandMons[] =
-{
- {7, 7, SPECIES_MAREEP},
- {9, 9, SPECIES_MAREEP},
- {5, 5, SPECIES_MAREEP},
- {11, 11, SPECIES_MAREEP},
- {7, 7, SPECIES_MAREEP},
- {9, 9, SPECIES_MAREEP},
- {13, 13, SPECIES_MAREEP},
- {3, 3, SPECIES_MAREEP},
- {5, 5, SPECIES_MAREEP},
- {11, 11, SPECIES_MAREEP},
- {5, 5, SPECIES_MAREEP},
- {11, 11, SPECIES_MAREEP},
-};
-
-const struct WildPokemonInfo gAlteringCave2_LandMonsInfo = {7, gAlteringCave2_LandMons};
-
-const struct WildPokemon gAlteringCave3_LandMons[] =
-{
- {23, 23, SPECIES_PINECO},
- {25, 25, SPECIES_PINECO},
- {22, 22, SPECIES_PINECO},
- {27, 27, SPECIES_PINECO},
- {23, 23, SPECIES_PINECO},
- {25, 25, SPECIES_PINECO},
- {29, 29, SPECIES_PINECO},
- {19, 19, SPECIES_PINECO},
- {21, 21, SPECIES_PINECO},
- {27, 27, SPECIES_PINECO},
- {21, 21, SPECIES_PINECO},
- {27, 27, SPECIES_PINECO},
-};
-
-const struct WildPokemonInfo gAlteringCave3_LandMonsInfo = {7, gAlteringCave3_LandMons};
-
-const struct WildPokemon gAlteringCave4_LandMons[] =
-{
- {16, 16, SPECIES_HOUNDOUR},
- {18, 18, SPECIES_HOUNDOUR},
- {14, 14, SPECIES_HOUNDOUR},
- {20, 20, SPECIES_HOUNDOUR},
- {16, 16, SPECIES_HOUNDOUR},
- {18, 18, SPECIES_HOUNDOUR},
- {22, 22, SPECIES_HOUNDOUR},
- {12, 12, SPECIES_HOUNDOUR},
- {14, 14, SPECIES_HOUNDOUR},
- {20, 20, SPECIES_HOUNDOUR},
- {14, 14, SPECIES_HOUNDOUR},
- {20, 20, SPECIES_HOUNDOUR},
-};
-
-const struct WildPokemonInfo gAlteringCave4_LandMonsInfo = {7, gAlteringCave4_LandMons};
-
-const struct WildPokemon gAlteringCave5_LandMons[] =
-{
- {10, 10, SPECIES_TEDDIURSA},
- {12, 12, SPECIES_TEDDIURSA},
- {8, 8, SPECIES_TEDDIURSA},
- {14, 14, SPECIES_TEDDIURSA},
- {10, 10, SPECIES_TEDDIURSA},
- {12, 12, SPECIES_TEDDIURSA},
- {16, 16, SPECIES_TEDDIURSA},
- {6, 6, SPECIES_TEDDIURSA},
- {8, 8, SPECIES_TEDDIURSA},
- {14, 14, SPECIES_TEDDIURSA},
- {8, 8, SPECIES_TEDDIURSA},
- {14, 14, SPECIES_TEDDIURSA},
-};
-
-const struct WildPokemonInfo gAlteringCave5_LandMonsInfo = {7, gAlteringCave5_LandMons};
-
-const struct WildPokemon gAlteringCave6_LandMons[] =
-{
- {22, 22, SPECIES_AIPOM},
- {24, 24, SPECIES_AIPOM},
- {20, 20, SPECIES_AIPOM},
- {26, 26, SPECIES_AIPOM},
- {22, 22, SPECIES_AIPOM},
- {24, 24, SPECIES_AIPOM},
- {28, 28, SPECIES_AIPOM},
- {18, 18, SPECIES_AIPOM},
- {20, 20, SPECIES_AIPOM},
- {26, 26, SPECIES_AIPOM},
- {20, 20, SPECIES_AIPOM},
- {26, 26, SPECIES_AIPOM},
-};
-
-const struct WildPokemonInfo gAlteringCave6_LandMonsInfo = {7, gAlteringCave6_LandMons};
-
-const struct WildPokemon gAlteringCave7_LandMons[] =
-{
- {22, 22, SPECIES_SHUCKLE},
- {24, 24, SPECIES_SHUCKLE},
- {20, 20, SPECIES_SHUCKLE},
- {26, 26, SPECIES_SHUCKLE},
- {22, 22, SPECIES_SHUCKLE},
- {24, 24, SPECIES_SHUCKLE},
- {28, 28, SPECIES_SHUCKLE},
- {18, 18, SPECIES_SHUCKLE},
- {20, 20, SPECIES_SHUCKLE},
- {26, 26, SPECIES_SHUCKLE},
- {20, 20, SPECIES_SHUCKLE},
- {26, 26, SPECIES_SHUCKLE},
-};
-
-const struct WildPokemonInfo gAlteringCave7_LandMonsInfo = {7, gAlteringCave7_LandMons};
-
-const struct WildPokemon gAlteringCave8_LandMons[] =
-{
- {22, 22, SPECIES_STANTLER},
- {24, 24, SPECIES_STANTLER},
- {20, 20, SPECIES_STANTLER},
- {26, 26, SPECIES_STANTLER},
- {22, 22, SPECIES_STANTLER},
- {24, 24, SPECIES_STANTLER},
- {28, 28, SPECIES_STANTLER},
- {18, 18, SPECIES_STANTLER},
- {20, 20, SPECIES_STANTLER},
- {26, 26, SPECIES_STANTLER},
- {20, 20, SPECIES_STANTLER},
- {26, 26, SPECIES_STANTLER},
-};
-
-const struct WildPokemonInfo gAlteringCave8_LandMonsInfo = {7, gAlteringCave8_LandMons};
-
-const struct WildPokemon gAlteringCave9_LandMons[] =
-{
- {22, 22, SPECIES_SMEARGLE},
- {24, 24, SPECIES_SMEARGLE},
- {20, 20, SPECIES_SMEARGLE},
- {26, 26, SPECIES_SMEARGLE},
- {22, 22, SPECIES_SMEARGLE},
- {24, 24, SPECIES_SMEARGLE},
- {28, 28, SPECIES_SMEARGLE},
- {18, 18, SPECIES_SMEARGLE},
- {20, 20, SPECIES_SMEARGLE},
- {26, 26, SPECIES_SMEARGLE},
- {20, 20, SPECIES_SMEARGLE},
- {26, 26, SPECIES_SMEARGLE},
-};
-
-const struct WildPokemonInfo gAlteringCave9_LandMonsInfo = {7, gAlteringCave9_LandMons};
-
-const struct WildPokemon gMeteorFalls_StevensCave_LandMons[] =
-{
- {33, 33, SPECIES_GOLBAT},
- {35, 35, SPECIES_GOLBAT},
- {33, 33, SPECIES_GOLBAT},
- {35, 35, SPECIES_SOLROCK},
- {33, 33, SPECIES_SOLROCK},
- {37, 37, SPECIES_SOLROCK},
- {35, 35, SPECIES_GOLBAT},
- {39, 39, SPECIES_SOLROCK},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
- {38, 38, SPECIES_GOLBAT},
- {40, 40, SPECIES_GOLBAT},
-};
-
-const struct WildPokemonInfo gMeteorFalls_StevensCave_LandMonsInfo = {10, gMeteorFalls_StevensCave_LandMons};
-
-const struct WildPokemonHeader gWildMonHeaders[] =
-{
- {
- .mapGroup = MAP_GROUP(ROUTE101),
- .mapNum = MAP_NUM(ROUTE101),
- .landMonsInfo = &gRoute101_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE102),
- .mapNum = MAP_NUM(ROUTE102),
- .landMonsInfo = &gRoute102_LandMonsInfo,
- .waterMonsInfo = &gRoute102_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute102_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE103),
- .mapNum = MAP_NUM(ROUTE103),
- .landMonsInfo = &gRoute103_LandMonsInfo,
- .waterMonsInfo = &gRoute103_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute103_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE104),
- .mapNum = MAP_NUM(ROUTE104),
- .landMonsInfo = &gRoute104_LandMonsInfo,
- .waterMonsInfo = &gRoute104_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute104_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE105),
- .mapNum = MAP_NUM(ROUTE105),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute105_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute105_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE110),
- .mapNum = MAP_NUM(ROUTE110),
- .landMonsInfo = &gRoute110_LandMonsInfo,
- .waterMonsInfo = &gRoute110_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute110_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE111),
- .mapNum = MAP_NUM(ROUTE111),
- .landMonsInfo = &gRoute111_LandMonsInfo,
- .waterMonsInfo = &gRoute111_WaterMonsInfo,
- .rockSmashMonsInfo = &gRoute111_RockSmashMonsInfo,
- .fishingMonsInfo = &gRoute111_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE112),
- .mapNum = MAP_NUM(ROUTE112),
- .landMonsInfo = &gRoute112_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE113),
- .mapNum = MAP_NUM(ROUTE113),
- .landMonsInfo = &gRoute113_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE114),
- .mapNum = MAP_NUM(ROUTE114),
- .landMonsInfo = &gRoute114_LandMonsInfo,
- .waterMonsInfo = &gRoute114_WaterMonsInfo,
- .rockSmashMonsInfo = &gRoute114_RockSmashMonsInfo,
- .fishingMonsInfo = &gRoute114_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE116),
- .mapNum = MAP_NUM(ROUTE116),
- .landMonsInfo = &gRoute116_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE117),
- .mapNum = MAP_NUM(ROUTE117),
- .landMonsInfo = &gRoute117_LandMonsInfo,
- .waterMonsInfo = &gRoute117_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute117_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE118),
- .mapNum = MAP_NUM(ROUTE118),
- .landMonsInfo = &gRoute118_LandMonsInfo,
- .waterMonsInfo = &gRoute118_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute118_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE124),
- .mapNum = MAP_NUM(ROUTE124),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute124_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute124_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(PETALBURG_WOODS),
- .mapNum = MAP_NUM(PETALBURG_WOODS),
- .landMonsInfo = &gPetalburgWoods_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(RUSTURF_TUNNEL),
- .mapNum = MAP_NUM(RUSTURF_TUNNEL),
- .landMonsInfo = &gRusturfTunnel_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(GRANITE_CAVE_1F),
- .mapNum = MAP_NUM(GRANITE_CAVE_1F),
- .landMonsInfo = &gGraniteCave_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(GRANITE_CAVE_B1F),
- .mapNum = MAP_NUM(GRANITE_CAVE_B1F),
- .landMonsInfo = &gGraniteCave_B1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_1F),
- .mapNum = MAP_NUM(MT_PYRE_1F),
- .landMonsInfo = &gMtPyre_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(VICTORY_ROAD_1F),
- .mapNum = MAP_NUM(VICTORY_ROAD_1F),
- .landMonsInfo = &gVictoryRoad_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTH),
- .mapNum = MAP_NUM(SAFARI_ZONE_SOUTH),
- .landMonsInfo = &gSafariZone_South_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(UNDERWATER2),
- .mapNum = MAP_NUM(UNDERWATER2),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gUnderwater2_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ABANDONED_SHIP_ROOMS_B1F),
- .mapNum = MAP_NUM(ABANDONED_SHIP_ROOMS_B1F),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gAbandonedShip_Rooms_B1F_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gAbandonedShip_Rooms_B1F_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(GRANITE_CAVE_B2F),
- .mapNum = MAP_NUM(GRANITE_CAVE_B2F),
- .landMonsInfo = &gGraniteCave_B2F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = &gGraniteCave_B2F_RockSmashMonsInfo,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(FIERY_PATH),
- .mapNum = MAP_NUM(FIERY_PATH),
- .landMonsInfo = &gFieryPath_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_2R),
- .mapNum = MAP_NUM(METEOR_FALLS_B1F_2R),
- .landMonsInfo = &gMeteorFalls_B1F_2R_LandMonsInfo,
- .waterMonsInfo = &gMeteorFalls_B1F_2R_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gMeteorFalls_B1F_2R_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(JAGGED_PASS),
- .mapNum = MAP_NUM(JAGGED_PASS),
- .landMonsInfo = &gJaggedPass_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE106),
- .mapNum = MAP_NUM(ROUTE106),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute106_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute106_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE107),
- .mapNum = MAP_NUM(ROUTE107),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute107_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute107_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE108),
- .mapNum = MAP_NUM(ROUTE108),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute108_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute108_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE109),
- .mapNum = MAP_NUM(ROUTE109),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute109_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute109_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE115),
- .mapNum = MAP_NUM(ROUTE115),
- .landMonsInfo = &gRoute115_LandMonsInfo,
- .waterMonsInfo = &gRoute115_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute115_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(NEW_MAUVILLE_INSIDE),
- .mapNum = MAP_NUM(NEW_MAUVILLE_INSIDE),
- .landMonsInfo = &gNewMauville_Inside_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE119),
- .mapNum = MAP_NUM(ROUTE119),
- .landMonsInfo = &gRoute119_LandMonsInfo,
- .waterMonsInfo = &gRoute119_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute119_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE120),
- .mapNum = MAP_NUM(ROUTE120),
- .landMonsInfo = &gRoute120_LandMonsInfo,
- .waterMonsInfo = &gRoute120_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute120_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE121),
- .mapNum = MAP_NUM(ROUTE121),
- .landMonsInfo = &gRoute121_LandMonsInfo,
- .waterMonsInfo = &gRoute121_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute121_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE122),
- .mapNum = MAP_NUM(ROUTE122),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute122_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute122_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE123),
- .mapNum = MAP_NUM(ROUTE123),
- .landMonsInfo = &gRoute123_LandMonsInfo,
- .waterMonsInfo = &gRoute123_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute123_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_2F),
- .mapNum = MAP_NUM(MT_PYRE_2F),
- .landMonsInfo = &gMtPyre_2F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_3F),
- .mapNum = MAP_NUM(MT_PYRE_3F),
- .landMonsInfo = &gMtPyre_3F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_4F),
- .mapNum = MAP_NUM(MT_PYRE_4F),
- .landMonsInfo = &gMtPyre_4F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_5F),
- .mapNum = MAP_NUM(MT_PYRE_5F),
- .landMonsInfo = &gMtPyre_5F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_6F),
- .mapNum = MAP_NUM(MT_PYRE_6F),
- .landMonsInfo = &gMtPyre_6F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_EXTERIOR),
- .mapNum = MAP_NUM(MT_PYRE_EXTERIOR),
- .landMonsInfo = &gMtPyre_Exterior_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MT_PYRE_SUMMIT),
- .mapNum = MAP_NUM(MT_PYRE_SUMMIT),
- .landMonsInfo = &gMtPyre_Summit_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(GRANITE_CAVE_STEVENS_ROOM),
- .mapNum = MAP_NUM(GRANITE_CAVE_STEVENS_ROOM),
- .landMonsInfo = &gGraniteCave_StevensRoom_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE125),
- .mapNum = MAP_NUM(ROUTE125),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute125_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute125_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE126),
- .mapNum = MAP_NUM(ROUTE126),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute126_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute126_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE127),
- .mapNum = MAP_NUM(ROUTE127),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute127_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute127_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE128),
- .mapNum = MAP_NUM(ROUTE128),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute128_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute128_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE129),
- .mapNum = MAP_NUM(ROUTE129),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute129_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute129_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE130),
- .mapNum = MAP_NUM(ROUTE130),
- .landMonsInfo = &gRoute130_LandMonsInfo,
- .waterMonsInfo = &gRoute130_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute130_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE131),
- .mapNum = MAP_NUM(ROUTE131),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute131_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute131_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE132),
- .mapNum = MAP_NUM(ROUTE132),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute132_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute132_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE133),
- .mapNum = MAP_NUM(ROUTE133),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute133_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute133_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ROUTE134),
- .mapNum = MAP_NUM(ROUTE134),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gRoute134_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gRoute134_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS),
- .mapNum = MAP_NUM(ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gAbandonedShip_HiddenFloorCorridors_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gAbandonedShip_HiddenFloorCorridors_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM1),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM1),
- .landMonsInfo = &gSeafloorCavern_Room1_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM2),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM2),
- .landMonsInfo = &gSeafloorCavern_Room2_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM3),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM3),
- .landMonsInfo = &gSeafloorCavern_Room3_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM4),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM4),
- .landMonsInfo = &gSeafloorCavern_Room4_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM5),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM5),
- .landMonsInfo = &gSeafloorCavern_Room5_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM6),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM6),
- .landMonsInfo = &gSeafloorCavern_Room6_LandMonsInfo,
- .waterMonsInfo = &gSeafloorCavern_Room6_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSeafloorCavern_Room6_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM7),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM7),
- .landMonsInfo = &gSeafloorCavern_Room7_LandMonsInfo,
- .waterMonsInfo = &gSeafloorCavern_Room7_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSeafloorCavern_Room7_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ROOM8),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ROOM8),
- .landMonsInfo = &gSeafloorCavern_Room8_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SEAFLOOR_CAVERN_ENTRANCE),
- .mapNum = MAP_NUM(SEAFLOOR_CAVERN_ENTRANCE),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gSeafloorCavern_Entrance_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSeafloorCavern_Entrance_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_ENTRANCE),
- .mapNum = MAP_NUM(CAVE_OF_ORIGIN_ENTRANCE),
- .landMonsInfo = &gCaveOfOrigin_Entrance_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_1F),
- .mapNum = MAP_NUM(CAVE_OF_ORIGIN_1F),
- .landMonsInfo = &gCaveOfOrigin_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1),
- .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1),
- .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap1_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2),
- .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2),
- .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap2_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3),
- .mapNum = MAP_NUM(CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3),
- .landMonsInfo = &gCaveOfOrigin_UnusedRubySapphireMap3_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(NEW_MAUVILLE_ENTRANCE),
- .mapNum = MAP_NUM(NEW_MAUVILLE_ENTRANCE),
- .landMonsInfo = &gNewMauville_Entrance_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHWEST),
- .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHWEST),
- .landMonsInfo = &gSafariZone_Southwest_LandMonsInfo,
- .waterMonsInfo = &gSafariZone_Southwest_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSafariZone_Southwest_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTH),
- .mapNum = MAP_NUM(SAFARI_ZONE_NORTH),
- .landMonsInfo = &gSafariZone_North_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = &gSafariZone_North_RockSmashMonsInfo,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHWEST),
- .mapNum = MAP_NUM(SAFARI_ZONE_NORTHWEST),
- .landMonsInfo = &gSafariZone_Northwest_LandMonsInfo,
- .waterMonsInfo = &gSafariZone_Northwest_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSafariZone_Northwest_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(VICTORY_ROAD_B1F),
- .mapNum = MAP_NUM(VICTORY_ROAD_B1F),
- .landMonsInfo = &gVictoryRoad_B1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = &gVictoryRoad_B1F_RockSmashMonsInfo,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(VICTORY_ROAD_B2F),
- .mapNum = MAP_NUM(VICTORY_ROAD_B2F),
- .landMonsInfo = &gVictoryRoad_B2F_LandMonsInfo,
- .waterMonsInfo = &gVictoryRoad_B2F_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gVictoryRoad_B2F_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(METEOR_FALLS_1F_1R),
- .mapNum = MAP_NUM(METEOR_FALLS_1F_1R),
- .landMonsInfo = &gMeteorFalls_1F_1R_LandMonsInfo,
- .waterMonsInfo = &gMeteorFalls_1F_1R_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gMeteorFalls_1F_1R_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(METEOR_FALLS_1F_2R),
- .mapNum = MAP_NUM(METEOR_FALLS_1F_2R),
- .landMonsInfo = &gMeteorFalls_1F_2R_LandMonsInfo,
- .waterMonsInfo = &gMeteorFalls_1F_2R_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gMeteorFalls_1F_2R_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(METEOR_FALLS_B1F_1R),
- .mapNum = MAP_NUM(METEOR_FALLS_B1F_1R),
- .landMonsInfo = &gMeteorFalls_B1F_1R_LandMonsInfo,
- .waterMonsInfo = &gMeteorFalls_B1F_1R_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gMeteorFalls_B1F_1R_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM),
- .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM),
- .landMonsInfo = &gShoalCave_LowTideStairsRoom_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM),
- .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_LOWER_ROOM),
- .landMonsInfo = &gShoalCave_LowTideLowerRoom_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_INNER_ROOM),
- .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_INNER_ROOM),
- .landMonsInfo = &gShoalCave_LowTideInnerRoom_LandMonsInfo,
- .waterMonsInfo = &gShoalCave_LowTideInnerRoom_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gShoalCave_LowTideInnerRoom_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM),
- .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM),
- .landMonsInfo = &gShoalCave_LowTideEntranceRoom_LandMonsInfo,
- .waterMonsInfo = &gShoalCave_LowTideEntranceRoom_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gShoalCave_LowTideEntranceRoom_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(LILYCOVE_CITY),
- .mapNum = MAP_NUM(LILYCOVE_CITY),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gLilycoveCity_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gLilycoveCity_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(DEWFORD_TOWN),
- .mapNum = MAP_NUM(DEWFORD_TOWN),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gDewfordTown_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gDewfordTown_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SLATEPORT_CITY),
- .mapNum = MAP_NUM(SLATEPORT_CITY),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gSlateportCity_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSlateportCity_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(MOSSDEEP_CITY),
- .mapNum = MAP_NUM(MOSSDEEP_CITY),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gMossdeepCity_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gMossdeepCity_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(PACIFIDLOG_TOWN),
- .mapNum = MAP_NUM(PACIFIDLOG_TOWN),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gPacifidlogTown_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gPacifidlogTown_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(EVER_GRANDE_CITY),
- .mapNum = MAP_NUM(EVER_GRANDE_CITY),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gEverGrandeCity_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gEverGrandeCity_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(PETALBURG_CITY),
- .mapNum = MAP_NUM(PETALBURG_CITY),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gPetalburgCity_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gPetalburgCity_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(UNDERWATER1),
- .mapNum = MAP_NUM(UNDERWATER1),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gUnderwater1_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM),
- .mapNum = MAP_NUM(SHOAL_CAVE_LOW_TIDE_ICE_ROOM),
- .landMonsInfo = &gShoalCave_LowTideIceRoom_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SKY_PILLAR_1F),
- .mapNum = MAP_NUM(SKY_PILLAR_1F),
- .landMonsInfo = &gSkyPillar_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SOOTOPOLIS_CITY),
- .mapNum = MAP_NUM(SOOTOPOLIS_CITY),
- .landMonsInfo = NULL,
- .waterMonsInfo = &gSootopolisCity_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSootopolisCity_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SKY_PILLAR_3F),
- .mapNum = MAP_NUM(SKY_PILLAR_3F),
- .landMonsInfo = &gSkyPillar_3F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SKY_PILLAR_5F),
- .mapNum = MAP_NUM(SKY_PILLAR_5F),
- .landMonsInfo = &gSkyPillar_5F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(SAFARI_ZONE_SOUTHEAST),
- .mapNum = MAP_NUM(SAFARI_ZONE_SOUTHEAST),
- .landMonsInfo = &gSafariZone_Southeast_LandMonsInfo,
- .waterMonsInfo = &gSafariZone_Southeast_WaterMonsInfo,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = &gSafariZone_Southeast_FishingMonsInfo,
- },
- {
- .mapGroup = MAP_GROUP(SAFARI_ZONE_NORTHEAST),
- .mapNum = MAP_NUM(SAFARI_ZONE_NORTHEAST),
- .landMonsInfo = &gSafariZone_Northeast_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = &gSafariZone_Northeast_RockSmashMonsInfo,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_1F),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_1F),
- .landMonsInfo = &gMagmaHideout_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_1R),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_1R),
- .landMonsInfo = &gMagmaHideout_2F_1R_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_2R),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_2R),
- .landMonsInfo = &gMagmaHideout_2F_2R_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_1R),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_1R),
- .landMonsInfo = &gMagmaHideout_3F_1R_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_2R),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_2R),
- .landMonsInfo = &gMagmaHideout_3F_2R_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_4F),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_4F),
- .landMonsInfo = &gMagmaHideout_4F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_3F_3R),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_3F_3R),
- .landMonsInfo = &gMagmaHideout_3F_3R_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MAGMA_HIDEOUT_2F_3R),
- .mapNum = MAP_NUM(MAGMA_HIDEOUT_2F_3R),
- .landMonsInfo = &gMagmaHideout_2F_3R_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MIRAGE_TOWER_1F),
- .mapNum = MAP_NUM(MIRAGE_TOWER_1F),
- .landMonsInfo = &gMirageTower_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MIRAGE_TOWER_2F),
- .mapNum = MAP_NUM(MIRAGE_TOWER_2F),
- .landMonsInfo = &gMirageTower_2F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MIRAGE_TOWER_3F),
- .mapNum = MAP_NUM(MIRAGE_TOWER_3F),
- .landMonsInfo = &gMirageTower_3F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(MIRAGE_TOWER_4F),
- .mapNum = MAP_NUM(MIRAGE_TOWER_4F),
- .landMonsInfo = &gMirageTower_4F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(DESERT_UNDERPASS),
- .mapNum = MAP_NUM(DESERT_UNDERPASS),
- .landMonsInfo = &gDesertUnderpass_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ARTISAN_CAVE_B1F),
- .mapNum = MAP_NUM(ARTISAN_CAVE_B1F),
- .landMonsInfo = &gArtisanCave_B1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ARTISAN_CAVE_1F),
- .mapNum = MAP_NUM(ARTISAN_CAVE_1F),
- .landMonsInfo = &gArtisanCave_1F_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave1_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave2_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave3_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave4_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave5_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave6_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave7_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave8_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(ALTERING_CAVE),
- .mapNum = MAP_NUM(ALTERING_CAVE),
- .landMonsInfo = &gAlteringCave9_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(METEOR_FALLS_STEVENS_CAVE),
- .mapNum = MAP_NUM(METEOR_FALLS_STEVENS_CAVE),
- .landMonsInfo = &gMeteorFalls_StevensCave_LandMonsInfo,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = MAP_GROUP(UNDEFINED),
- .mapNum = MAP_NUM(UNDEFINED),
- .landMonsInfo = NULL,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
-};
-
-const struct WildPokemon gBattlePyramidPlaceholders_1[] =
-{
- {5, 5, SPECIES_BULBASAUR},
- {5, 5, SPECIES_BULBASAUR},
- {5, 5, SPECIES_BULBASAUR},
- {5, 5, SPECIES_BULBASAUR},
- {5, 5, SPECIES_IVYSAUR},
- {5, 5, SPECIES_IVYSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_CHARMANDER},
-};
-
-const struct WildPokemonInfo gBattlePyramidPlaceholders_1Info = {4, gBattlePyramidPlaceholders_1};
-
-const struct WildPokemon gBattlePyramidPlaceholders_2[] =
-{
- {5, 5, SPECIES_IVYSAUR},
- {5, 5, SPECIES_IVYSAUR},
- {5, 5, SPECIES_IVYSAUR},
- {5, 5, SPECIES_IVYSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMANDER},
-};
-
-const struct WildPokemonInfo gBattlePyramidPlaceholders_2Info = {4, gBattlePyramidPlaceholders_2};
-
-const struct WildPokemon gBattlePyramidPlaceholders_3[] =
-{
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_VENUSAUR},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARIZARD},
-};
-
-const struct WildPokemonInfo gBattlePyramidPlaceholders_3Info = {4, gBattlePyramidPlaceholders_3};
-
-const struct WildPokemon gBattlePyramidPlaceholders_4[] =
-{
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMANDER},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_SQUIRTLE},
-};
-
-const struct WildPokemonInfo gBattlePyramidPlaceholders_4Info = {4, gBattlePyramidPlaceholders_4};
-
-const struct WildPokemon gBattlePyramidPlaceholders_5[] =
-{
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_WARTORTLE},
-};
-
-const struct WildPokemonInfo gBattlePyramidPlaceholders_5Info = {4, gBattlePyramidPlaceholders_5};
-
-const struct WildPokemon gBattlePyramidPlaceholders_6[] =
-{
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_WARTORTLE},
-};
-
-const struct WildPokemonInfo gBattlePyramidPlaceholders_6Info = {4, gBattlePyramidPlaceholders_6};
-
-const struct WildPokemon gBattlePyramidPlaceholders_7[] =
-{
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_WARTORTLE},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_SQUIRTLE},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARIZARD},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
- {5, 5, SPECIES_CHARMELEON},
-};
-
-const struct WildPokemonInfo gBattlePyramidPlaceholders_7Info = {8, gBattlePyramidPlaceholders_7};
-
-const struct WildPokemonHeader gBattlePyramidWildMonHeaders[] =
-{
- {
- .mapGroup = 0,
- .mapNum = 1,
- .landMonsInfo = &gBattlePyramidPlaceholders_1Info,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 2,
- .landMonsInfo = &gBattlePyramidPlaceholders_2Info,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 3,
- .landMonsInfo = &gBattlePyramidPlaceholders_3Info,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 4,
- .landMonsInfo = &gBattlePyramidPlaceholders_4Info,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 5,
- .landMonsInfo = &gBattlePyramidPlaceholders_5Info,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 6,
- .landMonsInfo = &gBattlePyramidPlaceholders_6Info,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 7,
- .landMonsInfo = &gBattlePyramidPlaceholders_7Info,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 255,
- .mapNum = 255,
- .landMonsInfo = NULL,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
-};
-
-const struct WildPokemon gBattlePikeMons_1[] =
-{
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_DUSCLOPS},
- {5, 5, SPECIES_DUSCLOPS},
- {5, 5, SPECIES_DUSCLOPS},
- {5, 5, SPECIES_DUSCLOPS},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_DUSCLOPS},
- {5, 5, SPECIES_DUSCLOPS},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
-};
-
-const struct WildPokemonInfo gBattlePikeMonsInfo_1 = {10, gBattlePikeMons_1};
-
-const struct WildPokemon gBattlePikeMons_2[] =
-{
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_ELECTRODE},
- {5, 5, SPECIES_ELECTRODE},
- {5, 5, SPECIES_ELECTRODE},
- {5, 5, SPECIES_ELECTRODE},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_ELECTRODE},
- {5, 5, SPECIES_ELECTRODE},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
-};
-
-const struct WildPokemonInfo gBattlePikeMonsInfo_2 = {10, gBattlePikeMons_2};
-
-const struct WildPokemon gBattlePikeMons_3[] =
-{
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_BRELOOM},
- {5, 5, SPECIES_BRELOOM},
- {5, 5, SPECIES_BRELOOM},
- {5, 5, SPECIES_BRELOOM},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_BRELOOM},
- {5, 5, SPECIES_BRELOOM},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
-};
-
-const struct WildPokemonInfo gBattlePikeMonsInfo_3 = {10, gBattlePikeMons_3};
-
-const struct WildPokemon gBattlePikeMons_4[] =
-{
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_WOBBUFFET},
- {5, 5, SPECIES_WOBBUFFET},
- {5, 5, SPECIES_WOBBUFFET},
- {5, 5, SPECIES_WOBBUFFET},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
- {5, 5, SPECIES_WOBBUFFET},
- {5, 5, SPECIES_WOBBUFFET},
- {5, 5, SPECIES_SEVIPER},
- {5, 5, SPECIES_MILOTIC},
-};
-
-const struct WildPokemonInfo gBattlePikeMonsInfo_4 = {10, gBattlePikeMons_4};
-
-const struct WildPokemonHeader gBattlePikeWildMonHeaders[] =
-{
- {
- .mapGroup = 0,
- .mapNum = 1,
- .landMonsInfo = &gBattlePikeMonsInfo_1,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 2,
- .landMonsInfo = &gBattlePikeMonsInfo_2,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 3,
- .landMonsInfo = &gBattlePikeMonsInfo_3,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 0,
- .mapNum = 4,
- .landMonsInfo = &gBattlePikeMonsInfo_4,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
- {
- .mapGroup = 255,
- .mapNum = 255,
- .landMonsInfo = NULL,
- .waterMonsInfo = NULL,
- .rockSmashMonsInfo = NULL,
- .fishingMonsInfo = NULL,
- },
-};
-
-const struct WildPokemon gWildFeebasRoute119Data = {20, 25, SPECIES_FEEBAS};
-
-const u16 gRoute119WaterTileData[] =
-{
- 0, 0x2D, 0,
- 0x2E, 0x5B, 0x83,
- 0x5C, 0x8B, 0x12A,
-};
+#include "data/wild_encounters.h"
// code
void DisableWildEncounters(bool8 disabled)
diff --git a/src/window.c b/src/window.c
index 5ae6c7509..aa1df3a12 100644
--- a/src/window.c
+++ b/src/window.c
@@ -674,7 +674,7 @@ void BlitBitmapRectToWindow4BitTo8Bit(u8 windowId, const u8 *pixels, u16 srcX, u
struct Bitmap sourceRect;
struct Bitmap destRect;
- sourceRect.pixels = pixels;
+ sourceRect.pixels = (u8*) pixels;
sourceRect.width = srcWidth;
sourceRect.height = srcHeight;